保留最新代码,清除历史记录

This commit is contained in:
vipg
2025-10-09 18:19:57 +08:00
commit b44e40f25d
77 changed files with 4115 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
_ "github.com/lib/pq"
)
// DeleteAccountRequest 删除账号请求参数
type DeleteAccountRequest struct {
UserID string `json:"user_id" binding:"required"`
}
// DeleteAccountResponse 删除账号响应结构
type DeleteAccountResponse struct {
Success bool `json:"success"`
Message string `json:"message"`
}
var db *sql.DB
func main() {
log.Println("开始初始化应用程序")
// 初始化Gin引擎
r := gin.Default()
log.Println("Gin引擎初始化完成")
// 从环境变量获取数据库配置
dbHost := os.Getenv("DB_HOST")
dbPort := os.Getenv("DB_PORT")
dbUser := os.Getenv("DB_USER")
dbPassword := os.Getenv("DB_PASSWORD")
dbName := os.Getenv("DB_NAME")
log.Printf("加载数据库配置: host=%s, port=%s, user=%s, dbname=%s",
dbHost, dbPort, dbUser, dbName)
// 构建数据库连接字符串
connStr := fmt.Sprintf(
"host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
dbHost, dbPort, dbUser, dbPassword, dbName,
)
log.Println("数据库连接字符串构建完成")
var err error
db, err = sql.Open("postgres", connStr)
if err != nil {
log.Panicf("无法连接数据库: %v", err)
}
defer func() {
log.Println("关闭数据库连接")
if err := db.Close(); err != nil {
log.Printf("关闭数据库连接出错: %v", err)
}
}()
log.Println("数据库连接对象创建成功")
// 验证数据库连接
if err := db.Ping(); err != nil {
log.Panicf("数据库连接失败: %v", err)
}
log.Println("数据库连接验证成功")
// 注册删除账号接口
r.POST("/user/delete/account", deleteAccountHandler)
log.Println("已注册删除账号接口: POST /user/delete/account")
// 启动服务监听80端口
log.Println("服务启动在80端口")
if err := r.Run(":80"); err != nil {
log.Panicf("服务启动失败: %v", err)
}
}
// deleteAccountHandler 处理账号删除逻辑(逻辑删除)
func deleteAccountHandler(c *gin.Context) {
reqID := c.Request.Header.Get("X-Request-ID")
if reqID == "" {
reqID = fmt.Sprintf("req-%d", gin.Mode())
}
log.Printf("[%s] 收到删除账号请求客户端IP: %s", reqID, c.ClientIP())
var req DeleteAccountRequest
// 绑定并验证请求参数
if err := c.ShouldBindJSON(&req); err != nil {
log.Printf("[%s] 请求参数绑定失败: %v", reqID, err)
c.JSON(http.StatusBadRequest, DeleteAccountResponse{
Success: false,
Message: "请求参数错误: " + err.Error(),
})
return
}
log.Printf("[%s] 请求参数绑定成功用户ID: %s", reqID, req.UserID)
// 更新用户表中的deleted字段为true
updateQuery := `
UPDATE "user"
SET deleted = true
WHERE id = $1 AND deleted = false
`
log.Printf("[%s] 执行更新SQL: %s参数: %s", reqID, updateQuery, req.UserID)
result, err := db.Exec(updateQuery, req.UserID)
if err != nil {
log.Printf("[%s] 执行更新操作失败: %v", reqID, err)
c.JSON(http.StatusInternalServerError, DeleteAccountResponse{
Success: false,
Message: "删除账号失败: " + err.Error(),
})
return
}
log.Printf("[%s] 更新操作执行完成", reqID)
// 检查是否有记录被更新
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Printf("[%s] 获取影响行数失败: %v", reqID, err)
c.JSON(http.StatusInternalServerError, DeleteAccountResponse{
Success: false,
Message: "检查删除结果失败: " + err.Error(),
})
return
}
log.Printf("[%s] 更新操作影响行数: %d", reqID, rowsAffected)
if rowsAffected == 0 {
log.Printf("[%s] 未找到可删除的用户记录用户ID: %s", reqID, req.UserID)
c.JSON(http.StatusOK, DeleteAccountResponse{
Success: false,
Message: "用户不存在或已被删除",
})
return
}
// 删除成功
log.Printf("[%s] 账号删除成功用户ID: %s", reqID, req.UserID)
c.JSON(http.StatusOK, DeleteAccountResponse{
Success: true,
Message: "账号删除成功。",
})
}