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
|
|
|
}
|