From d5f5a2113051efa9cc9edd0efd19f57c299b4b60 Mon Sep 17 00:00:00 2001 From: runstp Date: Mon, 2 Jan 2023 12:08:08 +0800 Subject: [PATCH] =?UTF-8?q?[perf]=20=E4=BC=98=E5=8C=96=E8=87=AA=E5=A2=9Eid?= =?UTF-8?q?=E5=A2=9E=E9=95=BF=E8=BF=87=E5=BF=AB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/repository/bilbil_video.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/internal/repository/bilbil_video.go b/internal/repository/bilbil_video.go index 0fb9dd8..d941601 100644 --- a/internal/repository/bilbil_video.go +++ b/internal/repository/bilbil_video.go @@ -132,18 +132,26 @@ func (impl *BilibiliVideoMysqlImpl) Shield(bvid string) error { func (impl *BilibiliVideoMysqlImpl) Save(e *idl.BilibiliVideo) error { return impl.tx.Transaction(func(_tx *gorm.DB) error { - result := _tx.Table(bilibiliVideoTableName).Clauses(clause.OnConflict{ - Columns: []clause.Column{{Name: "bvid"}}, - DoUpdates: clause.AssignmentColumns(strings.Split(onUpdateFields, ",")), - }).Create(&e) - + result := _tx.Table(bilibiliVideoTableName).Where("bvid = ?", e.Bvid).Select("id").Find(&e.Id) if result.Error != nil { - return errors.Wrap(result.Error, fmt.Sprintf("insert %s fail", bilibiliVideoTableName)) + return errors.Wrap(result.Error, fmt.Sprintf("select %s fail bvid: %s", bilibiliVideoTableName, e.Bvid)) } - // on update - if e.Id == 0 { - _tx.Table(bilibiliVideoTableName).Where("bvid = ?", e.Bvid).Select("id").Find(&e.Id) + // on create + if e.Id != 0 { + result = _tx.Table(bilibiliVideoTableName).Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "bvid"}}, + DoUpdates: clause.AssignmentColumns(strings.Split(onUpdateFields, ",")), + }).Create(&e) + + if result.Error != nil { + return errors.Wrap(result.Error, fmt.Sprintf("insert %s fail", bilibiliVideoTableName)) + } + } else { + result = _tx.Table(bilibiliVideoTableName).Where("bvid = ?", e.Bvid).Updates(e) + if result.Error != nil { + return errors.Wrap(result.Error, fmt.Sprintf("update %s fail", bilibiliVideoTableName)) + } } tags := strings.Split(e.Tag, ",")