2025-05-16 15:17:10 +08:00

93 lines
2.6 KiB
Go

package repo
import (
"admin/apps/game/domain/entity"
"admin/apps/game/model"
"admin/internal/errcode"
"admin/internal/model/dto"
"errors"
"gorm.io/gorm"
)
type IProjectRepo interface {
List() ([]*dto.CommonDtoFieldDesc, []*entity.Project, error)
GetById(id int) ([]*dto.CommonDtoFieldDesc, *entity.Project, bool, error)
Create(obj dto.CommonDtoValues) (*entity.Project, error)
Edit(obj dto.CommonDtoValues) error
Delete(id int) (*entity.Project, bool, error)
}
func NewProjectRepo(db *gorm.DB) IProjectRepo {
return &projectRepoImpl{db: db}
}
type projectRepoImpl struct {
db *gorm.DB
}
var projectFieldsDescInfo []*dto.CommonDtoFieldDesc
func init() {
et := entity.FromProjectPo(&model.Project{})
projectFieldsDescInfo = et.ToCommonResource().GetDtoFieldsDescInfo(et)
}
func (impl *projectRepoImpl) List() ([]*dto.CommonDtoFieldDesc, []*entity.Project, error) {
list := make([]*model.Project, 0)
err := impl.db.Find(&list).Error
if err != nil {
return projectFieldsDescInfo, nil, errcode.New(errcode.DBError, "list project error:%v", err)
}
list1 := make([]*entity.Project, 0, len(list))
for _, v := range list {
list1 = append(list1, entity.FromProjectPo(v))
}
return projectFieldsDescInfo, list1, nil
}
func (impl *projectRepoImpl) GetById(id int) ([]*dto.CommonDtoFieldDesc, *entity.Project, bool, error) {
po := &model.Project{}
err := impl.db.Where("id=?", id).First(po).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return projectFieldsDescInfo, entity.FromProjectPo(&model.Project{}), false, nil
}
}
return projectFieldsDescInfo, entity.FromProjectPo(po), true, nil
}
func (impl *projectRepoImpl) Create(obj dto.CommonDtoValues) (*entity.Project, error) {
et := entity.FromProjectPo(&model.Project{}).FromDto(obj)
err := impl.db.Create(et).Error
if err != nil {
return et, errcode.New(errcode.DBError, "create project obj:%+v error:%v", et, err)
}
return et, nil
}
func (impl *projectRepoImpl) Edit(obj dto.CommonDtoValues) error {
et := entity.FromProjectPo(&model.Project{}).FromDto(obj)
err := impl.db.Where("id=?", et.Po.GetId()).Updates(et.Po).Error
if err != nil {
return errcode.New(errcode.DBError, "edit project obj:%+v error:%v", et, err)
}
return nil
}
func (impl *projectRepoImpl) Delete(id int) (*entity.Project, bool, error) {
_, et, find, err := impl.GetById(id)
if err != nil {
return nil, false, err
}
if !find {
return et, false, nil
}
err = impl.db.Where("id=?", id).Unscoped().Delete(&model.Project{}).Error
if err != nil {
return nil, false, errcode.New(errcode.DBError, "delete project obj:%+v error:%v", id, err)
}
return et, true, nil
}