diff --git a/internal/api/merch/controller.go b/internal/api/merch/controller.go index 2e31a66..2b23c34 100644 --- a/internal/api/merch/controller.go +++ b/internal/api/merch/controller.go @@ -134,16 +134,16 @@ func (co *controller) getAllMerch(c *gin.Context) { // @Description Обновить информацию про мерч по его uuid в json-е // @Tags Merch // @Security BearerAuth -// @Param body body MerchDTO true "merch_uuid" -// @Success 200 {object} MerchDTO +// @Param body body UpdateMerchDTO true "merch_uuid" +// @Success 200 // @Failure 400 {object} responses.ErrorResponse400 // @Failure 500 {object} responses.ErrorResponse500 -// @Router /merch/{uuid} [put] +// @Router /merch/ [put] func (co *controller) updateMerch(c *gin.Context) { - var payload MerchDTO + var payload UpdateMerchDTO if err := c.ShouldBind(&payload); err != nil { c.JSON(http.StatusBadRequest, responses.ErrorResponse400{Error: err.Error()}) - log.WithError(err).Error("Merch | Failed to bind JSON on add merch") + log.WithError(err).Error("Merch | Failed to bind JSON on update merch") return } diff --git a/internal/api/merch/dto.go b/internal/api/merch/dto.go index cce0e03..6e872a2 100644 --- a/internal/api/merch/dto.go +++ b/internal/api/merch/dto.go @@ -46,3 +46,10 @@ type PricesResponse struct { MerchUuid string `json:"merch_uuid"` Origins []OriginWithPrices `json:"origins"` } + +type UpdateMerchDTO struct { + MerchUuid string `json:"merch_uuid"` + Name string `json:"name"` + Origin string `json:"origin"` + Link string `json:"link"` +} diff --git a/internal/api/merch/model.go b/internal/api/merch/model.go index ed7e550..893fb25 100644 --- a/internal/api/merch/model.go +++ b/internal/api/merch/model.go @@ -20,11 +20,10 @@ func (Merch) TableName() string { } type Surugaya struct { - Id uint `gorm:"primary_key" json:"-"` - DeletedAt sql.NullTime `json:"-"` - MerchUuid string `json:"-"` - Link string `json:"link"` - CookieValues string `json:"cookie_values"` + Id uint `gorm:"primary_key" json:"-"` + DeletedAt sql.NullTime `json:"-"` + MerchUuid string `json:"-"` + Link string `json:"link"` } func (Surugaya) TableName() string { diff --git a/internal/api/merch/repository.go b/internal/api/merch/repository.go index e7a17e9..9639599 100644 --- a/internal/api/merch/repository.go +++ b/internal/api/merch/repository.go @@ -23,7 +23,7 @@ type repository interface { getSingleMerch(userUuid, merchUuid string) (merchBundle, error) getAllMerch(userUuid string) ([]ListResponse, error) - updateMerch(payload MerchDTO, userUuid string) error + updateMerch(payload UpdateMerchDTO, userUuid string) error deleteMerch(userUuid, merchUuid string) error @@ -99,7 +99,7 @@ func (r *Repo) getAllMerch(userUuid string) ([]ListResponse, error) { return list, nil } -func (r *Repo) updateMerch(payload MerchDTO, userUuid string) error { +func (r *Repo) updateMerch(payload UpdateMerchDTO, userUuid string) error { m := make(map[string]any) m["name"] = payload.Name m["updated_at"] = sql.NullTime{ @@ -115,27 +115,24 @@ func (r *Repo) updateMerch(payload MerchDTO, userUuid string) error { return err } - // surugaya - fields := make(map[string]any, 2) - if payload.OriginSurugaya.Link != "" { - fields["link"] = payload.OriginSurugaya.Link - } - - if len(fields) > 0 { - if err := r.db. - Model(&Surugaya{}). - Where("merch_uuid = ?", payload.MerchUuid). - Updates(fields).Error; err != nil { + switch payload.Origin { + case "surugaya": + var recordSurugaya Surugaya + err := r.db.Where("merch_uuid = ?", payload.MerchUuid).FirstOrCreate(&recordSurugaya, Surugaya{ + MerchUuid: payload.MerchUuid, + Link: payload.Link, + }).Error + if err != nil { return err } - } - // mandarake - if payload.OriginMandarake.Link != "" { - if err := r.db. - Model(&Mandarake{}). - Where("merch_uuid = ?", payload.MerchUuid). - Update("link", payload.OriginMandarake.Link).Error; err != nil { + case "mandarake": + var recordMandarake Mandarake + err := r.db.Where("merch_uuid = ?", payload.MerchUuid).FirstOrCreate(&recordMandarake, Mandarake{ + MerchUuid: payload.MerchUuid, + Link: payload.Link, + }).Error + if err != nil { return err } } diff --git a/internal/api/merch/service.go b/internal/api/merch/service.go index 0e17c8d..bbc5175 100644 --- a/internal/api/merch/service.go +++ b/internal/api/merch/service.go @@ -67,10 +67,19 @@ func (s *service) getAllMerch(userUuid string) ([]ListResponse, error) { return s.repo.getAllMerch(userUuid) } -func (s *service) updateMerch(payload MerchDTO, userUuid string) error { +func (s *service) updateMerch(payload UpdateMerchDTO, userUuid string) error { if payload.MerchUuid == "" { - return errors.New("no MerchUuid or empty payload") + return errors.New("no merch uuid provided") } + + if payload.Origin == "" { + return errors.New("no origin provided") + } + + if payload.Link == "" { + return errors.New("no link provided") + } + return s.repo.updateMerch(payload, userUuid) }