102 lines
2.4 KiB
Go
102 lines
2.4 KiB
Go
// Filename: internal/handlers/log_handler.go
|
|
package handlers
|
|
|
|
import (
|
|
"gemini-balancer/internal/errors"
|
|
"gemini-balancer/internal/response"
|
|
"gemini-balancer/internal/service"
|
|
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type LogHandler struct {
|
|
logService *service.LogService
|
|
}
|
|
|
|
func NewLogHandler(logService *service.LogService) *LogHandler {
|
|
return &LogHandler{logService: logService}
|
|
}
|
|
|
|
func (h *LogHandler) GetLogs(c *gin.Context) {
|
|
queryParams := make(map[string]string)
|
|
for key, values := range c.Request.URL.Query() {
|
|
if len(values) > 0 {
|
|
queryParams[key] = values[0]
|
|
}
|
|
}
|
|
params, err := service.ParseLogQueryParams(queryParams)
|
|
if err != nil {
|
|
response.Error(c, errors.ErrBadRequest)
|
|
return
|
|
}
|
|
logs, total, err := h.logService.GetLogs(c.Request.Context(), params)
|
|
if err != nil {
|
|
response.Error(c, errors.ErrDatabase)
|
|
return
|
|
}
|
|
response.Success(c, gin.H{
|
|
"items": logs,
|
|
"total": total,
|
|
"page": params.Page,
|
|
"page_size": params.PageSize,
|
|
})
|
|
}
|
|
|
|
// DeleteLogs 删除选定日志 DELETE /admin/logs?ids=1,2,3
|
|
func (h *LogHandler) DeleteLogs(c *gin.Context) {
|
|
idsStr := c.Query("ids")
|
|
if idsStr == "" {
|
|
response.Error(c, errors.ErrBadRequest)
|
|
return
|
|
}
|
|
|
|
var ids []uint
|
|
for _, idStr := range strings.Split(idsStr, ",") {
|
|
if id, err := strconv.ParseUint(strings.TrimSpace(idStr), 10, 32); err == nil {
|
|
ids = append(ids, uint(id))
|
|
}
|
|
}
|
|
|
|
if len(ids) == 0 {
|
|
response.Error(c, errors.ErrBadRequest)
|
|
return
|
|
}
|
|
|
|
if err := h.logService.DeleteLogs(c.Request.Context(), ids); err != nil {
|
|
response.Error(c, errors.ErrDatabase)
|
|
return
|
|
}
|
|
|
|
response.Success(c, gin.H{"deleted": len(ids)})
|
|
}
|
|
|
|
// DeleteAllLogs 删除全部日志 DELETE /admin/logs/all
|
|
func (h *LogHandler) DeleteAllLogs(c *gin.Context) {
|
|
if err := h.logService.DeleteAllLogs(c.Request.Context()); err != nil {
|
|
response.Error(c, errors.ErrDatabase)
|
|
return
|
|
}
|
|
response.Success(c, gin.H{"message": "all logs deleted"})
|
|
}
|
|
|
|
// DeleteOldLogs 删除旧日志 DELETE /admin/logs/old?days=30
|
|
func (h *LogHandler) DeleteOldLogs(c *gin.Context) {
|
|
daysStr := c.Query("days")
|
|
days, err := strconv.Atoi(daysStr)
|
|
if err != nil || days <= 0 {
|
|
response.Error(c, errors.ErrBadRequest)
|
|
return
|
|
}
|
|
|
|
deleted, err := h.logService.DeleteOldLogs(c.Request.Context(), days)
|
|
if err != nil {
|
|
response.Error(c, errors.ErrDatabase)
|
|
return
|
|
}
|
|
|
|
response.Success(c, gin.H{"deleted": deleted, "days": days})
|
|
}
|