mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-24 23:28:54 -05:00
[server][api] Add /my/bookmarks/list and add routes
This commit is contained in:
@@ -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(¶ms)
|
||||
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{})
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user