golang-template/internal/handlers/signup.go

47 lines
1.1 KiB
Go

package handlers
import (
"encoding/json"
"go-backend/internal/database/sqlc"
"net/http"
)
type SignUpRequest struct {
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
}
func (h *Handler) SignUpHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
var req SignUpRequest
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&req)
if err != nil {
http.Error(w, "Invalid request body", http.StatusBadRequest)
return
}
if req.Username == "" || req.Password == "" || req.Email == "" {
http.Error(w, "Invalid request body", http.StatusBadRequest)
return
}
user, err := h.users.FindByUsername(r.Context(), req.Username)
if err != nil {
http.Error(w, "Internal server error", http.StatusInternalServerError)
}
if user != nil {
http.Error(w, "Username already taken", http.StatusBadRequest)
}
user, err = h.users.CreateUser(r.Context(), sqlc.InsertUserParams{Username: req.Username, Email: req.Email, PasswordHash: req.Password})
}