130 lines
4.5 KiB
Go
Executable File
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
|
|
}
|