From d8a2a195364dba057cb0e6ae730c532ea843bf2c Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Tue, 6 Aug 2024 23:48:02 +0530 Subject: [PATCH] Simplify resource routes --- server/internal/api/api.go | 2 +- server/internal/api/routes/resources.go | 129 ++++++++++++------------ 2 files changed, 63 insertions(+), 68 deletions(-) diff --git a/server/internal/api/api.go b/server/internal/api/api.go index 23867a8f..2b839163 100644 --- a/server/internal/api/api.go +++ b/server/internal/api/api.go @@ -16,7 +16,7 @@ func Setup(r *gin.RouterGroup, a *app.App) { // Authenticated routes r.Use(auth.CreateBearerAuthHandler(a)) - routes.SetupResourceRoutes(r, a) + routes.SetupResourceRoutes(r) } func handleApiError(c *gin.Context) { diff --git a/server/internal/api/routes/resources.go b/server/internal/api/routes/resources.go index ad8b81d9..1bd9dc90 100644 --- a/server/internal/api/routes/resources.go +++ b/server/internal/api/routes/resources.go @@ -9,7 +9,6 @@ import ( "github.com/google/uuid" "github.com/shroff/phylum/server/internal/api/auth" "github.com/shroff/phylum/server/internal/api/errors" - "github.com/shroff/phylum/server/internal/app" ) const errCodeResourceNotFound = "resource_not_found" @@ -27,77 +26,73 @@ type resourceResponse struct { Etag string `json:"etag"` } -func SetupResourceRoutes(r *gin.RouterGroup, a *app.App) { +func SetupResourceRoutes(r *gin.RouterGroup) { group := r.Group("/resources") - group.GET("/:id/ls", createResourceLsRouteHandler(a)) - group.GET("/:id/metadata", createResourceMetadataRouteHandler(a)) + group.GET("/ls/:id", handleResourceLsRoute) + group.GET("/metadata/:id", handleResourceMetadataRoute) } -func createResourceMetadataRouteHandler(a *app.App) func(c *gin.Context) { - return func(c *gin.Context) { - resourceId, err := uuid.Parse(c.Param("id")) - if err != nil { - panic(errors.New(http.StatusBadRequest, errCodeResourceIdInvalid, "")) - } - - fs := auth.GetFileSystem(c) - resource, err := fs.ResourceByID(resourceId) - if err != nil { - if errors.Is(err, iofs.ErrNotExist) { - err = errors.New(http.StatusNotFound, errCodeResourceNotFound, "") - } - panic(err) - } - - response := resourceResponse{ - ID: resource.ID(), - Parent: resource.ParentID(), - Name: resource.Name(), - Dir: resource.IsDir(), - Modified: resource.ModTime(), - Deleted: resource.DelTime(), - Size: resource.Size(), - Etag: resource.ETag(), - } - c.JSON(200, response) +func handleResourceMetadataRoute(c *gin.Context) { + resourceId, err := uuid.Parse(c.Param("id")) + if err != nil { + panic(errors.New(http.StatusBadRequest, errCodeResourceIdInvalid, "")) } -} -func createResourceLsRouteHandler(a *app.App) func(c *gin.Context) { - return func(c *gin.Context) { - resourceId, err := uuid.Parse(c.Param("id")) - if err != nil { - panic(errors.New(http.StatusBadRequest, errCodeResourceIdInvalid, "")) + fs := auth.GetFileSystem(c) + resource, err := fs.ResourceByID(resourceId) + if err != nil { + if errors.Is(err, iofs.ErrNotExist) { + err = errors.New(http.StatusNotFound, errCodeResourceNotFound, "") } - - fs := auth.GetFileSystem(c) - resource, err := fs.ResourceByID(resourceId) - if err != nil { - if errors.Is(err, iofs.ErrNotExist) { - err = errors.New(http.StatusNotFound, errCodeResourceNotFound, "") - } - panic(err) - } - - if !resource.IsDir() { - panic(errors.New(http.StatusBadRequest, errCodeResourceNotCollection, "")) - } - children, err := fs.ReadDir(resource) - if err != nil { - panic(err) - } - results := make([]resourceResponse, len(children)) - for i, c := range children { - results[i] = resourceResponse{ - ID: c.ID(), - Parent: c.ParentID(), - Name: c.Name(), - Dir: c.IsDir(), - Modified: c.ModTime(), - Size: c.Size(), - Etag: c.ETag(), - } - } - c.JSON(200, results) + panic(err) } + + response := resourceResponse{ + ID: resource.ID(), + Parent: resource.ParentID(), + Name: resource.Name(), + Dir: resource.IsDir(), + Modified: resource.ModTime(), + Deleted: resource.DelTime(), + Size: resource.Size(), + Etag: resource.ETag(), + } + c.JSON(200, response) +} + +func handleResourceLsRoute(c *gin.Context) { + resourceId, err := uuid.Parse(c.Param("id")) + if err != nil { + panic(errors.New(http.StatusBadRequest, errCodeResourceIdInvalid, "")) + } + + fs := auth.GetFileSystem(c) + resource, err := fs.ResourceByID(resourceId) + if err != nil { + if errors.Is(err, iofs.ErrNotExist) { + err = errors.New(http.StatusNotFound, errCodeResourceNotFound, "") + } + panic(err) + } + + if !resource.IsDir() { + panic(errors.New(http.StatusBadRequest, errCodeResourceNotCollection, "")) + } + children, err := fs.ReadDir(resource) + if err != nil { + panic(err) + } + results := make([]resourceResponse, len(children)) + for i, c := range children { + results[i] = resourceResponse{ + ID: c.ID(), + Parent: c.ParentID(), + Name: c.Name(), + Dir: c.IsDir(), + Modified: c.ModTime(), + Size: c.Size(), + Etag: c.ETag(), + } + } + c.JSON(200, results) }