package dal import ( "eai_agentplatform/backend/internal/model" ) // NetdiskFolderDAO 网盘目录仓库。 type NetdiskFolderDAO struct{ *QueryBuilder } // GetByID 按 ID 获取目录。 func (r NetdiskFolderDAO) GetByID(id uint) (model.NetdiskFolder, bool) { var m model.NetdiskFolder if r.Type(&m).Where("id = ?", id).First(&m) { return m, true } return model.NetdiskFolder{}, false } // Insert 创建目录。 func (r NetdiskFolderDAO) Insert(m *model.NetdiskFolder) bool { return r.QueryBuilder.Insert(m) } // Update 更新目录。 func (r NetdiskFolderDAO) Update(m *model.NetdiskFolder) bool { return r.Save(m) } // Delete 物理删除目录。 func (r NetdiskFolderDAO) Delete(id uint) bool { return r.DeleteByID(&model.NetdiskFolder{}, id) } // GetByPath 按全等路径查目录(目录名唯一)。 func (r NetdiskFolderDAO) GetByPath(companyID uint, path string) (model.NetdiskFolder, bool) { var m model.NetdiskFolder if r.Type(&m).Where("company_id = ? AND path = ?", companyID, path).First(&m) { return m, true } return model.NetdiskFolder{}, false } // ListDescendants 按 company 返回全部目录(含子目录),按 path 升序。 func (r NetdiskFolderDAO) ListDescendants(companyID uint, prefix string) []model.NetdiskFolder { var items []model.NetdiskFolder if prefix == "" { r.Type(&items).Where("company_id = ?", companyID).Order("path ASC").Find(&items) } else { r.Type(&items).Where("company_id = ? AND (path = ? OR path LIKE ?)", companyID, prefix, prefix+"/%"). Order("path ASC").Find(&items) } return items } // CountChildren 统计某目录直属子目录数量。 func (r NetdiskFolderDAO) CountChildren(companyID uint, parentPath string) int64 { return r.Type(&model.NetdiskFolder{}). Where("company_id = ? AND path LIKE ?", companyID, parentPath+"/%"). Count() } // NetdiskFileDAO 网盘文件仓库。 type NetdiskFileDAO struct{ *QueryBuilder } // GetByID 按 ID 获取文件。 func (r NetdiskFileDAO) GetByID(id uint) (model.NetdiskFile, bool) { var m model.NetdiskFile if r.Type(&m).Where("id = ?", id).First(&m) { return m, true } return model.NetdiskFile{}, false } // Insert 创建文件记录。 func (r NetdiskFileDAO) Insert(m *model.NetdiskFile) bool { return r.QueryBuilder.Insert(m) } // Update 更新文件记录。 func (r NetdiskFileDAO) Update(m *model.NetdiskFile) bool { return r.Save(m) } // HardDelete 彻底删除文件记录。 func (r NetdiskFileDAO) HardDelete(id uint) bool { return r.DeleteByID(&model.NetdiskFile{}, id) } // ListByFolder 列出某目录下、指定状态、且不在回收站的文件(按 id 降序)。 func (r NetdiskFileDAO) ListByFolder(companyID uint, folderPath, status string) []model.NetdiskFile { var items []model.NetdiskFile q := r.Type(&model.NetdiskFile{}). Where("company_id = ? AND folder_path = ? AND deleted_at IS NULL", companyID, folderPath) if status != "" { q = q.Where("status = ?", status) } if q.Order("id DESC").Find(&items) { return items } return nil } // ListInRecycle 回收站列表(软删除标记非空),按删除时间倒序。 func (r NetdiskFileDAO) ListInRecycle(companyID uint) []model.NetdiskFile { var items []model.NetdiskFile if r.Type(&items). Where("company_id = ? AND deleted_at IS NOT NULL", companyID). Order("deleted_at DESC").Find(&items) { return items } return nil } // ListForAudit 审批列表(分页,含待审批/最近已处理),不在回收站,created_at 倒序。 func (r NetdiskFileDAO) ListForAudit(companyID uint, status string, page, size int) (int64, []model.NetdiskFile) { q := r.Inner().Model(&model.NetdiskFile{}). Where("company_id = ? AND deleted_at IS NULL", companyID) if status != "" { q = q.Where("status = ?", status) } var total int64 q.Count(&total) var items []model.NetdiskFile q.Order("created_at DESC").Offset((page - 1) * size).Limit(size).Find(&items) return total, items }