93 lines
2.6 KiB
Go
Raw Normal View History

2025-04-18 17:17:23 +08:00
package repo
import (
"admin/apps/game/domain/entity"
"admin/apps/game/model"
2025-04-30 15:46:14 +08:00
"admin/apps/game/model/dto"
2025-04-18 17:17:23 +08:00
"admin/internal/errcode"
2025-04-24 20:39:31 +08:00
"errors"
2025-04-18 17:17:23 +08:00
"gorm.io/gorm"
)
type IProjectRepo interface {
2025-04-30 15:46:14 +08:00
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)
2025-04-18 17:17:23 +08:00
}
func NewProjectRepo(db *gorm.DB) IProjectRepo {
2025-04-24 20:39:31 +08:00
return &projectRepoImpl{db: db}
2025-04-18 17:17:23 +08:00
}
type projectRepoImpl struct {
db *gorm.DB
}
2025-04-30 15:46:14 +08:00
var projectFieldsDescInfo []*dto.CommonDtoFieldDesc
func init() {
et := entity.FromProjectPo(&model.Project{})
projectFieldsDescInfo = et.ToCommonResource().GetDtoFieldsDescInfo(et)
2025-04-18 17:17:23 +08:00
}
2025-04-30 15:46:14 +08:00
func (impl *projectRepoImpl) List() ([]*dto.CommonDtoFieldDesc, []*entity.Project, error) {
2025-04-24 20:39:31 +08:00
list := make([]*model.Project, 0)
err := impl.db.Find(&list).Error
2025-04-18 17:17:23 +08:00
if err != nil {
2025-04-30 15:46:14 +08:00
return projectFieldsDescInfo, nil, errcode.New(errcode.DBError, "list project error:%v", err)
2025-04-18 17:17:23 +08:00
}
2025-04-30 15:46:14 +08:00
2025-04-24 20:39:31 +08:00
list1 := make([]*entity.Project, 0, len(list))
for _, v := range list {
2025-04-30 15:46:14 +08:00
list1 = append(list1, entity.FromProjectPo(v))
2025-04-18 17:17:23 +08:00
}
2025-04-30 15:46:14 +08:00
return projectFieldsDescInfo, list1, nil
2025-04-18 17:17:23 +08:00
}
2025-04-30 15:46:14 +08:00
func (impl *projectRepoImpl) GetById(id int) ([]*dto.CommonDtoFieldDesc, *entity.Project, bool, error) {
2025-04-24 20:39:31 +08:00
po := &model.Project{}
2025-04-30 15:46:14 +08:00
err := impl.db.Where("id=?", id).First(po).Error
2025-04-18 17:17:23 +08:00
if err != nil {
2025-04-24 20:39:31 +08:00
if errors.Is(err, gorm.ErrRecordNotFound) {
2025-04-30 15:46:14 +08:00
return projectFieldsDescInfo, entity.FromProjectPo(&model.Project{}), false, nil
2025-04-24 20:39:31 +08:00
}
2025-04-18 17:17:23 +08:00
}
2025-04-24 20:39:31 +08:00
2025-04-30 15:46:14 +08:00
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
2025-04-18 17:17:23 +08:00
}