package service import ( "fmt" "strconv" "gitea.timerzz.com/kedaya_haitao/common/pkg/web" "gitea.timerzz.com/kedaya_haitao/common/structs/storage" "gitea.timerzz.com/kedaya_haitao/common/structs/utils" v2 "gitea.timerzz.com/kedaya_haitao/common/structs/v2" "github.com/gofiber/fiber/v3" ) type Article struct { storage *storage.Storage } func NewArticle(storage *storage.Storage) *Article { return &Article{ storage: storage, } } func (s *Article) Registry(r fiber.Router) { api := r.Group("/api/v2") api.Get("articles", s.List) api.Get("articles/:id", s.Get) api.Get("articles/dict/brand", s.BrandDict) api.Patch("articles", s.Update) api.Get("articles/provider/history/:id", s.ProviderHistory) api.Get("articles/seller/history/:id", s.SellerHistory) api.Patch("articles/provider", s.UpdateProviderArticle) api.Patch("articles/seller", s.UpdateSellerArticle) } func (s *Article) List(c fiber.Ctx) error { var q storage.FindArticleQuery if err := c.Bind().Query(&q); err != nil { return err } var query = storage.NewPageListQuery(&q) if err := c.Bind().Query(query); err != nil { return err } articles, total, err := s.storage.Article().List(*query, q.SortScope) if err != nil { return err } return c.JSON(web.NewResponse(web.NewListResponse(total, articles))) } func (s *Article) Get(c fiber.Ctx) error { id := c.Params("id") if id == "" { return fiber.NewError(fiber.StatusBadRequest, "id is required") } i, _ := strconv.Atoi(id) query := storage.NewGetArticleQuery().SetID(uint(i)) article, err := s.storage.Article().Get(query) if err != nil { return err } return c.JSON(web.NewResponse(article)) } func (s *Article) Update(c fiber.Ctx) error { var article v2.Article if err := c.Bind().JSON(&article); err != nil { return err } if article.ID == 0 { return fiber.NewError(fiber.StatusBadRequest, "id is required") } if err := s.storage.Article().Update(article); err != nil { return err } return c.JSON(web.NewResponse(article)) } func (s *Article) BrandDict(c fiber.Ctx) error { var dict = []utils.Dict{ { Key: string(v2.Brand_Coach), Title: fmt.Sprintf("蔻驰/%s", v2.Brand_Coach), Value: v2.Brand_Coach, }, } return c.JSON(web.NewResponse(dict)) } // 获取供应商历史价格 func (s *Article) ProviderHistory(c fiber.Ctx) error { i := c.Params("id") id, _ := strconv.Atoi(i) if id == 0 { return fiber.NewError(fiber.StatusBadRequest, "id is required") } prices, err := s.storage.ProviderArticle().ProviderPrice(uint(id)) if err != nil { return err } return c.JSON(web.NewResponse(prices)) } // 获取销售商历史价格 func (s *Article) SellerHistory(c fiber.Ctx) error { i := c.Params("id") id, _ := strconv.Atoi(i) if id == 0 { return fiber.NewError(fiber.StatusBadRequest, "id is required") } prices, err := s.storage.SellerArticle().SellerPrice(uint(id)) if err != nil { return err } return c.JSON(web.NewResponse(prices)) } func (s *Article) UpdateProviderArticle(c fiber.Ctx) error { var article v2.ProviderArticle if err := c.Bind().JSON(&article); err != nil { return err } if err := s.storage.ProviderArticle().Update(article); err != nil { return err } return c.JSON(web.NewResponse(article)) } func (s *Article) UpdateSellerArticle(c fiber.Ctx) error { var article v2.SellerArticle if err := c.Bind().JSON(&article); err != nil { return err } if err := s.storage.SellerArticle().Update(article); err != nil { return err } return c.JSON(web.NewResponse(article)) }