实现category service基础接口

This commit is contained in:
2025-05-31 16:27:01 +08:00
parent faa6a35475
commit e5446bf836
33 changed files with 1420 additions and 67 deletions

View File

@ -0,0 +1,97 @@
package logic
import (
"context"
"strings"
"time"
"godemo/category/category"
"godemo/gateway/internal/svc"
"godemo/gateway/internal/types"
"github.com/zeromicro/go-zero/core/logx"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type GetSystemCategoriesLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetSystemCategoriesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetSystemCategoriesLogic {
return &GetSystemCategoriesLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetSystemCategoriesLogic) GetSystemCategories(req *types.GetSystemCategoriesReq) (resp *types.ListCategoriesResp, err error) {
// 1. 验证系统ID
if strings.TrimSpace(req.SystemID) == "" {
return nil, status.Error(codes.InvalidArgument, "system_id is required")
}
// 2. 准备 RPC 请求
rpcReq := &category.GetSystemCategoriesRequest{
SystemId: req.SystemID,
IncludeDescendants: req.IncludeDescendants,
}
// 添加父分类ID过滤如果提供
if req.ParentID != "" {
rpcReq.ParentId = req.ParentID
}
// 3. 调用 RPC 服务
rpcResp, rpcErr := l.svcCtx.CategoryRpc.GetSystemCategories(l.ctx, rpcReq)
if rpcErr != nil {
st, ok := status.FromError(rpcErr)
if ok && st.Code() == codes.NotFound {
// 返回空列表而不是错误
return &types.ListCategoriesResp{
Total: 0,
List: []types.BaseCategory{},
}, nil
}
l.Logger.Errorf("RPC error: %v", rpcErr)
return nil, rpcErr
}
// 4. 转换响应数据
categories := make([]types.BaseCategory, 0, len(rpcResp.Categories))
for _, cat := range rpcResp.Categories {
// 转换时间格式
createdAt := ""
if cat.CreatedAt > 0 {
createdAt = time.Unix(cat.CreatedAt, 0).Format(time.RFC3339)
}
updatedAt := ""
if cat.UpdatedAt > 0 {
updatedAt = time.Unix(cat.UpdatedAt, 0).Format(time.RFC3339)
}
categories = append(categories, types.BaseCategory{
ID: cat.Id,
SystemID: cat.SystemId,
Name: cat.Name,
Alias: cat.Alias,
ParentID: cat.ParentId,
Description: cat.Description,
CreatedAt: createdAt,
UpdatedAt: updatedAt,
})
}
// 5. 构建响应
resp = &types.ListCategoriesResp{
Total: rpcResp.Total,
List: categories,
}
l.Logger.Infof("Retrieved %d categories for system %s (parent: %s)", len(categories), req.SystemID, req.ParentID)
return resp, nil
}