switch update to upsert

This commit is contained in:
nquidox 2025-10-01 12:13:43 +03:00
parent a4097706de
commit 4759e7638c

View file

@ -4,6 +4,7 @@ import (
"database/sql" "database/sql"
"errors" "errors"
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause"
"time" "time"
) )
@ -117,22 +118,18 @@ func (r *Repo) updateMerch(payload UpdateMerchDTO, userUuid string) error {
switch payload.Origin { switch payload.Origin {
case "surugaya": case "surugaya":
var recordSurugaya Surugaya if err := r.upsertOrigin(&Surugaya{
err := r.db.Where("merch_uuid = ?", payload.MerchUuid).FirstOrCreate(&recordSurugaya, Surugaya{
MerchUuid: payload.MerchUuid, MerchUuid: payload.MerchUuid,
Link: payload.Link, Link: payload.Link,
}).Error }); err != nil {
if err != nil {
return err return err
} }
case "mandarake": case "mandarake":
var recordMandarake Mandarake if err := r.upsertOrigin(&Mandarake{
err := r.db.Where("merch_uuid = ?", payload.MerchUuid).FirstOrCreate(&recordMandarake, Mandarake{
MerchUuid: payload.MerchUuid, MerchUuid: payload.MerchUuid,
Link: payload.Link, Link: payload.Link,
}).Error }); err != nil {
if err != nil {
return err return err
} }
} }
@ -220,3 +217,10 @@ func (r *Repo) getDistinctPrices(userUuid, merchUuid string, period time.Time) (
} }
return prices, nil 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
}