任务三

This commit is contained in:
Yvan
2026-01-07 14:50:58 +08:00
parent 1a06053b30
commit c83b773a40
6 changed files with 263 additions and 103 deletions
+40
View File
@@ -0,0 +1,40 @@
package system
import (
"kra/internal/biz/system"
"kra/internal/server/middleware"
"github.com/go-kratos/kratos/v2/errors"
"github.com/go-kratos/kratos/v2/transport/http"
)
// JwtBlacklistService JWT黑名单服务
type JwtBlacklistService struct {
uc *system.JwtBlacklistUsecase
}
// NewJwtBlacklistService 创建JWT黑名单服务
func NewJwtBlacklistService(uc *system.JwtBlacklistUsecase) *JwtBlacklistService {
return &JwtBlacklistService{uc: uc}
}
// JoinBlacklist 加入黑名单(登出时调用)
func (s *JwtBlacklistService) JoinBlacklist(ctx http.Context) error {
token := middleware.GetToken(ctx)
if token == "" {
return errors.BadRequest("TOKEN_EMPTY", "token为空")
}
if err := s.uc.JoinBlacklist(ctx, token); err != nil {
return errors.InternalServer("BLACKLIST_ERROR", err.Error())
}
return ctx.Result(200, map[string]any{
"code": 0,
"msg": "登出成功",
})
}
// RegisterRoutes 注册路由
func (s *JwtBlacklistService) RegisterRoutes(srv *http.Server) {
r := srv.Route("/")
r.POST("/jwt/jsonInBlacklist", s.JoinBlacklist)
}
+76 -97
View File
@@ -1,7 +1,7 @@
package system
import (
"context"
"fmt"
"kra/internal/biz/system"
@@ -21,7 +21,7 @@ func NewOperationRecordService(uc *system.OperationRecordUsecase) *OperationReco
// OperationRecordInfo 操作记录信息
type OperationRecordInfo struct {
ID uint `json:"ID"`
ID uint `json:"id"`
IP string `json:"ip"`
Method string `json:"method"`
Path string `json:"path"`
@@ -35,30 +35,6 @@ type OperationRecordInfo struct {
User *UserInfo `json:"user,omitempty"`
}
// DeleteOperationRecord 删除操作记录
func (s *OperationRecordService) DeleteOperationRecord(ctx context.Context, id uint) error {
return s.uc.DeleteOperationRecord(ctx, id)
}
// DeleteOperationRecordByIdsRequest 批量删除请求
type DeleteOperationRecordByIdsRequest struct {
Ids []uint `json:"ids"`
}
// DeleteOperationRecordByIds 批量删除操作记录
func (s *OperationRecordService) DeleteOperationRecordByIds(ctx context.Context, req *DeleteOperationRecordByIdsRequest) error {
return s.uc.DeleteOperationRecordByIds(ctx, req.Ids)
}
// GetOperationRecord 获取操作记录
func (s *OperationRecordService) GetOperationRecord(ctx context.Context, id uint) (*OperationRecordInfo, error) {
record, err := s.uc.GetOperationRecord(ctx, id)
if err != nil {
return nil, err
}
return toOperationRecordInfo(record), nil
}
// GetOperationRecordListRequest 获取操作记录列表请求
type GetOperationRecordListRequest struct {
Page int `json:"page"`
@@ -66,6 +42,7 @@ type GetOperationRecordListRequest struct {
Method string `json:"method"`
Path string `json:"path"`
Status int `json:"status"`
UserID uint `json:"user_id"`
}
// GetOperationRecordListResponse 获取操作记录列表响应
@@ -76,8 +53,30 @@ type GetOperationRecordListResponse struct {
PageSize int `json:"pageSize"`
}
// GetOperationRecordList 获取操作记录列表
func (s *OperationRecordService) GetOperationRecordList(ctx context.Context, req *GetOperationRecordListRequest) (*GetOperationRecordListResponse, error) {
// DeleteOperationRecordRequest 删除操作记录请求
type DeleteOperationRecordRequest struct {
ID uint `json:"id"`
}
// DeleteOperationRecordByIdsRequest 批量删除操作记录请求
type DeleteOperationRecordByIdsRequest struct {
IDs []uint `json:"ids"`
}
// RegisterRoutes 注册路由
func (s *OperationRecordService) RegisterRoutes(srv *http.Server) {
r := srv.Route("/")
r.POST("/sysOperationRecord/getSysOperationRecordList", s.handleGetList)
r.DELETE("/sysOperationRecord/deleteSysOperationRecord", s.handleDelete)
r.DELETE("/sysOperationRecord/deleteSysOperationRecordByIds", s.handleDeleteByIds)
r.GET("/sysOperationRecord/findSysOperationRecord", s.handleFind)
}
func (s *OperationRecordService) handleGetList(ctx http.Context) error {
var req GetOperationRecordListRequest
if err := ctx.Bind(&req); err != nil {
return err
}
filters := make(map[string]interface{})
if req.Method != "" {
filters["method"] = req.Method
@@ -88,26 +87,63 @@ func (s *OperationRecordService) GetOperationRecordList(ctx context.Context, req
if req.Status != 0 {
filters["status"] = req.Status
}
if req.UserID != 0 {
filters["user_id"] = req.UserID
}
list, total, err := s.uc.GetOperationRecordList(ctx, req.Page, req.PageSize, filters)
if err != nil {
return nil, err
return errors.InternalServer("LIST_ERROR", err.Error())
}
result := make([]*OperationRecordInfo, len(list))
for i, r := range list {
result[i] = toOperationRecordInfo(r)
}
return &GetOperationRecordListResponse{
List: result,
resp := &GetOperationRecordListResponse{
List: make([]*OperationRecordInfo, len(list)),
Total: total,
Page: req.Page,
PageSize: req.PageSize,
}, nil
}
for i, r := range list {
resp.List[i] = toOperationRecordInfo(r)
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "获取成功", "data": resp})
}
func (s *OperationRecordService) handleDelete(ctx http.Context) error {
var req DeleteOperationRecordRequest
if err := ctx.Bind(&req); err != nil {
return err
}
if err := s.uc.DeleteOperationRecord(ctx, req.ID); err != nil {
return errors.InternalServer("DELETE_ERROR", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "删除成功"})
}
func (s *OperationRecordService) handleDeleteByIds(ctx http.Context) error {
var req DeleteOperationRecordByIdsRequest
if err := ctx.Bind(&req); err != nil {
return err
}
if err := s.uc.DeleteOperationRecordByIds(ctx, req.IDs); err != nil {
return errors.InternalServer("DELETE_ERROR", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "批量删除成功"})
}
func (s *OperationRecordService) handleFind(ctx http.Context) error {
idStr := ctx.Request().URL.Query().Get("id")
if idStr == "" {
return errors.BadRequest("INVALID_ID", "id参数不能为空")
}
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
return errors.BadRequest("INVALID_ID", "id参数格式错误")
}
record, err := s.uc.GetOperationRecord(ctx, id)
if err != nil {
return errors.NotFound("NOT_FOUND", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "获取成功", "data": toOperationRecordInfo(record)})
}
// 转换函数
func toOperationRecordInfo(r *system.OperationRecord) *OperationRecordInfo {
info := &OperationRecordInfo{
ID: r.ID,
@@ -127,60 +163,3 @@ func toOperationRecordInfo(r *system.OperationRecord) *OperationRecordInfo {
}
return info
}
// RegisterRoutes 注册路由
func (s *OperationRecordService) RegisterRoutes(srv *http.Server) {
r := srv.Route("/")
r.DELETE("/sysOperationRecord/deleteSysOperationRecord", s.handleDeleteOperationRecord)
r.DELETE("/sysOperationRecord/deleteSysOperationRecordByIds", s.handleDeleteOperationRecordByIds)
r.GET("/sysOperationRecord/findSysOperationRecord", s.handleGetOperationRecord)
r.GET("/sysOperationRecord/getSysOperationRecordList", s.handleGetOperationRecordList)
}
// HTTP Handlers
func (s *OperationRecordService) handleDeleteOperationRecord(ctx http.Context) error {
var req struct {
ID uint `json:"ID"`
}
if err := ctx.Bind(&req); err != nil {
return err
}
if err := s.DeleteOperationRecord(ctx, req.ID); err != nil {
return errors.BadRequest("DELETE_FAILED", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "删除成功"})
}
func (s *OperationRecordService) handleDeleteOperationRecordByIds(ctx http.Context) error {
var req DeleteOperationRecordByIdsRequest
if err := ctx.Bind(&req); err != nil {
return err
}
if err := s.DeleteOperationRecordByIds(ctx, &req); err != nil {
return errors.BadRequest("DELETE_FAILED", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "删除成功"})
}
func (s *OperationRecordService) handleGetOperationRecord(ctx http.Context) error {
idStr := ctx.Query().Get("ID")
id, _ := parseUint(idStr)
resp, err := s.GetOperationRecord(ctx, id)
if err != nil {
return errors.NotFound("NOT_FOUND", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "获取成功", "data": map[string]any{"reSysOperationRecord": resp}})
}
func (s *OperationRecordService) handleGetOperationRecordList(ctx http.Context) error {
var req GetOperationRecordListRequest
if err := ctx.BindQuery(&req); err != nil {
return err
}
resp, err := s.GetOperationRecordList(ctx, &req)
if err != nil {
return errors.InternalServer("LIST_ERROR", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "获取成功", "data": resp})
}