package repo import ( "admin/apps/game/domain/entity" "admin/apps/game/model" "admin/internal/errcode" "gorm.io/gorm" ) type IProjectRepo interface { List(pageNo, pageLen int) ([]*entity.Project, error) Create(et *entity.Project) error Edit(et *entity.Project) error Delete(id int) error } func NewProjectRepo(db *gorm.DB) IProjectRepo { return newProjectRepoImpl(db) } type projectRepoImpl struct { db *gorm.DB } func newProjectRepoImpl(db *gorm.DB) *projectRepoImpl { return &projectRepoImpl{db: db} } func (repo *projectRepoImpl) List(pageNo, pageLen int) ([]*entity.Project, error) { list := make([]*model.Project, 0) err := repo.db.Find(&list).Error if err != nil { return nil, errcode.New(errcode.DBError, "find project error:%v", err) } // debug //list = append(list, &model.Project{ // ID: 123, // Name: "神魔大陆", // Desc: "神魔大陆服务器", // ApiAddr: "http://192.168.1.1:8081", //}) entityList := make([]*entity.Project, 0, len(list)) for _, Project := range list { entityList = append(entityList, entity.FromProjectPo(Project)) } return entityList, nil } func (repo *projectRepoImpl) Create(et *entity.Project) error { po := et.ToPo() err := repo.db.Create(po).Error if err != nil { return errcode.New(errcode.DBError, "create obj:%+v error:%v", et, err) } et.Id = po.ID return nil } func (repo *projectRepoImpl) Edit(et *entity.Project) error { po := et.ToPo() err := repo.db.Where("id=?", et.Id).Updates(po).Error if err != nil { return errcode.New(errcode.DBError, "edit obj:%+v error:%v", et, err) } return nil } func (repo *projectRepoImpl) Delete(id int) error { err := repo.db.Where("id=?", id).Unscoped().Delete(&model.Project{}).Error if err != nil { return errcode.New(errcode.DBError, "delete obj:%+v error:%v", id, err) } return nil }