kra/internal/server/handler/system/sys_error.go

195 lines
4.8 KiB
Go

package system
import (
"time"
"kra/internal/biz/system"
"kra/pkg/response"
"github.com/gin-gonic/gin"
)
type ErrorApi struct{}
// SysErrorRequest 错误日志请求
type SysErrorRequest struct {
ID int64 `json:"id"`
Form string `json:"form" binding:"required"`
Info string `json:"info"`
Level string `json:"level"`
Solution string `json:"solution"`
Status string `json:"status"`
}
// SysErrorSearchRequest 错误日志搜索请求
type SysErrorSearchRequest struct {
Page int `json:"page" form:"page"`
PageSize int `json:"pageSize" form:"pageSize"`
Form *string `json:"form" form:"form"`
Info *string `json:"info" form:"info"`
CreatedAtRange []time.Time `json:"createdAtRange" form:"createdAtRange[]"`
}
// CreateSysError 创建错误日志
func (e *ErrorApi) CreateSysError(c *gin.Context) {
var req SysErrorRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
sysError := &system.SysError{
Form: req.Form,
Info: req.Info,
Level: req.Level,
Status: "未处理",
}
if err := errorUsecase.CreateSysError(c.Request.Context(), sysError); err != nil {
response.FailWithMessage("创建失败:"+err.Error(), c)
return
}
response.OkWithMessage("创建成功", c)
}
// DeleteSysError 删除错误日志
func (e *ErrorApi) DeleteSysError(c *gin.Context) {
id := c.Query("ID")
if id == "" {
response.FailWithMessage("缺少参数: ID", c)
return
}
if err := errorUsecase.DeleteSysError(c.Request.Context(), id); err != nil {
response.FailWithMessage("删除失败:"+err.Error(), c)
return
}
response.OkWithMessage("删除成功", c)
}
// DeleteSysErrorByIds 批量删除错误日志
func (e *ErrorApi) DeleteSysErrorByIds(c *gin.Context) {
ids := c.QueryArray("IDs[]")
if len(ids) == 0 {
response.FailWithMessage("缺少参数: IDs", c)
return
}
if err := errorUsecase.DeleteSysErrorByIds(c.Request.Context(), ids); err != nil {
response.FailWithMessage("批量删除失败:"+err.Error(), c)
return
}
response.OkWithMessage("批量删除成功", c)
}
// UpdateSysError 更新错误日志
func (e *ErrorApi) UpdateSysError(c *gin.Context) {
var req SysErrorRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
sysError := &system.SysError{
ID: req.ID,
Form: req.Form,
Info: req.Info,
Level: req.Level,
Solution: req.Solution,
Status: req.Status,
}
if err := errorUsecase.UpdateSysError(c.Request.Context(), sysError); err != nil {
response.FailWithMessage("更新失败:"+err.Error(), c)
return
}
response.OkWithMessage("更新成功", c)
}
// FindSysError 根据ID获取错误日志
func (e *ErrorApi) FindSysError(c *gin.Context) {
id := c.Query("ID")
if id == "" {
response.FailWithMessage("缺少参数: ID", c)
return
}
sysError, err := errorUsecase.GetSysError(c.Request.Context(), id)
if err != nil {
response.FailWithMessage("查询失败:"+err.Error(), c)
return
}
response.OkWithData(toErrorResponse(sysError), c)
}
// GetSysErrorList 分页获取错误日志列表
func (e *ErrorApi) GetSysErrorList(c *gin.Context) {
var req SysErrorSearchRequest
if err := c.ShouldBindQuery(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if req.Page == 0 {
req.Page = 1
}
if req.PageSize == 0 {
req.PageSize = 10
}
searchReq := &system.ErrorSearchReq{
Page: req.Page,
PageSize: req.PageSize,
Form: req.Form,
Info: req.Info,
CreatedAtRange: req.CreatedAtRange,
}
list, total, err := errorUsecase.GetSysErrorInfoList(c.Request.Context(), searchReq)
if err != nil {
response.FailWithMessage("获取失败:"+err.Error(), c)
return
}
result := make([]map[string]interface{}, len(list))
for i, item := range list {
result[i] = toErrorResponse(item)
}
response.OkWithDetailed(response.PageResult{
List: result,
Total: total,
Page: req.Page,
PageSize: req.PageSize,
}, "获取成功", c)
}
// GetSysErrorSolution 触发AI处理错误日志
func (e *ErrorApi) GetSysErrorSolution(c *gin.Context) {
id := c.Query("id")
if id == "" {
response.FailWithMessage("缺少参数: id", c)
return
}
if err := errorUsecase.GetSysErrorSolution(c.Request.Context(), id); err != nil {
response.FailWithMessage("处理触发失败:"+err.Error(), c)
return
}
response.OkWithMessage("已提交至AI处理", c)
}
// toErrorResponse 转换错误日志响应
func toErrorResponse(e *system.SysError) map[string]interface{} {
return map[string]interface{}{
"id": e.ID,
"form": e.Form,
"info": e.Info,
"level": e.Level,
"solution": e.Solution,
"status": e.Status,
"createdAt": e.CreatedAt,
"updatedAt": e.UpdatedAt,
}
}