179 lines
4.7 KiB
Go
179 lines
4.7 KiB
Go
package app
|
|
|
|
import (
|
|
consts "cid/consts/app"
|
|
dao "cid/dao/app"
|
|
dto "cid/model/dto/app"
|
|
entity "cid/model/entity/app"
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
type applicationService struct{}
|
|
|
|
// Application 应用服务
|
|
var Application = new(applicationService)
|
|
|
|
// Create 创建应用
|
|
func (s *applicationService) Create(ctx context.Context, req *dto.CreateApplicationReq) (res *dto.CreateApplicationRes, err error) {
|
|
// 检查应用名称是否重复
|
|
count, err := dao.Application.Count(ctx, &dto.ListApplicationReq{Name: req.Name})
|
|
if err != nil {
|
|
return
|
|
}
|
|
if count > 0 {
|
|
return nil, errors.New("应用名称已存在")
|
|
}
|
|
|
|
// 检查应用编码是否重复
|
|
count, err = dao.Application.Count(ctx, &dto.ListApplicationReq{AppCode: req.AppCode})
|
|
if err != nil {
|
|
return
|
|
}
|
|
if count > 0 {
|
|
return nil, errors.New("应用编码已存在")
|
|
}
|
|
|
|
// 插入数据库
|
|
id, err := dao.Application.Insert(ctx, req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
res = &dto.CreateApplicationRes{
|
|
Id: id,
|
|
}
|
|
return
|
|
}
|
|
|
|
// List 获取应用列表
|
|
func (s *applicationService) List(ctx context.Context, req *dto.ListApplicationReq) (res *dto.ListApplicationRes, err error) {
|
|
applicationList, total, err := dao.Application.List(ctx, req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 组装响应数据
|
|
list := make([]dto.ApplicationItem, 0, len(applicationList))
|
|
for _, item := range applicationList {
|
|
list = append(list, dto.ApplicationItem{
|
|
Id: item.Id,
|
|
Name: item.Name,
|
|
AppCode: item.AppCode,
|
|
Type: item.Type,
|
|
TypeName: s.getTypeName(item.Type),
|
|
Status: item.Status,
|
|
StatusName: s.getStatusName(item.Status),
|
|
Description: item.Description,
|
|
CreatedAt: item.CreatedAt.Unix(),
|
|
UpdatedAt: item.UpdatedAt.Unix(),
|
|
})
|
|
}
|
|
|
|
res = &dto.ListApplicationRes{
|
|
List: list,
|
|
Total: total,
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetOne 获取单个应用
|
|
func (s *applicationService) GetOne(ctx context.Context, req *dto.GetApplicationReq) (res *dto.GetApplicationRes, err error) {
|
|
application, err := dao.Application.GetOne(ctx, req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var applicationEntity *entity.Application
|
|
if err = gconv.Struct(application, &applicationEntity); err != nil {
|
|
return
|
|
}
|
|
|
|
return &dto.GetApplicationRes{
|
|
Application: applicationEntity,
|
|
}, nil
|
|
}
|
|
|
|
// Update 更新应用
|
|
func (s *applicationService) Update(ctx context.Context, req *dto.UpdateApplicationReq) (err error) {
|
|
// 检查应用是否存在
|
|
exist, err := dao.Application.GetOne(ctx, &dto.GetApplicationReq{Id: req.Id})
|
|
if err != nil || exist == nil {
|
|
return errors.New("应用不存在")
|
|
}
|
|
|
|
// 如果修改了名称,检查新名称是否重复
|
|
if req.Name != "" && req.Name != exist.Name {
|
|
count, err := dao.Application.Count(ctx, &dto.ListApplicationReq{Name: req.Name})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if count > 0 {
|
|
return errors.New("应用名称已存在")
|
|
}
|
|
}
|
|
|
|
// 如果修改了应用编码,检查新编码是否重复
|
|
if req.AppCode != "" && req.AppCode != exist.AppCode {
|
|
count, err := dao.Application.Count(ctx, &dto.ListApplicationReq{AppCode: req.AppCode})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if count > 0 {
|
|
return errors.New("应用编码已存在")
|
|
}
|
|
}
|
|
|
|
_, err = dao.Application.Update(ctx, req)
|
|
return
|
|
}
|
|
|
|
// UpdateStatus 更新应用状态
|
|
func (s *applicationService) UpdateStatus(ctx context.Context, req *dto.UpdateApplicationStatusReq) (err error) {
|
|
_, err = dao.Application.UpdateStatus(ctx, req.Id, req.Status.String())
|
|
return
|
|
}
|
|
|
|
// Delete 删除应用
|
|
func (s *applicationService) Delete(ctx context.Context, req *dto.DeleteApplicationReq) (err error) {
|
|
// TODO: 检查是否存在关联的数据,防止误删
|
|
// 例如: 检查该应用是否有关联的广告活动等
|
|
|
|
_, err = dao.Application.Delete(ctx, req)
|
|
return
|
|
}
|
|
|
|
// GetByAppCode 根据应用编码获取应用
|
|
func (s *applicationService) GetByAppCode(ctx context.Context, appCode string) (res *entity.Application, err error) {
|
|
return dao.Application.GetByAppCode(ctx, appCode)
|
|
}
|
|
|
|
// getTypeName 获取类型名称
|
|
func (s *applicationService) getTypeName(appType consts.AppType) string {
|
|
typeNames := map[consts.AppType]string{
|
|
consts.AppTypeWeb: "Web应用",
|
|
consts.AppTypeMobile: "移动应用",
|
|
consts.AppTypeMiniApp: "小程序",
|
|
consts.AppTypeH5: "H5应用",
|
|
consts.AppTypeDesktop: "桌面应用",
|
|
consts.AppTypeThirdParty: "第三方应用",
|
|
}
|
|
if name, ok := typeNames[appType]; ok {
|
|
return name
|
|
}
|
|
return string(appType)
|
|
}
|
|
|
|
// getStatusName 获取状态名称
|
|
func (s *applicationService) getStatusName(status consts.AppStatus) string {
|
|
statusNames := map[consts.AppStatus]string{
|
|
consts.AppStatusActive: "启用",
|
|
consts.AppStatusInactive: "停用",
|
|
}
|
|
if name, ok := statusNames[status]; ok {
|
|
return name
|
|
}
|
|
return string(status)
|
|
}
|