优化页面、修复BUG
This commit is contained in:
161
server/handlers/user_profile.go
Normal file
161
server/handlers/user_profile.go
Normal file
@@ -0,0 +1,161 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/niangaodev/art-code/models"
|
||||
"github.com/niangaodev/art-code/repositories"
|
||||
"github.com/niangaodev/art-code/utils"
|
||||
)
|
||||
|
||||
// GetUserProfile 获取公开用户资料
|
||||
func GetUserProfile(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
utils.Error(c, 400, "Invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
user, err := repositories.GetUserByID(uint(id))
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
if user == nil || user.IsActive != 1 {
|
||||
utils.Error(c, 404, "User not found")
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(c, repositories.BuildUserPublicProfile(user))
|
||||
}
|
||||
|
||||
// GetUserPosts 获取用户已发布文章
|
||||
func GetUserPosts(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
utils.Error(c, 400, "Invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
sort := c.DefaultQuery("sort", "recent")
|
||||
if sort != "recent" && sort != "popular" {
|
||||
sort = "recent"
|
||||
}
|
||||
|
||||
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "5"))
|
||||
|
||||
user, err := repositories.GetUserByID(uint(id))
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
if user == nil || user.IsActive != 1 {
|
||||
utils.Error(c, 404, "User not found")
|
||||
return
|
||||
}
|
||||
|
||||
posts, err := repositories.GetPostsByUserID(uint(id), sort, limit)
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(c, repositories.BuildPostsResponse(posts))
|
||||
}
|
||||
|
||||
// UpdateCurrentUser 更新当前用户资料
|
||||
func UpdateCurrentUser(c *gin.Context) {
|
||||
userID, exists := c.Get("userID")
|
||||
if !exists {
|
||||
utils.Error(c, 401, "Unauthorized")
|
||||
return
|
||||
}
|
||||
|
||||
var req models.UpdateProfileRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
utils.Error(c, 400, "Invalid request")
|
||||
return
|
||||
}
|
||||
|
||||
if err := repositories.UpdateCurrentUserProfile(userID.(uint), &req); err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := repositories.GetUserByID(userID.(uint))
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(c, repositories.BuildUserResponse(user))
|
||||
}
|
||||
|
||||
// UpdateCurrentUserPassword 修改当前用户密码
|
||||
func UpdateCurrentUserPassword(c *gin.Context) {
|
||||
userID, exists := c.Get("userID")
|
||||
if !exists {
|
||||
utils.Error(c, 401, "Unauthorized")
|
||||
return
|
||||
}
|
||||
|
||||
var req models.UpdatePasswordRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
utils.Error(c, 400, "Invalid request")
|
||||
return
|
||||
}
|
||||
|
||||
user, err := repositories.GetUserByID(userID.(uint))
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
if user == nil {
|
||||
utils.Error(c, 404, "User not found")
|
||||
return
|
||||
}
|
||||
|
||||
if !utils.CheckPasswordHash(req.OldPassword, user.PasswordHash) {
|
||||
utils.Error(c, 400, "原密码不正确")
|
||||
return
|
||||
}
|
||||
|
||||
hashedPassword, err := utils.HashPassword(req.NewPassword)
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := repositories.UpdateUserPassword(userID.(uint), hashedPassword); err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
utils.SuccessWithMsg(c, "Password updated successfully", nil)
|
||||
}
|
||||
|
||||
// AdminGetUserProfile 管理员查看用户公开资料(复用公开结构)
|
||||
func AdminGetUserProfile(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
var id uint
|
||||
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
|
||||
utils.Error(c, 400, "Invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
user, err := repositories.GetUserByID(id)
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
if user == nil {
|
||||
utils.Error(c, 404, "User not found")
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(c, repositories.BuildUserPublicProfile(user))
|
||||
}
|
||||
10
server/repositories/time_format.go
Normal file
10
server/repositories/time_format.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package repositories
|
||||
|
||||
import "time"
|
||||
|
||||
func formatTimestamp(ts int64) string {
|
||||
if ts == 0 {
|
||||
return ""
|
||||
}
|
||||
return time.Unix(ts, 0).Format("2006-01-02 15:04:05")
|
||||
}
|
||||
Reference in New Issue
Block a user