diff --git a/internal/api/merch/repository.go b/internal/api/merch/repository.go index 9639599..61a3bc5 100644 --- a/internal/api/merch/repository.go +++ b/internal/api/merch/repository.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" "gorm.io/gorm" + "gorm.io/gorm/clause" "time" ) @@ -117,22 +118,18 @@ func (r *Repo) updateMerch(payload UpdateMerchDTO, userUuid string) error { switch payload.Origin { case "surugaya": - var recordSurugaya Surugaya - err := r.db.Where("merch_uuid = ?", payload.MerchUuid).FirstOrCreate(&recordSurugaya, Surugaya{ + if err := r.upsertOrigin(&Surugaya{ MerchUuid: payload.MerchUuid, Link: payload.Link, - }).Error - if err != nil { + }); err != nil { return err } case "mandarake": - var recordMandarake Mandarake - err := r.db.Where("merch_uuid = ?", payload.MerchUuid).FirstOrCreate(&recordMandarake, Mandarake{ + if err := r.upsertOrigin(&Mandarake{ MerchUuid: payload.MerchUuid, Link: payload.Link, - }).Error - if err != nil { + }); err != nil { return err } } @@ -220,3 +217,10 @@ func (r *Repo) getDistinctPrices(userUuid, merchUuid string, period time.Time) ( } return prices, nil } + +func (r *Repo) upsertOrigin(model any) error { + return r.db.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "merch_uuid"}}, + DoUpdates: clause.AssignmentColumns([]string{"link"}), + }).Create(model).Error +}