Files
zsp-project/backend/internal/repository/zsp_contract_repository.go
2026-06-03 20:59:39 +08:00

130 lines
4.5 KiB
Go
Executable File

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
}