Quellcode durchsuchen

fix:edit API auth

jimmyyem vor 6 Monaten
Ursprung
Commit
dd6f3db183

+ 14 - 0
desc/wechat/employee.api

@@ -98,6 +98,20 @@ type (
 )
 
 @server(
+	group: employee
+)
+
+service Wechat {
+	// Get employee list | 获取Employee列表
+	@handler getEmployeeSearch
+	post /employee/search (EmployeeListReq) returns (EmployeeListResp)
+
+	// Get employee by ID | 通过ID获取Employee
+	@handler getEmployeeDetail
+	post /employee/detail (IDReq) returns (EmployeeInfoResp)
+}
+
+@server(
     jwt: Auth
     group: employee
     middleware: Authority

+ 26 - 18
desc/wechat/token.api

@@ -76,27 +76,35 @@ type (
 )
 
 service Wechat {
-    // Create token information | 创建Token
-    @handler createToken
-    post /token/create (TokenInfo) returns (BaseMsgResp)
+	// Check if token and mac are valid | 检查token和mac的合法性
+	@handler checkToken
+	post /token/check (CheckTokenReq) returns (CheckTokenResp)
+}
 
-    // Update token information | 更新Token
-    @handler updateToken
-    post /token/update (TokenInfo) returns (BaseMsgResp)
+@server(
+	group: token
+	jwt: Auth
+	middleware: Authority
+)
 
-    // Delete token information | 删除Token信息
-    @handler deleteToken
-    post /token/delete (IDsReq) returns (BaseMsgResp)
+service Wechat {
+	// Create token information | 创建Token
+	@handler createToken
+	post /token/third/create (TokenInfo) returns (BaseMsgResp)
 
-    // Get token list | 获取Token列表
-    @handler getTokenList
-    post /token/list (TokenListReq) returns (TokenListResp)
+	// Update token information | 更新Token
+	@handler updateToken
+	post /token/third/update (TokenInfo) returns (BaseMsgResp)
 
-    // Get token by ID | 通过ID获取Token
-    @handler getTokenById
-    post /token (IDReq) returns (TokenInfoResp)
+	// Delete token information | 删除Token信息
+	@handler deleteToken
+	post /token/third/delete (IDsReq) returns (BaseMsgResp)
 
-	// Check if token and mac are valid | 检查token和mac的合法性
-	@handler checkToken
-	post /token/check (CheckTokenReq) returns (CheckTokenResp)
+	// Get token list | 获取Token列表
+	@handler getTokenList
+	post /token/third/list (TokenListReq) returns (TokenListResp)
+
+	// Get token by ID | 通过ID获取Token
+	@handler getTokenById
+	post /token/third/detail (IDReq) returns (TokenInfoResp)
 }

+ 44 - 0
internal/handler/employee/get_employee_detail_handler.go

@@ -0,0 +1,44 @@
+package employee
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/employee"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /employee/detail employee GetEmployeeDetail
+//
+// Get employee by ID | 通过ID获取Employee
+//
+// Get employee by ID | 通过ID获取Employee
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: IDReq
+//
+// Responses:
+//  200: EmployeeInfoResp
+
+func GetEmployeeDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.IDReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := employee.NewGetEmployeeDetailLogic(r.Context(), svcCtx)
+		resp, err := l.GetEmployeeDetail(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 44 - 0
internal/handler/employee/get_employee_search_handler.go

@@ -0,0 +1,44 @@
+package employee
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/employee"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /employee/search employee GetEmployeeSearch
+//
+// Get employee list | 获取Employee列表
+//
+// Get employee list | 获取Employee列表
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: EmployeeListReq
+//
+// Responses:
+//  200: EmployeeListResp
+
+func GetEmployeeSearchHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.EmployeeListReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := employee.NewGetEmployeeSearchLogic(r.Context(), svcCtx)
+		resp, err := l.GetEmployeeSearch(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 49 - 25
internal/handler/routes.go

@@ -685,6 +685,21 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 	)
 
 	server.AddRoutes(
+		[]rest.Route{
+			{
+				Method:  http.MethodPost,
+				Path:    "/employee/search",
+				Handler: employee.GetEmployeeSearchHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/employee/detail",
+				Handler: employee.GetEmployeeDetailHandler(serverCtx),
+			},
+		},
+	)
+
+	server.AddRoutes(
 		rest.WithMiddlewares(
 			[]rest.Middleware{serverCtx.Authority},
 			[]rest.Route{
@@ -804,31 +819,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 		[]rest.Route{
 			{
 				Method:  http.MethodPost,
-				Path:    "/token/create",
-				Handler: token.CreateTokenHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
-				Path:    "/token/update",
-				Handler: token.UpdateTokenHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
-				Path:    "/token/delete",
-				Handler: token.DeleteTokenHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
-				Path:    "/token/list",
-				Handler: token.GetTokenListHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
-				Path:    "/token",
-				Handler: token.GetTokenByIdHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
 				Path:    "/token/check",
 				Handler: token.CheckTokenHandler(serverCtx),
 			},
@@ -841,6 +831,40 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			[]rest.Route{
 				{
 					Method:  http.MethodPost,
+					Path:    "/token/third/create",
+					Handler: token.CreateTokenHandler(serverCtx),
+				},
+				{
+					Method:  http.MethodPost,
+					Path:    "/token/third/update",
+					Handler: token.UpdateTokenHandler(serverCtx),
+				},
+				{
+					Method:  http.MethodPost,
+					Path:    "/token/third/delete",
+					Handler: token.DeleteTokenHandler(serverCtx),
+				},
+				{
+					Method:  http.MethodPost,
+					Path:    "/token/third/list",
+					Handler: token.GetTokenListHandler(serverCtx),
+				},
+				{
+					Method:  http.MethodPost,
+					Path:    "/token/third/detail",
+					Handler: token.GetTokenByIdHandler(serverCtx),
+				},
+			}...,
+		),
+		rest.WithJwt(serverCtx.Config.Auth.AccessSecret),
+	)
+
+	server.AddRoutes(
+		rest.WithMiddlewares(
+			[]rest.Middleware{serverCtx.Authority},
+			[]rest.Route{
+				{
+					Method:  http.MethodPost,
 					Path:    "/category/create",
 					Handler: category.CreateCategoryHandler(serverCtx),
 				},

+ 137 - 0
internal/logic/employee/get_employee_detail_logic.go

@@ -0,0 +1,137 @@
+package employee
+
+import (
+	"context"
+	"github.com/suyuan32/simple-admin-common/msg/errormsg"
+	"github.com/suyuan32/simple-admin-common/utils/pointy"
+	"wechat-api/ent/employee"
+	"wechat-api/ent/employeeconfig"
+	"wechat-api/internal/utils/dberrorhandler"
+
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetEmployeeDetailLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetEmployeeDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetEmployeeDetailLogic {
+	return &GetEmployeeDetailLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *GetEmployeeDetailLogic) GetEmployeeDetail(req *types.IDReq) (*types.EmployeeInfoResp, error) {
+	//organizationId := l.ctx.Value("organizationId").(uint64)
+
+	data, err := l.svcCtx.DB.Employee.Query().WithEmWorkExperiences().WithEmTutorial().Where(employee.ID(req.Id)).Only(l.ctx)
+	if err != nil {
+		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+	}
+
+	workExperience := make([]types.WorkExperienceInfo, 0, len(data.Edges.EmWorkExperiences))
+	for _, work := range data.Edges.EmWorkExperiences {
+		workExperience = append(workExperience, types.WorkExperienceInfo{
+			BaseIDInfo: types.BaseIDInfo{
+				Id:        &work.ID,
+				CreatedAt: pointy.GetPointer(work.CreatedAt.UnixMilli()),
+				UpdatedAt: pointy.GetPointer(work.UpdatedAt.UnixMilli()),
+			},
+			EmployeeId:   &work.EmployeeID,
+			Company:      &work.Company,
+			StartDate:    pointy.GetPointer(work.StartDate.UnixMilli()),
+			StartDateStr: pointy.GetPointer(work.StartDate.Format("2006-01-02 15:04:05")),
+			EndDate:      pointy.GetPointer(work.EndDate.UnixMilli()),
+			EndDateStr:   pointy.GetPointer(work.EndDate.Format("2006-01-02 15:04:05")),
+			Experience:   &work.Experience,
+		})
+	}
+
+	tutorial := make([]types.TutorialInfo, 0, len(data.Edges.EmTutorial))
+	for _, tt := range data.Edges.EmTutorial {
+		tutorial = append(tutorial, types.TutorialInfo{
+			BaseIDInfo: types.BaseIDInfo{
+				Id:        &tt.ID,
+				CreatedAt: pointy.GetPointer(tt.CreatedAt.UnixMilli()),
+				UpdatedAt: pointy.GetPointer(tt.UpdatedAt.UnixMilli()),
+			},
+			EmployeeId: &tt.EmployeeID,
+			Content:    &tt.Content,
+			Title:      &tt.Title,
+			Index:      &tt.Index,
+		})
+	}
+
+	// 分别获得 scene 和 switch_in 的列表
+	sceneList := getEmployeeDetail(l, data.Scene)
+	switchInList := getEmployeeDetail(l, data.SwitchIn)
+
+	return &types.EmployeeInfoResp{
+		BaseDataInfo: types.BaseDataInfo{
+			Code: 0,
+			Msg:  errormsg.Success,
+		},
+		Data: types.EmployeeInfo{
+			BaseIDInfo: types.BaseIDInfo{
+				Id:        &data.ID,
+				CreatedAt: pointy.GetPointer(data.CreatedAt.UnixMilli()),
+				UpdatedAt: pointy.GetPointer(data.UpdatedAt.UnixMilli()),
+			},
+			Title:            &data.Title,
+			Avatar:           &data.Avatar,
+			Tags:             &data.Tags,
+			HireCount:        &data.HireCount,
+			ServiceCount:     &data.ServiceCount,
+			AchievementCount: &data.AchievementCount,
+			Intro:            &data.Intro,
+			Estimate:         &data.Estimate,
+			Skill:            &data.Skill,
+			AbilityType:      &data.AbilityType,
+			Scene:            &data.Scene,
+			SceneList:        sceneList,
+			Tutorial:         tutorial,
+			SwitchIn:         &data.SwitchIn,
+			SwitchInList:     switchInList,
+			VideoUrl:         &data.VideoURL,
+			WorkExperience:   workExperience,
+			CategoryId:       &data.CategoryID,
+		},
+	}, nil
+}
+
+func getEmployeeDetail(l *GetEmployeeDetailLogic, ids string) []types.EmployeeConfigInfo {
+	sceneList := make([]types.EmployeeConfigInfo, 0)
+
+	sceneIds := FormatIds(ids)
+
+	if len(sceneIds) == 0 {
+		return sceneList
+	}
+
+	employeeConfigList, err := l.svcCtx.DB.EmployeeConfig.Query().Where(
+		employeeconfig.IDIn(sceneIds...),
+	).All(l.ctx)
+
+	if err == nil && len(employeeConfigList) > 0 {
+		for _, val := range employeeConfigList {
+			sceneList = append(sceneList, types.EmployeeConfigInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &val.ID,
+					CreatedAt: pointy.GetPointer(val.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(val.UpdatedAt.UnixMilli()),
+				},
+				Stype: &val.Stype,
+				Title: &val.Title,
+				Photo: &val.Photo,
+			})
+		}
+	}
+
+	return sceneList
+}

+ 150 - 0
internal/logic/employee/get_employee_search_logic.go

@@ -0,0 +1,150 @@
+package employee
+
+import (
+	"context"
+	"github.com/suyuan32/simple-admin-common/msg/errormsg"
+	"github.com/suyuan32/simple-admin-common/utils/pointy"
+	"wechat-api/ent/employee"
+	"wechat-api/ent/employeeconfig"
+	"wechat-api/ent/predicate"
+	"wechat-api/internal/utils/dberrorhandler"
+
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetEmployeeSearchLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetEmployeeSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetEmployeeSearchLogic {
+	return &GetEmployeeSearchLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *GetEmployeeSearchLogic) GetEmployeeSearch(req *types.EmployeeListReq) (*types.EmployeeListResp, error) {
+	//organizationId := l.ctx.Value("organizationId").(uint64)
+
+	var predicates []predicate.Employee
+	//predicates = append(predicates, employee.OrganizationIDEQ(organizationId))
+
+	if req.Title != nil && *req.Title != "" {
+		predicates = append(predicates, employee.TitleContains(*req.Title))
+	}
+	if req.CategoryId != nil && *req.CategoryId > 0 {
+		predicates = append(predicates, employee.CategoryIDEQ(*req.CategoryId))
+	}
+	data, err := l.svcCtx.DB.Employee.Query().Where(predicates...).WithEmWorkExperiences().WithEmTutorial().Page(l.ctx, req.Page, req.PageSize)
+
+	if err != nil {
+		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+	}
+
+	resp := &types.EmployeeListResp{}
+	resp.Msg = errormsg.Success
+	resp.Data.Total = data.PageDetails.Total
+
+	for _, v := range data.List {
+		workExperience := make([]types.WorkExperienceInfo, 0, len(v.Edges.EmWorkExperiences))
+		for _, work := range v.Edges.EmWorkExperiences {
+			workExperience = append(workExperience, types.WorkExperienceInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &work.ID,
+					CreatedAt: pointy.GetPointer(work.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(work.UpdatedAt.UnixMilli()),
+				},
+				EmployeeId:   &work.EmployeeID,
+				Company:      &work.Company,
+				StartDate:    pointy.GetPointer(work.StartDate.UnixMilli()),
+				StartDateStr: pointy.GetPointer(work.StartDate.Format("2006-01-02 15:04:05")),
+				EndDate:      pointy.GetPointer(work.EndDate.UnixMilli()),
+				EndDateStr:   pointy.GetPointer(work.EndDate.Format("2006-01-02 15:04:05")),
+				Experience:   &work.Experience,
+			})
+		}
+
+		tutorial := make([]types.TutorialInfo, 0, len(v.Edges.EmTutorial))
+		for _, tt := range v.Edges.EmTutorial {
+			tutorial = append(tutorial, types.TutorialInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &tt.ID,
+					CreatedAt: pointy.GetPointer(tt.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(tt.UpdatedAt.UnixMilli()),
+				},
+				EmployeeId: &tt.EmployeeID,
+				Content:    &tt.Content,
+				Title:      &tt.Title,
+				Index:      &tt.Index,
+			})
+		}
+
+		sceneList := getEmployeeConfig(l, v.Scene)
+		switchInList := getEmployeeConfig(l, v.SwitchIn)
+
+		resp.Data.Data = append(resp.Data.Data,
+			types.EmployeeInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &v.ID,
+					CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
+				},
+				Title:            &v.Title,
+				Avatar:           &v.Avatar,
+				Tags:             &v.Tags,
+				HireCount:        &v.HireCount,
+				ServiceCount:     &v.ServiceCount,
+				AchievementCount: &v.AchievementCount,
+				Intro:            &v.Intro,
+				Estimate:         &v.Estimate,
+				Skill:            &v.Skill,
+				AbilityType:      &v.AbilityType,
+				Scene:            &v.Scene,
+				SceneList:        sceneList,
+				SwitchIn:         &v.SwitchIn,
+				SwitchInList:     switchInList,
+				Tutorial:         tutorial,
+				VideoUrl:         &v.VideoURL,
+				WorkExperience:   workExperience,
+				CategoryId:       &v.CategoryID,
+			})
+	}
+
+	return resp, nil
+}
+
+func getEmployeeConfig(l *GetEmployeeSearchLogic, ids string) []types.EmployeeConfigInfo {
+	sceneList := make([]types.EmployeeConfigInfo, 0)
+
+	sceneIds := FormatIds(ids)
+
+	if len(sceneIds) == 0 {
+		return sceneList
+	}
+
+	employeeConfigList, err := l.svcCtx.DB.EmployeeConfig.Query().Where(
+		employeeconfig.IDIn(sceneIds...),
+	).All(l.ctx)
+
+	if err == nil && len(employeeConfigList) > 0 {
+		for _, val := range employeeConfigList {
+			sceneList = append(sceneList, types.EmployeeConfigInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &val.ID,
+					CreatedAt: pointy.GetPointer(val.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(val.UpdatedAt.UnixMilli()),
+				},
+				Stype: &val.Stype,
+				Title: &val.Title,
+				Photo: &val.Photo,
+			})
+		}
+	}
+
+	return sceneList
+}

+ 2 - 3
internal/types/types.go

@@ -382,9 +382,8 @@ type AgentInfo struct {
 	// background | 背景介绍
 	Background *string `json:"background,optional"`
 	// examples | 对话案例
-	Examples  *string `json:"examples,optional"`
-	DatasetId *string `json:"dataset_id,optional"`
-	//		Dataset DatasetInfo `json:"dataset,optional"`
+	Examples     *string `json:"examples,optional"`
+	DatasetId    *string `json:"dataset_id,optional"`
 	CollectionId *string `json:"collection_id,optional"`
 }