Added method to show all lists in a namespace
This commit is contained in:
parent
06cae09f77
commit
e0244e28d7
4 changed files with 98 additions and 7 deletions
|
@ -6,29 +6,30 @@ type List struct {
|
||||||
Title string `xorm:"varchar(250)" json:"title"`
|
Title string `xorm:"varchar(250)" json:"title"`
|
||||||
Description string `xorm:"varchar(1000)" json:"description"`
|
Description string `xorm:"varchar(1000)" json:"description"`
|
||||||
OwnerID int64 `xorm:"int(11)" json:"-"`
|
OwnerID int64 `xorm:"int(11)" json:"-"`
|
||||||
Owner User `xorm:"-" json:"owner"`
|
NamespaceID int64 `xorm:"int(11)" json:"-"`
|
||||||
Created int64 `xorm:"created" json:"created"`
|
Created int64 `xorm:"created" json:"created"`
|
||||||
Updated int64 `xorm:"updated" json:"updated"`
|
Updated int64 `xorm:"updated" json:"updated"`
|
||||||
|
|
||||||
|
Owner User `xorm:"-" json:"owner"`
|
||||||
Items []*ListItem `xorm:"-" json:"items"`
|
Items []*ListItem `xorm:"-" json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetListByID returns a list by its ID
|
// GetListByID returns a list by its ID
|
||||||
func GetListByID(id int64) (list List, err error) {
|
func GetListByID(id int64) (list *List, err error) {
|
||||||
list.ID = id
|
list.ID = id
|
||||||
exists, err := x.Get(&list)
|
exists, err := x.Get(&list)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return List{}, err
|
return &List{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
return List{}, ErrListDoesNotExist{ID: id}
|
return &List{}, ErrListDoesNotExist{ID: id}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the list owner
|
// Get the list owner
|
||||||
user, _, err := GetUserByID(list.OwnerID)
|
user, _, err := GetUserByID(list.OwnerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return List{}, err
|
return &List{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
list.Owner = user
|
list.Owner = user
|
||||||
|
@ -61,3 +62,12 @@ func GetListsByUser(user *User) (lists []*List, err error) {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetListsByNamespaceID(nID int64) (lists []*List, err error) {
|
||||||
|
exists, err := x.Where("namespace_id = ?", nID).Get(lists)
|
||||||
|
if !exists {
|
||||||
|
return lists, ErrNamespaceDoesNotExist{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
68
routes/api/v1/list_by_namespace.go
Normal file
68
routes/api/v1/list_by_namespace.go
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/labstack/echo"
|
||||||
|
"strconv"
|
||||||
|
"net/http"
|
||||||
|
"git.kolaente.de/konrad/list/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetListsByNamespaceID(c echo.Context) error {
|
||||||
|
// swagger:operation GET /namespaces/{namespaceID}/lists namespaces getNamespaces
|
||||||
|
// ---
|
||||||
|
// summary: gets all lists belonging to that namespace
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: namespaceID
|
||||||
|
// in: path
|
||||||
|
// description: ID of the namespace
|
||||||
|
// type: string
|
||||||
|
// required: true
|
||||||
|
// responses:
|
||||||
|
// "200":
|
||||||
|
// "$ref": "#/responses/Namespace"
|
||||||
|
// "400":
|
||||||
|
// "$ref": "#/responses/Message"
|
||||||
|
// "500":
|
||||||
|
// "$ref": "#/responses/Message"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Check if we have our ID
|
||||||
|
id := c.Param("id")
|
||||||
|
// Make int
|
||||||
|
namespaceID, err := strconv.ParseInt(id, 10, 64)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusBadRequest, models.Message{"Invalid ID."})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the user has acces to that namespace
|
||||||
|
user, err := models.GetCurrentUser(c)
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusInternalServerError, models.Message{"An error occured."})
|
||||||
|
}
|
||||||
|
has, err := user.HasNamespaceAccess(&models.Namespace{ID:namespaceID})
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusInternalServerError, models.Message{"An error occured."})
|
||||||
|
}
|
||||||
|
if !has {
|
||||||
|
return c.JSON(http.StatusForbidden, models.Message{"You don't have access to this namespace."})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the lists
|
||||||
|
lists, err := models.GetListsByNamespaceID(namespaceID)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
if models.IsErrNamespaceDoesNotExist(err) {
|
||||||
|
return c.JSON(http.StatusNotFound, models.Message{"Namespace not found."})
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(http.StatusInternalServerError, models.Message{"An error occured."})
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(http.StatusOK, lists)
|
||||||
|
}
|
|
@ -38,6 +38,19 @@ func ShowNamespace(c echo.Context) error {
|
||||||
return c.JSON(http.StatusBadRequest, models.Message{"Invalid ID."})
|
return c.JSON(http.StatusBadRequest, models.Message{"Invalid ID."})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if the user has acces to that namespace
|
||||||
|
user, err := models.GetCurrentUser(c)
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusInternalServerError, models.Message{"An error occured."})
|
||||||
|
}
|
||||||
|
has, err := user.HasNamespaceAccess(&models.Namespace{ID:namespaceID})
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusInternalServerError, models.Message{"An error occured."})
|
||||||
|
}
|
||||||
|
if !has {
|
||||||
|
return c.JSON(http.StatusForbidden, models.Message{"You don't have access to this namespace."})
|
||||||
|
}
|
||||||
|
|
||||||
// Get the namespace
|
// Get the namespace
|
||||||
namespace, err := models.GetNamespaceByID(namespaceID)
|
namespace, err := models.GetNamespaceByID(namespaceID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -96,8 +96,8 @@ func RegisterRoutes(e *echo.Echo) {
|
||||||
a.GET("/namespaces", apiv1.GetAllNamespacesByCurrentUser)
|
a.GET("/namespaces", apiv1.GetAllNamespacesByCurrentUser)
|
||||||
a.PUT("/namespaces", apiv1.AddNamespace)
|
a.PUT("/namespaces", apiv1.AddNamespace)
|
||||||
a.GET("/namespaces/:id", apiv1.ShowNamespace)
|
a.GET("/namespaces/:id", apiv1.ShowNamespace)
|
||||||
//a.GET("/namespaces/:id/lists") // Gets all lists for that namespace
|
|
||||||
a.POST("/namespaces/:id", apiv1.UpdateNamespace)
|
a.POST("/namespaces/:id", apiv1.UpdateNamespace)
|
||||||
//a.PUT("/namespaces/:id") // Creates a new list in that namespace
|
|
||||||
// a.DELETE("/namespaces/:id") // Deletes a namespace with all lists
|
// a.DELETE("/namespaces/:id") // Deletes a namespace with all lists
|
||||||
|
a.GET("/namespaces/:id/lists", apiv1.GetListsByNamespaceID)
|
||||||
|
//a.PUT("/namespaces/:id/lists") // Creates a new list in that namespace
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue