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) } // 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) } }() }