2023-07-03 08:45:44 +08:00

153 lines
3.3 KiB
Go

package service
import (
"errors"
"github.com/gin-gonic/gin"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
"regexp"
"strconv"
)
type ApiService struct {
}
// AddApi 新增接口
func (a *ApiService) AddApi(c *gin.Context, addApiRequest requests.AddApi) (bool, error) {
loginRoleId := c.GetInt64("RoleId")
if loginRoleId == 0 {
return false, errors.New("新增失败")
}
adminApiDao := dao.AdminApiDao{}
// 检测接口名称+请求方式
maps := make(map[string]interface{})
maps["api_path"] = addApiRequest.ApiPath
maps["api_method"] = addApiRequest.ApiMethod
adminApis, err := adminApiDao.GetAdminApiList(maps)
if len(adminApis) > 0 || err != nil {
return false, errors.New("接口重复")
}
// 检测接口路径
pattern := `^/[\w/]+(\:\w+)?$`
r := regexp.MustCompile(pattern)
if !r.MatchString(addApiRequest.ApiPath) {
return false, errors.New("接口路径错误")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 新增接口
AdminApiModel := &model.AdminAPI{
APIName: addApiRequest.ApiName,
APIPath: addApiRequest.ApiPath,
APIMethod: addApiRequest.ApiMethod,
IsAuth: 1,
}
adminApi, _ := adminApiDao.AddAdminApi(tx, AdminApiModel)
if adminApi == nil {
tx.Rollback()
return false, errors.New("新增失败")
}
tx.Commit()
return true, nil
}
// DeleteApi 删除接口-批量
func (r *ApiService) DeleteApi(c *gin.Context, deleteApiRequest requests.DeleteApi) (bool, error) {
adminApiDao := dao.AdminApiDao{}
// 获取当前登陆接口角色数据
roleId := c.GetInt64("RoleId")
if roleId == 0 {
return false, errors.New("数据错误")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
for _, v := range deleteApiRequest.ApiIds {
// 将字符串转换为int64类型
v, err := strconv.ParseInt(v, 10, 64)
if err != nil {
tx.Rollback()
return false, errors.New("菜单错误")
}
// 检测删除接口
adminApi, err := adminApiDao.GetAdminApiById(v)
if err != nil || adminApi == nil {
tx.Rollback()
return false, errors.New("删除失败")
}
// 删除接口
err = adminApiDao.DeleteAdminApiById(tx, v)
if err != nil {
tx.Rollback()
return false, errors.New("删除失败")
}
}
tx.Commit()
return true, nil
}
// PutApi 修改接口
func (r *ApiService) PutApi(c *gin.Context, requestApiId int64, putApiRequest requests.PutApi) (bool, error) {
adminApiDao := dao.AdminApiDao{}
// 获取需修改接口数据
adminApi, err := adminApiDao.GetAdminApiById(requestApiId)
if err != nil || adminApi == nil {
return false, errors.New("接口数据错误")
}
// 获取当前登陆接口角色数据
loginRoleId := c.GetInt64("RoleId")
if loginRoleId == 0 {
return false, errors.New("数据错误")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 修改接口
data := make(map[string]interface{})
data["api_name"] = putApiRequest.ApiName
err = adminApiDao.EditAdminApiById(tx, requestApiId, data)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
tx.Commit()
return true, nil
}