Exlicitly get the pseudonamespace with all shared lists (#32)
This commit is contained in:
parent
f1fca3346b
commit
0c1d786ade
7 changed files with 55 additions and 16 deletions
|
@ -4,7 +4,7 @@ Content-Type: application/json
|
|||
|
||||
{
|
||||
"username": "user",
|
||||
"password": "12345"
|
||||
"password": "1234"
|
||||
}
|
||||
|
||||
> {% client.global.set("auth_token", response.body.token); %}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Get all lists
|
||||
GET http://localhost:8080/api/v1/lists
|
||||
GET http://localhost:8080/api/v1/namespaces/1/lists
|
||||
Authorization: Bearer {{auth_token}}
|
||||
|
||||
###
|
||||
|
|
|
@ -39,8 +39,27 @@ type List struct {
|
|||
}
|
||||
|
||||
// GetListsByNamespaceID gets all lists in a namespace
|
||||
func GetListsByNamespaceID(nID int64) (lists []*List, err error) {
|
||||
err = x.Where("namespace_id = ?", nID).Find(&lists)
|
||||
func GetListsByNamespaceID(nID int64, doer *User) (lists []*List, err error) {
|
||||
if nID == -1 {
|
||||
err = x.Select("l.*").
|
||||
Table("list").
|
||||
Alias("l").
|
||||
Join("LEFT", []string{"team_list", "tl"}, "l.id = tl.list_id").
|
||||
Join("LEFT", []string{"team_members", "tm"}, "tm.team_id = tl.team_id").
|
||||
Join("LEFT", []string{"users_list", "ul"}, "ul.list_id = l.id").
|
||||
Where("tm.user_id = ?", doer.ID).
|
||||
Or("ul.user_id = ?", doer.ID).
|
||||
GroupBy("l.id").
|
||||
Find(&lists)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
err = x.Where("namespace_id = ?", nID).Find(&lists)
|
||||
}
|
||||
|
||||
// get more list details
|
||||
err = AddListDetails(lists)
|
||||
return lists, err
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ func TestList_ReadAll(t *testing.T) {
|
|||
//assert.NoError(t, PrepareTestDatabase())
|
||||
|
||||
// Get all lists for our namespace
|
||||
lists, err := GetListsByNamespaceID(1)
|
||||
lists, err := GetListsByNamespaceID(1, &User{})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, len(lists), 2)
|
||||
|
||||
|
|
|
@ -37,6 +37,15 @@ type Namespace struct {
|
|||
web.Rights `xorm:"-" json:"-"`
|
||||
}
|
||||
|
||||
// PseudoNamespace is a pseudo namespace used to hold shared lists
|
||||
var PseudoNamespace = Namespace{
|
||||
ID: -1,
|
||||
Name: "Shared Lists",
|
||||
Description: "Lists of other users shared with you via teams or directly.",
|
||||
Created: time.Now().Unix(),
|
||||
Updated: time.Now().Unix(),
|
||||
}
|
||||
|
||||
// TableName makes beautiful table names
|
||||
func (Namespace) TableName() string {
|
||||
return "namespaces"
|
||||
|
@ -44,11 +53,17 @@ func (Namespace) TableName() string {
|
|||
|
||||
// GetNamespaceByID returns a namespace object by its ID
|
||||
func GetNamespaceByID(id int64) (namespace Namespace, err error) {
|
||||
if id < 1 {
|
||||
if id == 0 {
|
||||
return namespace, ErrNamespaceDoesNotExist{ID: id}
|
||||
}
|
||||
|
||||
namespace.ID = id
|
||||
// Get the namesapce with shared lists
|
||||
if id == -1 {
|
||||
namespace = PseudoNamespace
|
||||
return namespace, err
|
||||
}
|
||||
|
||||
exists, err := x.Get(&namespace)
|
||||
if err != nil {
|
||||
return namespace, err
|
||||
|
@ -112,15 +127,10 @@ func (n *Namespace) ReadAll(search string, a web.Auth, page int) (interface{}, e
|
|||
|
||||
// Create our pseudo-namespace to hold the shared lists
|
||||
// We want this one at the beginning, which is why we create it here
|
||||
pseudonamespace := PseudoNamespace
|
||||
pseudonamespace.Owner = *doer
|
||||
all = append(all, &NamespaceWithLists{
|
||||
Namespace{
|
||||
ID: -1,
|
||||
Name: "Shared Lists",
|
||||
Description: "Lists of other users shared with you via teams or directly.",
|
||||
Owner: *doer,
|
||||
Created: time.Now().Unix(),
|
||||
Updated: time.Now().Unix(),
|
||||
},
|
||||
pseudonamespace,
|
||||
[]*List{},
|
||||
})
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ func (n *Namespace) Delete() (err error) {
|
|||
}
|
||||
|
||||
// Delete all lists with their tasks
|
||||
lists, err := GetListsByNamespaceID(n.ID)
|
||||
lists, err := GetListsByNamespaceID(n.ID, &User{})
|
||||
var listIDs []int64
|
||||
// We need to do that for here because we need the list ids to delete two times:
|
||||
// 1) to delete the lists itself
|
||||
|
|
|
@ -51,7 +51,12 @@ func GetListsByNamespaceID(c echo.Context) error {
|
|||
}
|
||||
|
||||
// Get the lists
|
||||
lists, err := models.GetListsByNamespaceID(namespace.ID)
|
||||
doer, err := models.GetCurrentUser(c)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusInternalServerError, models.Message{"An error occurred."})
|
||||
}
|
||||
|
||||
lists, err := models.GetListsByNamespaceID(namespace.ID, doer)
|
||||
if err != nil {
|
||||
if models.IsErrNamespaceDoesNotExist(err) {
|
||||
return c.JSON(http.StatusNotFound, models.Message{"Namespace not found."})
|
||||
|
@ -70,6 +75,11 @@ func getNamespace(c echo.Context) (namespace models.Namespace, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
if namespaceID == -1 {
|
||||
namespace = models.PseudoNamespace
|
||||
return
|
||||
}
|
||||
|
||||
// Get the namespace
|
||||
namespace, err = models.GetNamespaceByID(namespaceID)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue