package repository import ( "github.com/rovina/zsp-backend/internal/model" "gorm.io/gorm" ) type ZSPContractRepository interface { CreateFolder(folder *model.ZSPContractFolder) error GetFolders() ([]model.ZSPContractFolder, error) GetFolderById(folderID string) (*model.ZSPContractFolder, error) DeleteFolderById(folderID string) error UpdateFolder(folder *model.ZSPContractFolder) error CreateContract(contract *model.ZSPContractFile) error GetContractById(contractID string) (*model.ZSPContractFile, error) ListContracts(folderID string) ([]model.ZSPContractFile, error) ListContractsWithDetails(folderID string) ([]model.ZSPContractFile, error) DeleteContractById(contractID string) error UpdateContract(contract *model.ZSPContractFile) error // 合同详情相关 CreateContractDetail(detail *model.ZSPContractDetail) error GetContractDetailById(detailID string) (*model.ZSPContractDetail, error) ListContractDetails(contractFileID string) ([]model.ZSPContractDetail, error) UpdateContractDetail(detail *model.ZSPContractDetail) error DeleteContractDetailById(detailID string) error BatchCreateContractDetails(details []model.ZSPContractDetail) error } type zspContractRepository struct { db *gorm.DB } func NewZSPContractRepository(db *gorm.DB) ZSPContractRepository { return &zspContractRepository{db: db} } func (r *zspContractRepository) CreateFolder(folder *model.ZSPContractFolder) error { // 这里可以根据实际需求创建一个 Folder 模型并保存到数据库 return r.db.Create(folder).Error } func (r *zspContractRepository) GetFolders() ([]model.ZSPContractFolder, error) { var folders []model.ZSPContractFolder err := r.db.Find(&folders).Error return folders, err } func (r *zspContractRepository) GetFolderById(folderID string) (*model.ZSPContractFolder, error) { var folder model.ZSPContractFolder err := r.db.First(&folder, folderID).Error return &folder, err } func (r *zspContractRepository) DeleteFolderById(folderID string) error { return r.db.Delete(&model.ZSPContractFolder{}, folderID).Error } func (r *zspContractRepository) UpdateFolder(folder *model.ZSPContractFolder) error { return r.db.Save(folder).Error } func (r *zspContractRepository) CreateContract(contract *model.ZSPContractFile) error { return r.db.Create(contract).Error } func (r *zspContractRepository) GetContractById(contractID string) (*model.ZSPContractFile, error) { var contract model.ZSPContractFile err := r.db.First(&contract, contractID).Error return &contract, err } func (r *zspContractRepository) ListContracts(folderID string) ([]model.ZSPContractFile, error) { var contracts []model.ZSPContractFile err := r.db.Where("folder_id = ?", folderID).Find(&contracts).Error return contracts, err } func (r *zspContractRepository) DeleteContractById(contractID string) error { return r.db.Delete(&model.ZSPContractFile{}, contractID).Error } func (r *zspContractRepository) UpdateContract(contract *model.ZSPContractFile) error { return r.db.Save(contract).Error } func (r *zspContractRepository) ListContractsWithDetails(folderID string) ([]model.ZSPContractFile, error) { var contracts []model.ZSPContractFile query := r.db.Preload("Details") if folderID != "" { query = query.Where("folder_id = ?", folderID) } err := query.Find(&contracts).Error return contracts, err } // ============ 合同详情相关方法 ============ func (r *zspContractRepository) CreateContractDetail(detail *model.ZSPContractDetail) error { return r.db.Create(detail).Error } func (r *zspContractRepository) GetContractDetailById(detailID string) (*model.ZSPContractDetail, error) { var detail model.ZSPContractDetail err := r.db.First(&detail, detailID).Error return &detail, err } func (r *zspContractRepository) ListContractDetails(contractFileID string) ([]model.ZSPContractDetail, error) { var details []model.ZSPContractDetail err := r.db.Where("contract_file_id = ?", contractFileID).Find(&details).Error return details, err } func (r *zspContractRepository) UpdateContractDetail(detail *model.ZSPContractDetail) error { return r.db.Save(detail).Error } func (r *zspContractRepository) DeleteContractDetailById(detailID string) error { return r.db.Delete(&model.ZSPContractDetail{}, detailID).Error } func (r *zspContractRepository) BatchCreateContractDetails(details []model.ZSPContractDetail) error { if len(details) == 0 { return nil } return r.db.Create(&details).Error }