[server][api] Add /my/bookmarks/list and add routes

This commit is contained in:
Abhishek Shroff
2024-10-23 10:20:54 +05:30
parent 98ea972c38
commit 9514e10455
4 changed files with 59 additions and 20 deletions
+51 -14
View File
@@ -1,29 +1,44 @@
package my
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"github.com/shroff/phylum/server/internal/api/auth"
fsapi "github.com/shroff/phylum/server/internal/api/v1/fs"
"github.com/shroff/phylum/server/internal/core/errors"
"github.com/shroff/phylum/server/internal/core/fs"
"github.com/shroff/phylum/server/internal/core/user"
)
type myHomeResponse struct {
var errInvalidParams = errors.NewError(http.StatusBadRequest, "invalid_parameters", "Invalid Request Parameters")
type homeResponse struct {
User user.User `json:"user"`
Home fsapi.ResourceLsResponse `json:"home"`
}
type mySharedResponse struct {
type sharedResponse struct {
Shared []fs.Resource `json:"shared"`
}
type bookmarksResponse struct {
Bookmarks []fs.Resource `json:"bookmarks"`
}
type addBookmarkParams struct {
ID uuid.UUID `json:"id" binding:"required"`
}
func SetupRoutes(r *gin.RouterGroup) {
group := r.Group("/my")
group.GET("/home", handleMyHomeRoute)
group.GET("/shared", createMySharedRouteHandler())
group.GET("/home", handleHomeRoute)
group.GET("/shared", handleSharedRoute)
group.GET("/bookmarks/list", handleBookmarksGetRoute)
group.POST("/bookmarks/add", handleBookmarksAddRoute)
}
func handleMyHomeRoute(c *gin.Context) {
func handleHomeRoute(c *gin.Context) {
user := auth.GetUser(c)
f := auth.GetFileSystem(c)
r, err := f.ResourceByID(user.Home)
@@ -31,19 +46,41 @@ func handleMyHomeRoute(c *gin.Context) {
panic(err)
}
c.JSON(200, myHomeResponse{
c.JSON(200, homeResponse{
User: user,
Home: fsapi.LsResponseFromResource(f, r),
})
}
func createMySharedRouteHandler() func(*gin.Context) {
return func(c *gin.Context) {
// u := auth.GetUser(c)
// // shared, err := user.CreateManager(c.Request.Context()).GetSharedResources(u)
// if err != nil {
// panic(err)
// }
// c.JSON(200, mySharedResponse{Shared: shared})
func handleSharedRoute(c *gin.Context) {
u := auth.GetUser(c)
shared, err := user.CreateManager(c.Request.Context()).SharedResources(u)
if err != nil {
panic(err)
}
c.JSON(200, sharedResponse{Shared: shared})
}
func handleBookmarksGetRoute(c *gin.Context) {
u := auth.GetUser(c)
bookmarks, err := user.CreateManager(c.Request.Context()).Bookmarks(u)
if err != nil {
panic(err)
}
c.JSON(200, bookmarksResponse{Bookmarks: bookmarks})
}
func handleBookmarksAddRoute(c *gin.Context) {
var params addBookmarkParams
err := c.ShouldBindJSON(&params)
if err != nil || params.ID == uuid.Nil {
panic(errInvalidParams)
}
u := auth.GetUser(c)
err = user.CreateManager(c.Request.Context()).AddBookmark(u, params.ID)
if err != nil {
panic(err)
}
c.JSON(200, gin.H{})
}
+1 -1
View File
@@ -52,7 +52,7 @@ func setupBookmarksListCommand() *cobra.Command {
Short: "List Bookmarks",
Args: cobra.ExactArgs(0),
Run: func(cmd *cobra.Command, args []string) {
if bookmarks, err := user.CreateManager(context.Background()).ListBookmarks(common.User(cmd)); err != nil {
if bookmarks, err := user.CreateManager(context.Background()).Bookmarks(common.User(cmd)); err != nil {
fmt.Println("unable to list bookmark: " + err.Error())
os.Exit(1)
} else {
+2 -2
View File
@@ -41,7 +41,7 @@ type Manager interface {
ReadAccessToken(accessToken string) (User, error)
// user_lists.go
GetSharedResources(u User) (result []fs.Resource, err error)
SharedResources(u User) (result []fs.Resource, err error)
AddBookmark(u User, id uuid.UUID) error
ListBookmarks(u User) ([]fs.Resource, error)
Bookmarks(u User) ([]fs.Resource, error)
}
+5 -3
View File
@@ -6,8 +6,8 @@ import (
"github.com/shroff/phylum/server/internal/core/fs"
)
func (m manager) GetSharedResources(u User) ([]fs.Resource, error) {
// TODO: This doesn't take permissions into account. is this okay?
func (m manager) SharedResources(u User) ([]fs.Resource, error) {
// TODO: #permissions This doesn't take permissions into account. is this okay?
res, err := m.db.Queries.SharedResources(m.ctx, db.SharedResourcesParams{Username: u.Username, UserHome: u.Home})
if err != nil {
return nil, err
@@ -21,10 +21,12 @@ func (m manager) GetSharedResources(u User) ([]fs.Resource, error) {
}
func (m manager) AddBookmark(u User, id uuid.UUID) error {
// TODO: #permissions This doesn't check that the resource even exists, let alone permissions
return m.db.Queries.AddBookmark(m.ctx, db.AddBookmarkParams{Username: u.Username, ID: id})
}
func (m manager) ListBookmarks(u User) ([]fs.Resource, error) {
func (m manager) Bookmarks(u User) ([]fs.Resource, error) {
// TODO: #permissions This doesn't take permissions into account. is this okay?
res, err := m.db.Queries.ListBookmarks(m.ctx, u.Username)
if err != nil {
return nil, err