85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package roleservicelogic
|
|
|
|
import (
|
|
"ark-permission/internal/model"
|
|
ers "code.30cm.net/wanderland/library-go/errors"
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"ark-permission/gen_result/pb/permission"
|
|
"ark-permission/internal/svc"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type CreateRoleLogic struct {
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
logx.Logger
|
|
}
|
|
|
|
func NewCreateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateRoleLogic {
|
|
return &CreateRoleLogic{
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
Logger: logx.WithContext(ctx),
|
|
}
|
|
}
|
|
|
|
type createRoleReq struct {
|
|
Status string `json:"status" binding:"required"`
|
|
RoleID string `json:"role_id"`
|
|
DisplayName string `json:"display_name" binding:"required"`
|
|
}
|
|
|
|
// CreateRole 建立角色
|
|
func (l *CreateRoleLogic) CreateRole(in *permission.CreateRoleReq) (*permission.RoleResp, error) {
|
|
// 驗證所需
|
|
if err := l.svcCtx.Validate.ValidateAll(&createRoleReq{
|
|
Status: in.GetStatus().String(),
|
|
DisplayName: in.GetDisplayName(),
|
|
}); err != nil {
|
|
return nil, ers.InvalidFormat(err.Error())
|
|
}
|
|
|
|
// 有操作失敗風險,因為如果並行狀態下有可能撞到產生的 role_id 一樣,不過此時有在表當中,擋 UK ,發生機率小,請使用者重試即可
|
|
roleID, err := l.svcCtx.RoleRepo.IncrementID(l.ctx)
|
|
if err != nil {
|
|
return nil, ers.DBError("[permission.CreateRole] failed to get IncrementID", err.Error())
|
|
}
|
|
|
|
rid := in.GetRoleId()
|
|
if rid == "" {
|
|
rid = fmt.Sprintf("AM%06d", roleID)
|
|
}
|
|
|
|
now := time.Now().UTC()
|
|
data := model.Role{
|
|
RoleId: rid,
|
|
DisplayName: in.GetDisplayName(),
|
|
Status: int64(in.GetStatus().Number()),
|
|
CreateTime: now.Unix(),
|
|
UpdateTime: now.Unix(),
|
|
}
|
|
|
|
res, err := l.svcCtx.RoleRepo.Insert(l.ctx, &data)
|
|
if err != nil {
|
|
return nil, ers.DBError("[RoleRepo.Insert] failed to insert role data", err.Error())
|
|
}
|
|
|
|
lastID, err := res.LastInsertId()
|
|
if err != nil {
|
|
lastID = 0
|
|
}
|
|
|
|
return &permission.RoleResp{
|
|
Id: lastID,
|
|
DisplayName: data.DisplayName,
|
|
RoleId: data.RoleId,
|
|
Status: permission.PermissionStatus(data.Status),
|
|
CreateTime: data.CreateTime,
|
|
UpdateTime: data.UpdateTime,
|
|
}, nil
|
|
}
|