fix(projects): 短剧项目 - 修复同名创建重试 (#691)

Co-authored-by: tanzui <305375675@.com>
This commit is contained in:
tanzui
2026-10-06 09:24:11 +08:00
committed by GitHub
parent 544daa4b9f
commit 53ee5b0cbd
14 changed files with 350 additions and 18 deletions

View File

@@ -3,6 +3,7 @@
package repository
import (
"errors"
"fmt"
"sort"
"time"
@@ -12,6 +13,9 @@ import (
"infinite-canvas/backend/internal/model"
)
// ErrProjectNameConflict 表示同一用户下的项目名称已被占用。
var ErrProjectNameConflict = errors.New("project name conflict")
func (r *Repository) Projects(userID string) ([]model.Project, error) {
var projects []model.Project
err := r.db.Where("user_id = ?", userID).Order("updated_at desc").Find(&projects).Error
@@ -40,7 +44,18 @@ func (r *Repository) ProjectForUser(userID string, id string) (*model.Project, e
}
func (r *Repository) CreateProject(project *model.Project) error {
return r.db.Create(project).Error
// 只忽略用户与名称这一业务唯一索引;主键等其他冲突仍按数据库错误返回。
result := r.db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "user_id"}, {Name: "name"}},
DoNothing: true,
}).Create(project)
if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return ErrProjectNameConflict
}
return nil
}
func (r *Repository) UpdateProject(project *model.Project) error {