Przeglądaj źródła

账号类型管理接口提交

maker 3 lat temu
rodzic
commit
932ea36bc5

+ 115 - 0
api/v1/typeManage/accountType.go

@@ -0,0 +1,115 @@
+package typeManage
+
+import (
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"log-server/global"
+	"log-server/model/common/request"
+	"log-server/model/common/response"
+	"log-server/model/typeManage"
+	typeManageRes "log-server/model/typeManage/response"
+	"log-server/utils"
+)
+
+type AccountTypeApi struct {
+}
+
+//添加账号类型
+func (a *AccountTypeApi) CreateAccountType(c *gin.Context) {
+	var accountType typeManage.AccountType
+	_ = c.ShouldBind(&accountType)
+	if err := utils.Verify(accountType, utils.AccountTypeVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if err := accountTypeService.CreateAccountType(accountType); err != nil{
+		global.GVA_LOG.Error("创建失败!", zap.Error(err))
+		response.FailWithMessage("创建失败", c)
+	} else {
+		response.OkWithMessage("创建成功", c)
+	}
+}
+
+//单个删除账号类型
+func (a *AccountTypeApi) DeleteAccountType(c *gin.Context) {
+	var accountType typeManage.AccountType
+	_ = c.ShouldBindJSON(&accountType)
+	//数据校验
+	if err := utils.Verify(accountType, utils.AccountTypeVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if err := accountTypeService.DeleteAccountType(accountType); err != nil {
+		global.GVA_LOG.Error("删除失败!", zap.Error(err))
+		response.FailWithMessage("删除失败", c)
+	} else {
+		response.OkWithMessage("删除成功", c)
+	}
+}
+
+//批量删除账号类型
+func (a *AccountTypeApi) DeleteAccountTypesByIds(c *gin.Context) {
+	var ids request.IdsReq
+	_ = c.ShouldBindJSON(&ids)
+	if err := accountTypeService.DeleteAccountTypesByIds(ids); err != nil {
+		global.GVA_LOG.Error("删除失败!", zap.Error(err))
+		response.FailWithMessage("删除失败", c)
+	} else {
+		response.OkWithMessage("删除成功", c)
+	}
+}
+
+//更改账号类型
+func (a *AccountTypeApi) UpdateAccountType(c *gin.Context) {
+	var accountType typeManage.AccountType
+	_ = c.ShouldBindJSON(&accountType)
+	if err := utils.Verify(accountType, utils.AccountTypeVerify); err != nil{
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if err := accountTypeService.UpdateAccountType(accountType); err != nil{
+		global.GVA_LOG.Error("修改失败!", zap.Error(err))
+		response.FailWithMessage("修改失败", c)
+	} else {
+		response.OkWithMessage("修改成功", c)
+	}
+}
+
+//通过id获取单条数据
+func (a *AccountTypeApi) GetAccountTypeById(c *gin.Context) {
+	var id request.GetById
+	_ = c.ShouldBindJSON(&id)
+	if err := utils.Verify(id, utils.IdVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if accountType, err := accountTypeService.GetAccountTypeById(id.ID); err != nil{
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithDetailed(typeManageRes.AccountTypeResponse{AccountType: accountType}, "获取成功", c)
+	}
+}
+
+//获取所有账号类型列表
+func (a *AccountTypeApi) AccountTypeList(c *gin.Context)  {
+	//获取前端传值并校验
+	var pageInfo typeManage.SearchAccountTypeParams
+	_ = c.ShouldBindJSON(&pageInfo)
+	//页面信息校验
+	if err := utils.Verify(pageInfo.PageInfo, utils.PageInfoVerify); err != nil{
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if list, total, err := accountTypeService.AccountTypeList(pageInfo.AccountType, pageInfo.PageInfo, pageInfo.OrderKey, pageInfo.Desc); err != nil{
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithDetailed(response.PageResult{
+			List:     list,
+			Total:    total,
+			Page:     pageInfo.Page,
+			PageSize: pageInfo.PageSize,
+		}, "获取成功", c)
+	}
+}

+ 2 - 0
api/v1/typeManage/enter.go

@@ -10,6 +10,7 @@ type ApiGroup struct {
 	GameListApi
 	LoginTypeApi
 	ResponsiblePersonApi
+	AccountTypeApi
 }
 
 var(
@@ -17,4 +18,5 @@ var(
 	gameListService = service.ServiceGroupApp.TypeServiceGroup.GameListService
 	loginTypeService = service.ServiceGroupApp.TypeServiceGroup.LoginTypeService
 	responsiblePersonService = service.ServiceGroupApp.TypeServiceGroup.ResponsiblePersonService
+	accountTypeService = service.ServiceGroupApp.TypeServiceGroup.AccountTypeService
 )

+ 1 - 0
initialize/router.go

@@ -58,6 +58,7 @@ func Routers() *gin.Engine {
 		typeManageRouter.InitGameListRouter(PublicGroup)		//游戏列表路由
 		typeManageRouter.InitLoginTypeRouter(PublicGroup)	//登录类型路由
 		typeManageRouter.InitResponsiblePersonRouter(PublicGroup)	//负责人路由
+		typeManageRouter.InitAccountTypeRouter(PublicGroup)		//账号类型路由
 	}
 	PrivateGroup := Router.Group("")
 	PrivateGroup.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())

+ 9 - 0
model/typeManage/accountType.go

@@ -0,0 +1,9 @@
+package typeManage
+
+type AccountType struct {
+	Id         int64     `json:"id"`
+	TypeName   string    `json:"type_name"`
+	TypeDesc   string    `json:"type_desc"`
+	CreateTime LocalTime `json:"create_time"`
+	UpdateTime LocalTime `json:"update_time"`
+}

+ 7 - 0
model/typeManage/response/tm_accountTypeResponse.go

@@ -0,0 +1,7 @@
+package response
+
+import "log-server/model/typeManage"
+
+type AccountTypeResponse struct {
+	AccountType typeManage.AccountType `json:"account_type"`
+}

+ 13 - 0
model/typeManage/searchAccountTypeParams.go

@@ -0,0 +1,13 @@
+package typeManage
+
+import (
+	"log-server/model/common/request"
+)
+
+// accountType分页条件查询及排序结构体
+type SearchAccountTypeParams struct {
+	AccountType
+	request.PageInfo
+	OrderKey string `json:"orderKey"` // 排序
+	Desc     bool   `json:"desc"`     // 排序方式:升序false(默认)|降序true
+}

+ 22 - 0
router/typeManage/accountType.go

@@ -0,0 +1,22 @@
+package typeManage
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "log-server/api/v1"
+)
+
+type AccountTypeRouter struct {
+}
+
+func (a *AccountTypeRouter) InitAccountTypeRouter(Router *gin.RouterGroup) {
+	accountTypeRouter := Router.Group("accountType")
+	accountTypeApi := v1.ApiGroupApp.TypeApiGroup.AccountTypeApi
+	{
+		accountTypeRouter.POST("createAccountType",accountTypeApi.CreateAccountType)          // 增加账号类型
+		accountTypeRouter.POST("deleteAccountType",accountTypeApi.DeleteAccountType)          // 删除单个账号类型
+		accountTypeRouter.DELETE("deleteAccountTypesByIds", accountTypeApi.DeleteAccountTypesByIds)		//批量删除
+		accountTypeRouter.POST("updateAccountType",accountTypeApi.UpdateAccountType)          // 更改账号类型
+		accountTypeRouter.POST("getAccountTypeById", accountTypeApi.GetAccountTypeById) 		//获取单条账号类型
+		accountTypeRouter.POST("getAccountTypeList",accountTypeApi.AccountTypeList)          // 查询所有账号类型
+	}
+}

+ 1 - 0
router/typeManage/enter.go

@@ -7,4 +7,5 @@ type RouterGroup struct {
 	GameListRouter
 	LoginTypeRouter
 	ResponsiblePersonRouter
+	AccountTypeRouter
 }

+ 1 - 0
service/typeManage/enter.go

@@ -8,5 +8,6 @@ type ServiceGroup struct {
 	GameListService
 	LoginTypeService
 	ResponsiblePersonService
+	AccountTypeService
 }
 

+ 124 - 0
service/typeManage/tm_accountType.go

@@ -0,0 +1,124 @@
+package typeManage
+
+import (
+	"errors"
+	"fmt"
+	"gorm.io/gorm"
+	"log-server/global"
+	"log-server/model/common/request"
+	"log-server/model/typeManage"
+)
+
+type AccountTypeService struct {
+
+}
+
+//添加账号类型
+func (a *AccountTypeService) CreateAccountType(accountType typeManage.AccountType) (err error) {
+	//首先检查数据库中是否有同名账号类型
+	err = global.GVA_DB.Table("account_type").Where("type_name = ?", accountType.TypeName).First(&typeManage.AccountType{}).Error
+	if !errors.Is(err, gorm.ErrRecordNotFound) {
+		return errors.New("已存在相同账号类型,请勿重复添加")
+	}
+	return global.GVA_DB.Table("account_type").Omit("create_time", "update_time").Create(&accountType).Error
+}
+//单个删除账号类型
+func (a *AccountTypeService) DeleteAccountType(accountType typeManage.AccountType) (err error) {
+	//首先检查数据库中是否有这条记录
+	//为了后端数据的安全,声明一个实体用来存储扫描到的记录
+	//删除实体
+	var entity typeManage.AccountType
+	err = global.GVA_DB.Table("account_type").Where("id = ?", accountType.Id).First(&entity).Error
+	if errors.Is(err, gorm.ErrRecordNotFound) {
+		return err
+	}
+	return global.GVA_DB.Table("account_type").Delete(&entity).Error
+}
+//批量删除账号类型
+func (a *AccountTypeService) DeleteAccountTypesByIds(ids request.IdsReq) (err error) {
+	err = global.GVA_DB.Table("account_type").Delete(&[]typeManage.AccountType{}, "id in ?", ids.Ids).Error
+	return err
+}
+//更改账号类型
+func (a *AccountTypeService) UpdateAccountType(accountType typeManage.AccountType) (err error) {
+	//做业务逻辑判断
+	//比如不能更改至同名账号类型,如果存在同名账号类型就直接返回错误
+	//排错之后再更新
+	err = global.GVA_DB.Table("account_type").Where("id != ? and type_name = ?", accountType.Id, accountType.TypeName).First(&typeManage.AccountType{}).Error
+	if !errors.Is(err, gorm.ErrRecordNotFound) {
+		return errors.New("已存在同名账号类型,无法更新")
+	}
+	return global.GVA_DB.Table("account_type").Updates(&accountType).Error
+}
+
+
+//通过id获取单条数据
+func (a *AccountTypeService) GetAccountTypeById(id int) (accountType typeManage.AccountType, err error){
+	err = global.GVA_DB.Table("account_type").Where("id = ?", id).First(&accountType).Error
+	return
+}
+//获取所有账号类型列表
+func (a *AccountTypeService) AccountTypeList(accountType typeManage.AccountType, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error){
+	//accountType是传输过来的查询条件
+	//info是传输过来的分页信息
+	//order是传输过来的排序字段
+	//desc是传输过来的升降序信息
+
+	//获取limit和offset
+	limit := info.PageSize
+	offset := (info.Page - 1) * info.PageSize
+
+
+	db := global.GVA_DB.Table("account_type").Model(&typeManage.AccountType{})
+	var accountTypeList []typeManage.AccountType
+
+	//先条件过滤
+	if accountType.TypeName != "" {
+		//条件过滤记录数
+		db = db.Where("type_name like ?", "%" + accountType.TypeName + "%")
+	}
+	//查找数量并且校验是否出错,注意,即使count=0,Count也不会出错,出错的地方可能在于我条件筛选没有,然后我再count,然后出错?
+	//非也非也,我即使条件查询没有,从逻辑上来说不该报错,而且实际业务表现上也没有报错,所以可能是为了防止其他错误出现稳一手
+
+	//只要进行了条件筛选,就可以直接去查询count了,后续任何操作比如分页排序都无法也不能改变count,所以在条件查询之后、在分页和排序之前去操作count
+
+	err = db.Count(&total).Error
+	if err != nil{
+		//如果出错直接返回
+		return accountTypeList, total, err
+	} else {
+		//先分页再排序
+		db = db.Limit(limit).Offset(offset)
+		if order != ""{
+			//传入排序字段,进行排序
+			//定义orderStr存储完整的排序字段
+			var  orderStr string
+			//为了避免sql注入,自己创建数组匹配
+			orderMap := make(map[string]bool, 3)
+			orderMap["type_name"] = true
+			orderMap["create_time"] = true
+			orderMap["update_time"] = true
+			if orderMap[order] {
+				//是好人,可以排序
+				if desc {
+					//传入desc,是降序
+					orderStr = order + " desc"
+				} else {
+					//没有传入desc,是默认升序
+					orderStr = order
+				}
+			} else {
+				//传入非法字段,不能排序
+				err = fmt.Errorf("传入非法字段 %v", order)
+				return accountTypeList, total, err
+			}
+			//排序
+			err = db.Order(orderStr).Find(&accountTypeList).Error
+		} else {
+			//没有传入排序字段,默认按照类型名称降序排序
+			err = db.Order("type_name desc").Find(&accountTypeList).Error
+		}
+	}
+	//是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢?
+	return accountTypeList, total, err
+}

+ 1 - 1
service/typeManage/tm_gameChannel.go

@@ -78,7 +78,7 @@ func (g *GameChannelService) GetGameChannelInfoList(channel typeManage.GameChann
 	if err != nil {
 		return channelList, total, err
 	} else {
-		//如果没有出错,先过滤,再排序
+		//如果没有出错,先分页,再排序
 		db = db.Limit(limit).Offset(offset)
 		//对字段进行排序,要求是页面显示出来的所有字段,否则默认按照厂商名称来进行排序
 		//首先新建一个集合,用来防止恶意注入

+ 1 - 0
utils/verify.go

@@ -26,4 +26,5 @@ var (
 	GameListVerify = Rules{"GameName": {NotEmpty()}, "GamePort": {NotEmpty()}, "LoginType": {NotEmpty()}}
 	LoginTypeVerify = Rules{"LoginName": {NotEmpty()}, "LoginDesc": {NotEmpty()}}
 	ResponsiblePersonVerify = Rules{"Name": {NotEmpty()}}
+	AccountTypeVerify = Rules{"TypeName": {NotEmpty()}}
 )