优化页面、修复BUG

This commit is contained in:
李琦
2026-06-24 17:06:22 +08:00
parent 3f653bc336
commit d5ff40e4d3
38 changed files with 1507 additions and 354 deletions

View File

@@ -0,0 +1,83 @@
package handlers
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/niangaodev/art-code/models"
"github.com/niangaodev/art-code/repositories"
"github.com/niangaodev/art-code/utils"
)
func GetCodeTypes(c *gin.Context) {
list, err := repositories.GetCodeTypes()
if err != nil {
utils.ServerError(c, err)
return
}
utils.Success(c, repositories.BuildCodeTypesResponse(list))
}
func AdminGetCodeTypes(c *gin.Context) {
GetCodeTypes(c)
}
func AdminCreateCodeType(c *gin.Context) {
var ct models.CodeType
if err := c.ShouldBindJSON(&ct); err != nil {
utils.Error(c, 400, "Invalid request")
return
}
if ct.Name == "" {
utils.Error(c, 400, "Name is required")
return
}
if err := repositories.CreateCodeType(&ct); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Code type created", repositories.BuildCodeTypeResponse(&ct))
}
func AdminUpdateCodeType(c *gin.Context) {
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid ID")
return
}
var ct models.CodeType
if err := c.ShouldBindJSON(&ct); err != nil {
utils.Error(c, 400, "Invalid request")
return
}
ct.ID = id
if err := repositories.UpdateCodeType(&ct); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Code type updated", nil)
}
func AdminDeleteCodeType(c *gin.Context) {
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid ID")
return
}
count, err := repositories.CountSnippetsByCodeTypeID(id)
if err != nil {
utils.ServerError(c, err)
return
}
if count > 0 {
utils.Error(c, 400, "Cannot delete: snippets are using this code type")
return
}
if err := repositories.DeleteCodeType(id); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "Code type deleted", nil)
}

View File

@@ -12,7 +12,7 @@ import (
func AdminGetRecentActivities(c *gin.Context) {
// 获取最近10条操作日志
logs, _, err := repositories.GetOperationLogs(1, 10)
logs, _, err := repositories.GetOperationLogs(1, 10, repositories.OperationLogFilter{})
if err != nil {
utils.ServerError(c, err)
return
@@ -58,11 +58,9 @@ func AdminGetRecentActivities(c *gin.Context) {
// 获取操作日志列表
func AdminGetOperationLogs(c *gin.Context) {
// 获取分页参数
page := 1
pageSize := 10
// 从查询参数中获取分页信息
if c.Query("page") != "" {
if p, err := strconv.Atoi(c.Query("page")); err == nil {
page = p
@@ -75,8 +73,24 @@ func AdminGetOperationLogs(c *gin.Context) {
}
}
// 获取操作日志
logs, total, err := repositories.GetOperationLogs(page, pageSize)
filter := repositories.OperationLogFilter{
Action: c.Query("action"),
Method: c.Query("method"),
StartDate: c.Query("startDate"),
EndDate: c.Query("endDate"),
}
if statusStr := c.Query("status"); statusStr != "" {
if s, err := strconv.Atoi(statusStr); err == nil {
filter.Status = s
}
}
if userIDStr := c.Query("userId"); userIDStr != "" {
if uid, err := strconv.ParseUint(userIDStr, 10, 32); err == nil {
filter.UserID = uint(uid)
}
}
logs, total, err := repositories.GetOperationLogs(page, pageSize, filter)
if err != nil {
utils.ServerError(c, err)
return
@@ -145,8 +159,15 @@ func AdminGetAccessLogs(c *gin.Context) {
}
}
filter := repositories.AccessLogFilter{
Path: c.Query("path"),
Region: c.Query("region"),
StartDate: c.Query("startDate"),
EndDate: c.Query("endDate"),
}
// 获取访问日志
logs, total, err := repositories.GetAccessLogs(page, pageSize, nil)
logs, total, err := repositories.GetAccessLogs(page, pageSize, nil, filter)
if err != nil {
utils.ServerError(c, err)
return

View File

@@ -254,8 +254,10 @@ func AdminCreatePost(c *gin.Context) {
// 保存历史记录
userID, _ := c.Get("userID")
if err := repositories.SavePostHistory(&post, userID.(uint)); err != nil {
log.Printf("Error saving post history: %v", err)
if saved, err := repositories.GetPostByIDAdmin(post.ID); err == nil && saved != nil {
if err := repositories.SavePostHistory(saved, userID.(uint)); err != nil {
log.Printf("Error saving post history: %v", err)
}
}
utils.SuccessWithMsg(c, "Post created successfully", gin.H{"id": post.ID})
@@ -287,8 +289,10 @@ func AdminUpdatePost(c *gin.Context) {
// 保存历史记录
userID, _ := c.Get("userID")
if err := repositories.SavePostHistory(&post, userID.(uint)); err != nil {
log.Printf("Error saving post history: %v", err)
if saved, err := repositories.GetPostByIDAdmin(postID); err == nil && saved != nil {
if err := repositories.SavePostHistory(saved, userID.(uint)); err != nil {
log.Printf("Error saving post history: %v", err)
}
}
utils.SuccessWithMsg(c, "Post updated successfully", nil)
@@ -319,6 +323,11 @@ func AdminUpdatePostRelations(c *gin.Context) {
return
}
userID, _ := c.Get("userID")
if saved, err := repositories.GetPostByIDAdmin(postID); err == nil && saved != nil {
_ = repositories.SavePostHistory(saved, userID.(uint))
}
utils.SuccessWithMsg(c, "Post relations updated successfully", nil)
}
@@ -344,6 +353,11 @@ func AdminTogglePostStatus(c *gin.Context) {
return
}
userID, _ := c.Get("userID")
if saved, err := repositories.GetPostByIDAdmin(postID); err == nil && saved != nil {
_ = repositories.SavePostHistory(saved, userID.(uint))
}
utils.SuccessWithMsg(c, "Post status updated successfully", nil)
}

View File

@@ -79,6 +79,8 @@ func AdminCreateSnippet(c *gin.Context) {
return
}
syncSnippetTypeFromCodeType(&snippet)
if err := repositories.CreateSnippet(&snippet); err != nil {
utils.ServerError(c, err)
return
@@ -98,6 +100,7 @@ func AdminUpdateSnippet(c *gin.Context) {
}
snippet.ID = idStr
syncSnippetTypeFromCodeType(&snippet)
if err := repositories.UpdateSnippet(&snippet); err != nil {
utils.ServerError(c, err)
@@ -107,6 +110,16 @@ func AdminUpdateSnippet(c *gin.Context) {
utils.SuccessWithMsg(c, "Snippet updated successfully", nil)
}
func syncSnippetTypeFromCodeType(snippet *models.Snippet) {
if snippet.CodeTypeID == 0 {
return
}
ct, err := repositories.GetCodeTypeByID(snippet.CodeTypeID)
if err == nil && ct != nil {
snippet.Type = ct.Name
}
}
// AdminDeleteSnippet 删除代码片段
func AdminDeleteSnippet(c *gin.Context) {
idStr := c.Param("id")

View File

@@ -15,7 +15,12 @@ func AdminGetUsers(c *gin.Context) {
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
users, total, err := repositories.GetUsers(page, pageSize)
keyword := c.Query("keyword")
if keyword == "" {
keyword = c.Query("q")
}
users, total, err := repositories.GetUsers(page, pageSize, keyword)
if err != nil {
utils.ServerError(c, err)
return