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: "账号删除成功。", }) }