From 7af44da03b7f9aeca76d08caff0eb1dae1ff4b68 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 3 Aug 2024 16:16:14 +0800 Subject: [PATCH] :sparkles: More stickers apis --- pkg/internal/server/api/index.go | 2 ++ pkg/internal/server/api/sticker_packs_api.go | 29 ++++++++++++++++++- pkg/internal/server/api/stickers_api.go | 30 ++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/pkg/internal/server/api/index.go b/pkg/internal/server/api/index.go index d2983d3..2be246e 100644 --- a/pkg/internal/server/api/index.go +++ b/pkg/internal/server/api/index.go @@ -14,11 +14,13 @@ func MapAPIs(app *fiber.App, baseURL string) { api.Put("/attachments/:id", updateAttachmentMeta) api.Delete("/attachments/:id", deleteAttachment) + api.Get("/stickers/manifest", listStickerManifest) api.Get("/stickers/packs", listStickerPacks) api.Post("/stickers/packs", createStickerPack) api.Put("/stickers/packs/:packId", updateStickerPack) api.Delete("/stickers/packs/:packId", deleteStickerPack) + api.Get("/stickers", listStickers) api.Get("/stickers/:stickerId", getSticker) api.Post("/stickers", createSticker) api.Put("/stickers/:stickerId", updateSticker) diff --git a/pkg/internal/server/api/sticker_packs_api.go b/pkg/internal/server/api/sticker_packs_api.go index e204f1a..8d5e6f5 100644 --- a/pkg/internal/server/api/sticker_packs_api.go +++ b/pkg/internal/server/api/sticker_packs_api.go @@ -1,6 +1,7 @@ package api import ( + "git.solsynth.dev/hydrogen/paperclip/pkg/internal/database" "git.solsynth.dev/hydrogen/paperclip/pkg/internal/gap" "git.solsynth.dev/hydrogen/paperclip/pkg/internal/models" "git.solsynth.dev/hydrogen/paperclip/pkg/internal/server/exts" @@ -8,7 +9,7 @@ import ( "github.com/gofiber/fiber/v2" ) -func listStickerPacks(c *fiber.Ctx) error { +func listStickerManifest(c *fiber.Ctx) error { take := c.QueryInt("take", 0) offset := c.QueryInt("offset", 0) @@ -23,6 +24,32 @@ func listStickerPacks(c *fiber.Ctx) error { return c.JSON(stickers) } +func listStickerPacks(c *fiber.Ctx) error { + take := c.QueryInt("take", 0) + offset := c.QueryInt("offset", 0) + + if take > 100 { + take = 100 + } + + tx := database.C + + if len(c.Query("author")) > 0 { + var author models.Account + if err := database.C.Where("name = ?", c.Query("author")).First(&author).Error; err != nil { + return fiber.NewError(fiber.StatusBadRequest, err.Error()) + } else { + tx = tx.Where("account_id = ?", author.ID) + } + } + + var packs []models.StickerPack + if err := tx.Limit(take).Offset(offset).Find(&packs).Error; err != nil { + return fiber.NewError(fiber.StatusInternalServerError, err.Error()) + } + return c.JSON(packs) +} + func createStickerPack(c *fiber.Ctx) error { if err := gap.H.EnsureAuthenticated(c); err != nil { return err diff --git a/pkg/internal/server/api/stickers_api.go b/pkg/internal/server/api/stickers_api.go index 699eeb9..26a5d8b 100644 --- a/pkg/internal/server/api/stickers_api.go +++ b/pkg/internal/server/api/stickers_api.go @@ -12,6 +12,36 @@ import ( "github.com/gofiber/fiber/v2" ) +func listStickers(c *fiber.Ctx) error { + take := c.QueryInt("take", 0) + offset := c.QueryInt("offset", 0) + + if take > 100 { + take = 100 + } + + tx := database.C + + if len(c.Query("author")) > 0 { + var author models.Account + if err := database.C.Where("name = ?", c.Query("author")).First(&author).Error; err != nil { + return fiber.NewError(fiber.StatusBadRequest, err.Error()) + } else { + tx = tx.Where("account_id = ?", author.ID) + } + } + + if val := c.QueryInt("pack", 0); val > 0 { + tx = tx.Where("pack_id = ?", val) + } + + var stickers []models.Sticker + if err := tx.Limit(take).Offset(offset).Find(&stickers).Error; err != nil { + return fiber.NewError(fiber.StatusInternalServerError, err.Error()) + } + return c.JSON(stickers) +} + func getSticker(c *fiber.Ctx) error { id, _ := c.ParamsInt("stickerId", 0) sticker, err := services.GetSticker(uint(id))