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 }