Files
nl-blogs/server/handlers/search_log.go
2026-06-24 16:50:04 +08:00

83 lines
1.9 KiB
Go

package handlers
import (
"strconv"
"github.com/gin-gonic/gin"
"github.com/niangaodev/art-code/models"
"github.com/niangaodev/art-code/repositories"
"github.com/niangaodev/art-code/utils"
)
// AdminGetSearchLogs 获取搜索记录列表(后台)
func AdminGetSearchLogs(c *gin.Context) {
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "20"))
logs, total, err := repositories.GetSearchLogs(page, pageSize)
if err != nil {
utils.ServerError(c, err)
return
}
res := gin.H{
"list": logs,
"total": total,
"page": page,
"size": pageSize,
}
utils.Success(c, res)
}
// AdminDeleteSearchLog 删除搜索记录
func AdminDeleteSearchLog(c *gin.Context) {
idStr := c.Param("id")
var id uint
if _, err := strconv.ParseUint(idStr, 10, 32); err != nil {
utils.Error(c, 400, "Invalid search log ID")
return
}
if err := repositories.DeleteSearchLog(id); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Search log deleted successfully", nil)
}
// GetHotSearches 获取热门搜索关键词(公开)
func GetHotSearches(c *gin.Context) {
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "10"))
days, _ := strconv.Atoi(c.DefaultQuery("days", "30"))
keywords, err := repositories.GetHotKeywords(limit, days)
if err != nil {
utils.ServerError(c, err)
return
}
if keywords == nil {
keywords = []repositories.HotKeyword{}
}
utils.Success(c, keywords)
}
// LogSearch 记录搜索(异步,不阻塞)
func LogSearch(keyword, searchType, userIP, userLocation string) {
go func() {
logEntry := &models.SearchLog{
Keyword: keyword,
SearchType: searchType,
UserIP: userIP,
UserLocation: userLocation,
}
if err := repositories.CreateSearchLog(logEntry); err != nil {
// Log error but don't fail
// log.Printf("Failed to create search log: %v", err)
}
}()
}