implemented get all namespaces via interface
This commit is contained in:
@ -51,7 +51,7 @@ func GetListsByNamespaceID(nID int64) (lists []*List, err error) {
|
||||
return lists, err
|
||||
}
|
||||
|
||||
// ReadAll gets all List a user has access to
|
||||
// ReadAll gets all lists a user has access to
|
||||
func (l *List) ReadAll(user *User) (interface{}, error) {
|
||||
lists := Lists{}
|
||||
fullUser, _, err := GetUserByID(user.ID)
|
||||
|
@ -105,3 +105,51 @@ func GetNamespaceByID(id int64) (namespace Namespace, err error) {
|
||||
|
||||
return namespace, err
|
||||
}
|
||||
|
||||
// ReadAll gets all namespaces a user has access to
|
||||
func (n *Namespace) ReadAll(doer *User) (interface{}, error) {
|
||||
|
||||
all := []*Namespace{}
|
||||
|
||||
// TODO respect individual rights
|
||||
err := x.Select("namespaces.*").
|
||||
Table("namespaces").
|
||||
Join("LEFT", "team_namespaces", "namespaces.id = team_namespaces.namespace_id").
|
||||
Join("LEFT", "team_members", "team_members.team_id = team_namespaces.team_id").
|
||||
Where("team_members.user_id = ?", doer.ID).
|
||||
Or("namespaces.owner_id = ?", doer.ID).
|
||||
GroupBy("namespaces.id").
|
||||
Find(&all)
|
||||
|
||||
if err != nil {
|
||||
return all, err
|
||||
}
|
||||
|
||||
// Get all users
|
||||
users := []*User{}
|
||||
err = x.Select("users.*").
|
||||
Table("namespaces").
|
||||
Join("LEFT", "team_namespaces", "namespaces.id = team_namespaces.namespace_id").
|
||||
Join("LEFT", "team_members", "team_members.team_id = team_namespaces.team_id").
|
||||
Join("INNER", "users", "users.id = namespaces.owner_id").
|
||||
Where("team_members.user_id = ?", doer.ID).
|
||||
Or("namespaces.owner_id = ?", doer.ID).
|
||||
GroupBy("users.id").
|
||||
Find(&users)
|
||||
|
||||
if err != nil {
|
||||
return all, err
|
||||
}
|
||||
|
||||
// Put user objects in our namespace list
|
||||
for i, n := range all {
|
||||
for _, u := range users {
|
||||
if n.OwnerID == u.ID {
|
||||
all[i].Owner = *u
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return all, nil
|
||||
}
|
||||
|
@ -30,29 +30,3 @@ func CreateOrUpdateNamespace(namespace *Namespace) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// GetAllNamespacesByUserID does what it says
|
||||
func GetAllNamespacesByUserID(userID int64) (namespaces []Namespace, err error) {
|
||||
|
||||
// First, get all namespaces which that user owns
|
||||
err = x.Where("owner_id = ?", userID).Find(&namespaces)
|
||||
if err != nil {
|
||||
return namespaces, err
|
||||
}
|
||||
|
||||
// Get all namespaces of teams that user is part of
|
||||
/*err = x.Table("namespaces").
|
||||
Join("INNER", ).
|
||||
Find(namespaces)*/
|
||||
|
||||
// Get user objects
|
||||
// I couldn't come up with a more performant way to do this...
|
||||
for in, n := range namespaces {
|
||||
namespaces[in].Owner, _, err = GetUserByID(n.OwnerID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
Reference in New Issue
Block a user