diff --git a/pkg/internal/server/api/index.go b/pkg/internal/server/api/index.go index 5792acd..29610cf 100644 --- a/pkg/internal/server/api/index.go +++ b/pkg/internal/server/api/index.go @@ -23,6 +23,7 @@ func MapAPIs(app *fiber.App, baseURL string) { api.Post("/attachments/multipart", createAttachmentMultipartPlaceholder) api.Post("/attachments/multipart/:file/:chunk", uploadAttachmentMultipart) + api.Get("/stickers/lookup", lookupStickerBatch) api.Get("/stickers/lookup/:alias", lookupSticker) api.Get("/stickers/manifest", listStickerManifest) api.Get("/stickers/packs", listStickerPacks) diff --git a/pkg/internal/server/api/stickers_api.go b/pkg/internal/server/api/stickers_api.go index a911209..7cee9f7 100644 --- a/pkg/internal/server/api/stickers_api.go +++ b/pkg/internal/server/api/stickers_api.go @@ -12,6 +12,15 @@ import ( "github.com/gofiber/fiber/v2" ) +func lookupStickerBatch(c *fiber.Ctx) error { + probe := c.Query("probe") + if stickers, err := services.GetStickerLikeAlias(probe); err != nil { + return fiber.NewError(fiber.StatusNotFound, err.Error()) + } else { + return c.JSON(stickers) + } +} + func lookupSticker(c *fiber.Ctx) error { alias := c.Params("alias") if sticker, err := services.GetStickerWithAlias(alias); err != nil { diff --git a/pkg/internal/services/stickers.go b/pkg/internal/services/stickers.go index d767692..9e0d253 100644 --- a/pkg/internal/services/stickers.go +++ b/pkg/internal/services/stickers.go @@ -8,6 +8,20 @@ import ( "github.com/spf13/viper" ) +func GetStickerLikeAlias(alias string) ([]models.Sticker, error) { + var stickers []models.Sticker + prefix := viper.GetString("database.prefix") + if err := database.C. + Joins(fmt.Sprintf("LEFT JOIN %ssticker_packs pk ON pack_id = pk.id", prefix)). + Where("UPPER(CONCAT(pk.prefix, alias)) LIKE UPPER(?)", "%"+alias+"%"). + Preload("Attachment").Preload("Pack"). + Limit(10). + Find(&stickers).Error; err != nil { + return stickers, err + } + return stickers, nil +} + func GetStickerWithAlias(alias string) (models.Sticker, error) { var sticker models.Sticker prefix := viper.GetString("database.prefix")