package dal import ( "eai_agentplatform/backend/internal/model" ) // Project 项目仓库(任务的容器)。 type ProjectDAO struct{ *QueryBuilder } // GetByIDForOwners 按 ID 取项目,且必须归属于 owners 里的一员。 // // owners 为空时查不到任何东西(而不是查到全部)——跟任务同一套归属口径, // 别人的项目和不存在的项目在这里不做区分,调用方一律回 404。 func (r ProjectDAO) GetByIDForOwners(id uint, owners []string) (model.Project, bool) { var p model.Project if ownerScope(r.Type(&p), owners).Where("id = ?", id).First(&p) { return p, true } return model.Project{}, false } // ListByOwners 「我的项目」:置顶的排前面,其余按最近动过的排。 // limit <= 0 表示不设上限。 func (r ProjectDAO) ListByOwners(owners []string, limit int) []model.Project { q := ownerScope(r.Type(&model.Project{}), owners) if limit > 0 { q = q.Limit(limit) } var items []model.Project if q.Order("pinned DESC, updated_at DESC, id DESC").Find(&items) { return items } return nil } // Insert 新建项目。 func (r ProjectDAO) Insert(p *model.Project) bool { return r.QueryBuilder.Insert(p) } // Update 更新项目。 func (r ProjectDAO) Update(p *model.Project) bool { return r.Save(p) } // Delete 删除项目。 // // 项目里的任务**不删**——先由调用方把它们的 project_id 置空(见 // TaskRecordDAO.ClearProject),再删项目本身。 func (r ProjectDAO) Delete(p *model.Project) bool { return r.QueryBuilder.Delete(p) }