47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"sql-platform/internal/model"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// GET /api/v1/audit-logs
|
|
func ListAuditLogs(c *gin.Context) {
|
|
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
|
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
|
|
if page < 1 {
|
|
page = 1
|
|
}
|
|
if pageSize < 1 || pageSize > 100 {
|
|
pageSize = 20
|
|
}
|
|
|
|
var total int64
|
|
query := model.DB.Model(&model.AuditLog{})
|
|
if action := c.Query("action"); action != "" {
|
|
query = query.Where("action = ?", action)
|
|
}
|
|
if targetType := c.Query("target_type"); targetType != "" {
|
|
query = query.Where("target_type = ?", targetType)
|
|
}
|
|
if resultStatus := c.Query("result_status"); resultStatus != "" {
|
|
query = query.Where("result_status = ?", resultStatus)
|
|
}
|
|
query.Count(&total)
|
|
|
|
var logs []model.AuditLog
|
|
offset := (page - 1) * pageSize
|
|
query.Order("id DESC").Offset(offset).Limit(pageSize).Find(&logs)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"items": logs,
|
|
"total": total,
|
|
"page": page,
|
|
"page_size": pageSize,
|
|
})
|
|
}
|