Initial commit: 网络验证平台
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package developer
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"verification-platform-backend/internal/database"
|
||||
"verification-platform-backend/internal/model"
|
||||
"verification-platform-backend/pkg/response"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func SetupLogRoutes(r *gin.RouterGroup) {
|
||||
logs := r.Group("/logs")
|
||||
{
|
||||
logs.GET("", handleGetLogs)
|
||||
}
|
||||
}
|
||||
|
||||
func handleGetLogs(c *gin.Context) {
|
||||
userID := c.GetUint("user_id")
|
||||
|
||||
var appIDs []uint
|
||||
database.DB.Model(&model.Application{}).Where("user_id = ?", userID).Pluck("id", &appIDs)
|
||||
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
|
||||
logType := c.Query("type")
|
||||
status := c.Query("status")
|
||||
applicationID := c.Query("application_id")
|
||||
startDate := c.Query("start_date")
|
||||
endDate := c.Query("end_date")
|
||||
search := c.Query("search")
|
||||
|
||||
var logs []model.Log
|
||||
var total int64
|
||||
|
||||
query := database.DB.Model(&model.Log{})
|
||||
|
||||
if len(appIDs) > 0 {
|
||||
query = query.Where("application_id IN ? OR user_id = ?", appIDs, userID)
|
||||
} else {
|
||||
query = query.Where("user_id = ?", userID)
|
||||
}
|
||||
|
||||
if logType != "" && logType != "all" {
|
||||
query = query.Where("log_type = ?", logType)
|
||||
}
|
||||
|
||||
if status != "" && status != "all" {
|
||||
query = query.Where("status = ?", status)
|
||||
}
|
||||
|
||||
if applicationID != "" && applicationID != "all" {
|
||||
query = query.Where("application_id = ?", applicationID)
|
||||
}
|
||||
|
||||
if startDate != "" {
|
||||
query = query.Where("created_at >= ?", startDate+" 00:00:00")
|
||||
}
|
||||
|
||||
if endDate != "" {
|
||||
query = query.Where("created_at <= ?", endDate+" 23:59:59")
|
||||
}
|
||||
|
||||
if search != "" {
|
||||
query = query.Where("action LIKE ? OR details LIKE ? OR resource LIKE ?", "%"+search+"%", "%"+search+"%", "%"+search+"%")
|
||||
}
|
||||
|
||||
query.Count(&total)
|
||||
|
||||
offset := (page - 1) * pageSize
|
||||
if err := query.Preload("User").Preload("Application").Preload("AppUser").Order("created_at DESC").Offset(offset).Limit(pageSize).Find(&logs).Error; err != nil {
|
||||
response.Error(c, 500, "获取日志失败")
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, gin.H{
|
||||
"logs": logs,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"page_size": pageSize,
|
||||
"total_page": (total + int64(pageSize) - 1) / int64(pageSize),
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user