merch update method refactor

This commit is contained in:
nquidox 2025-10-01 11:00:39 +03:00
parent 7dd4a6830e
commit a4097706de
5 changed files with 44 additions and 32 deletions

View file

@ -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
}

View file

@ -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"`
}

View file

@ -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 {

View file

@ -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
}
}

View file

@ -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)
}