package auth import ( "task-track-backend/model" "github.com/gin-gonic/gin" "golang.org/x/crypto/bcrypt" ) type RegisterRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` Email string `json:"email" binding:"required"` } func (h *AuthHandler) Register(c *gin.Context) { var req RegisterRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"code": 400, "message": "Invalid request data", "error": err.Error()}) return } // 检查用户名是否已存在 var existingUser model.User if err := h.db.Where("username = ?", req.Username).First(&existingUser).Error; err == nil { c.JSON(409, gin.H{"code": 409, "message": "Username already exists"}) return } // 加密密码 hashedPassword, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) if err != nil { c.JSON(500, gin.H{"code": 500, "message": "Failed to hash password", "error": err.Error()}) return } user := model.User{ Username: req.Username, Password: string(hashedPassword), Email: req.Email, } // 创建用户 if err := h.db.Create(&user).Error; err != nil { c.JSON(500, gin.H{"code": 500, "message": "Failed to create user", "error": err.Error()}) return } c.JSON(201, gin.H{"code": 201, "message": "User created successfully", "data": user}) }