From 6e2561eff36ceffff7dc97f32591b962e340e583 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Wed, 31 Jul 2024 10:33:53 -0700 Subject: [PATCH] List Resource Metadata --- server/internal/api/resources.go | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/server/internal/api/resources.go b/server/internal/api/resources.go index b431c401..524feccc 100644 --- a/server/internal/api/resources.go +++ b/server/internal/api/resources.go @@ -29,6 +29,51 @@ type resourceResponse struct { func setupResourceRoutes(r *gin.RouterGroup, a *app.App) { group := r.Group("/resources") group.GET("/:id/ls", createResourceLsRouteHandler(a)) + group.GET("/:id/metadata", createResourceMetadataRouteHandler(a)) +} +func createResourceMetadataRouteHandler(a *app.App) func(c *gin.Context) { + return func(c *gin.Context) { + resourceId, err := uuid.Parse(c.Param("id")) + if err != nil { + c.AbortWithStatusJSON(http.StatusNotFound, gin.H{ + "ERR_CODE": "resource_not_found", + }) + return + } + + resource, err := a.Db.Queries().ResourceById(context.Background(), resourceId) + if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + c.JSON(http.StatusNotFound, gin.H{ + "ERR_CODE": "resource_not_found", + }) + } else { + logrus.Warn(err) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ + "ERR_CODE": "unknown_error", + "ERR_DETAILS": err.Error(), + }) + } + return + } + + deleted := &resource.Deleted.Time + if !resource.Deleted.Valid { + deleted = nil + } + response := resourceResponse{ + ID: resource.ID, + Parent: resource.Parent, + Name: resource.Name, + Dir: resource.Dir, + Created: resource.Created.Time, + Modified: resource.Modified.Time, + Deleted: deleted, + Size: int(resource.Size.Int32), + Etag: resource.Etag.String, + } + c.JSON(200, response) + } } func createResourceLsRouteHandler(a *app.App) func(c *gin.Context) {