package system import ( "errors" "gorm.io/gorm" "server/dao" "server/global" "server/model/common/request" ) //@author: [piexlmax](https://github.com/piexlmax) //@function: CreateApi //@description: 新增基础api //@param: api model.SysApi //@return: err error type ApiService struct{} var ApiServiceApp = new(ApiService) func (apiService *ApiService) CreateApi(api dao.SysApi) (err error) { _, err = dao.QueryApiByPathMethod(api.Path, api.Method) if !errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("存在相同api") } return api.CreateApi() } //@author: [piexlmax](https://github.com/piexlmax) //@function: DeleteApi //@description: 删除基础api //@param: api model.SysApi //@return: err error func (apiService *ApiService) DeleteApi(api dao.SysApi) (err error) { entity, err := dao.QueryApiById(api.ID) if errors.Is(err, gorm.ErrRecordNotFound) { // api记录不存在 return err } err = api.DeleteApi() if err != nil { return err } CasbinServiceApp.ClearCasbin(1, entity.Path, entity.Method) if err != nil { return err } return nil } //@author: [piexlmax](https://github.com/piexlmax) //@function: GetAPIInfoList //@description: 分页获取数据, //@param: api model.SysApi, info request.PageInfo, order string, desc bool //@return: list interface{}, total int64, err error func (apiService *ApiService) GetAPIInfoList(api dao.SysApi, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) { limit := info.PageSize offset := info.PageSize * (info.Page - 1) return api.GetAPIInfoList(limit, offset, order, desc) } //@author: [piexlmax](https://github.com/piexlmax) //@function: GetAllApis //@description: 获取所有的api //@return: apis []model.SysApi, err error func (apiService *ApiService) GetAllApis() (apis []dao.SysApi, err error) { return dao.GetAllApis() } //@author: [piexlmax](https://github.com/piexlmax) //@function: GetApiById //@description: 根据id获取api //@param: id float64 //@return: api model.SysApi, err error func (apiService *ApiService) GetApiById(id int) (api dao.SysApi, err error) { return dao.QueryApiById(uint(id)) } //@author: [piexlmax](https://github.com/piexlmax) //@function: UpdateApi //@description: 根据id更新api //@param: api model.SysApi //@return: err error func (apiService *ApiService) UpdateApi(api dao.SysApi) (err error) { oldA, err := dao.QueryApiById(api.ID) if oldA.Path != api.Path || oldA.Method != api.Method { var duplicateApi dao.SysApi duplicateApi, err := dao.QueryApiByPathMethod(api.Path, api.Method) if err != nil { if !errors.Is(err, gorm.ErrRecordNotFound) { return err } } if duplicateApi.ID != api.ID { return errors.New("存在相同api路径") } } if err != nil { return err } err = CasbinServiceApp.UpdateCasbinApi(oldA.Path, api.Path, oldA.Method, api.Method) if err != nil { return err } return api.SaveApi() } //@author: [piexlmax](https://github.com/piexlmax) //@function: DeleteApis //@description: 删除选中API //@param: apis []model.SysApi //@return: err error func (apiService *ApiService) DeleteApisByIds(ids request.IdsReq) (err error) { return global.GVA_DB.Transaction(func(tx *gorm.DB) error { var apis []dao.SysApi err = tx.Find(&apis, "id in ?", ids.Ids).Error if err != nil { return err } err = tx.Delete(&[]dao.SysApi{}, "id in ?", ids.Ids).Error if err != nil { return err } for _, sysApi := range apis { CasbinServiceApp.ClearCasbin(1, sysApi.Path, sysApi.Method) } return err }) }