package repository import ( "gorm.io/gorm" "filestoragesystem/internal/model" ) // ProjectRepo 项目数据访问 type ProjectRepo struct{ DB *gorm.DB } func (r *ProjectRepo) Create(p *model.Project) error { return r.DB.Create(p).Error } func (r *ProjectRepo) FindByID(id uint) (*model.Project, error) { var p model.Project err := r.DB.First(&p, id).Error return &p, err } func (r *ProjectRepo) FindByName(userID uint, name string) (*model.Project, error) { var p model.Project err := r.DB.Where("user_id = ? AND name = ?", userID, name).First(&p).Error return &p, err } // List 分页查询项目;keyword匹配名称;all为true时跨用户(管理员) func (r *ProjectRepo) List(userID uint, keyword string, all bool, page, pageSize int) ([]model.Project, int64, error) { q := r.DB.Model(&model.Project{}) if !all { q = q.Where("user_id = ?", userID) } if keyword != "" { q = q.Where("name LIKE ?", "%"+keyword+"%") } var total int64 if err := q.Count(&total).Error; err != nil { return nil, 0, err } var projects []model.Project err := q.Order("id DESC"). Offset((page - 1) * pageSize).Limit(pageSize).Find(&projects).Error return projects, total, err } func (r *ProjectRepo) Update(p *model.Project) error { return r.DB.Save(p).Error } func (r *ProjectRepo) Delete(id uint) error { return r.DB.Delete(&model.Project{}, id).Error } // UpdateStorageUsed 增减项目已用存储 func (r *ProjectRepo) UpdateStorageUsed(id uint, delta int64) error { return r.DB.Model(&model.Project{}).Where("id = ?", id). UpdateColumn("storage_used", gorm.Expr("storage_used + ?", delta)).Error } // ListByUser 用户全部项目(用于统计) func (r *ProjectRepo) ListByUser(userID uint) ([]model.Project, error) { var projects []model.Project err := r.DB.Where("user_id = ?", userID).Find(&projects).Error return projects, err }