package repository import ( "github.com/rovina/zsp-backend/internal/model" "gorm.io/gorm" ) type CompanyRepository interface { CreateFolder(f *model.CompanyFolder) error ListFolders() ([]model.CompanyFolder, error) GetFolderByID(id uint) (*model.CompanyFolder, error) UpdateFolder(f *model.CompanyFolder) error DeleteFolder(id uint) error CreateFile(f *model.CompanyFile) error ListFiles(folderID *uint) ([]model.CompanyFile, error) GetFileByID(id uint) (*model.CompanyFile, error) UpdateFile(f *model.CompanyFile) error DeleteFile(id uint) error } type companyRepository struct { db *gorm.DB } func NewCompanyRepository(db *gorm.DB) CompanyRepository { return &companyRepository{db: db} } func (r *companyRepository) CreateFolder(f *model.CompanyFolder) error { return r.db.Create(f).Error } func (r *companyRepository) ListFolders() ([]model.CompanyFolder, error) { var list []model.CompanyFolder err := r.db.Order("create_time DESC").Find(&list).Error return list, err } func (r *companyRepository) GetFolderByID(id uint) (*model.CompanyFolder, error) { var f model.CompanyFolder err := r.db.First(&f, id).Error if err != nil { return nil, err } return &f, nil } func (r *companyRepository) UpdateFolder(f *model.CompanyFolder) error { return r.db.Save(f).Error } func (r *companyRepository) DeleteFolder(id uint) error { return r.db.Delete(&model.CompanyFolder{}, id).Error } func (r *companyRepository) CreateFile(f *model.CompanyFile) error { return r.db.Create(f).Error } func (r *companyRepository) ListFiles(folderID *uint) ([]model.CompanyFile, error) { var list []model.CompanyFile q := r.db.Order("upload_time DESC") if folderID != nil && *folderID > 0 { q = q.Where("folder_id = ?", *folderID) } err := q.Find(&list).Error return list, err } func (r *companyRepository) GetFileByID(id uint) (*model.CompanyFile, error) { var f model.CompanyFile err := r.db.First(&f, id).Error if err != nil { return nil, err } return &f, nil } func (r *companyRepository) UpdateFile(f *model.CompanyFile) error { return r.db.Save(f).Error } func (r *companyRepository) DeleteFile(id uint) error { return r.db.Delete(&model.CompanyFile{}, id).Error }