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, ",")