fix(backend): fixed user registration
This commit is contained in:
@@ -3,6 +3,7 @@ package api
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"gitea.mrixs.me/minecraft-platform/backend/internal/core"
|
||||
@@ -21,8 +22,14 @@ func (h *UserHandler) Register(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// --- ДОБАВЛЕНО ЛОГИРОВАНИЕ ---
|
||||
log.Printf("[Handler] Received registration request for username: '%s', email: '%s'", req.Username, req.Email)
|
||||
|
||||
err := h.Service.RegisterNewUser(r.Context(), req)
|
||||
if err != nil {
|
||||
// --- ДОБАВЛЕНО ЛОГИРОВАНИЕ ОШИБКИ ---
|
||||
log.Printf("[Handler] Service returned error: %v", err)
|
||||
|
||||
switch {
|
||||
case errors.Is(err, database.ErrUserExists):
|
||||
http.Error(w, err.Error(), http.StatusConflict)
|
||||
@@ -34,5 +41,7 @@ func (h *UserHandler) Register(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// --- ДОБАВЛЕНО ЛОГИРОВАНИЕ УСПЕХА ---
|
||||
log.Printf("[Handler] User '%s' registered successfully.", req.Username)
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"log"
|
||||
|
||||
"gitea.mrixs.me/minecraft-platform/backend/internal/models"
|
||||
"github.com/google/uuid"
|
||||
@@ -21,33 +22,47 @@ type UserRepository struct {
|
||||
|
||||
// CreateUserTx создает нового пользователя и его профиль в рамках одной транзакции
|
||||
func (r *UserRepository) CreateUserTx(ctx context.Context, user *models.User) error {
|
||||
log.Println("[DB] Beginning CreateUserTx transaction")
|
||||
tx, err := r.DB.Begin(ctx)
|
||||
if err != nil {
|
||||
log.Printf("[DB] ERROR: Failed to begin transaction: %v", err)
|
||||
return err
|
||||
}
|
||||
defer tx.Rollback(ctx)
|
||||
|
||||
log.Println("[DB] Checking if user exists...")
|
||||
var exists bool
|
||||
err = tx.QueryRow(ctx,
|
||||
"SELECT EXISTS(SELECT 1 FROM users WHERE username = $1 OR email = $2)").Scan(&exists)
|
||||
"SELECT EXISTS(SELECT 1 FROM users WHERE username = $1 OR email = $2)", user.Username, user.Email).Scan(&exists)
|
||||
if err != nil {
|
||||
log.Printf("[DB] ERROR: User existence check failed: %v", err)
|
||||
return err
|
||||
}
|
||||
if exists {
|
||||
log.Printf("[DB] User with username '%s' or email '%s' already exists.", user.Username, user.Email)
|
||||
return ErrUserExists
|
||||
}
|
||||
log.Println("[DB] User does not exist, proceeding.")
|
||||
|
||||
log.Println("[DB] Inserting into 'users' table...")
|
||||
var newUserID int
|
||||
err = tx.QueryRow(ctx, "INSERT INTO users (uuid, username, email, password_hash, role) VALUES ($1, $2, $3, $4, $5) RETURNING id").Scan(&newUserID)
|
||||
err = tx.QueryRow(ctx, "INSERT INTO users (uuid, username, email, password_hash, role) VALUES ($1, $2, $3, $4, $5) RETURNING id",
|
||||
user.UUID, user.Username, user.Email, user.PasswordHash, user.Role).Scan(&newUserID)
|
||||
if err != nil {
|
||||
log.Printf("[DB] ERROR: Insert into 'users' failed: %v", err)
|
||||
return err
|
||||
}
|
||||
log.Printf("[DB] Inserted into 'users' table successfully. New user ID: %d", newUserID)
|
||||
|
||||
_, err = tx.Exec(ctx, "INSERT INTO profiles (user_id) VALUES ($1)")
|
||||
log.Println("[DB] Inserting into 'profiles' table...")
|
||||
_, err = tx.Exec(ctx, "INSERT INTO profiles (user_id) VALUES ($1)", newUserID)
|
||||
if err != nil {
|
||||
log.Printf("[DB] ERROR: Insert into 'profiles' failed: %v", err)
|
||||
return err
|
||||
}
|
||||
log.Println("[DB] Inserted into 'profiles' table successfully.")
|
||||
|
||||
log.Println("[DB] Committing transaction...")
|
||||
return tx.Commit(ctx)
|
||||
}
|
||||
|
||||
@@ -122,8 +137,6 @@ var (
|
||||
)
|
||||
|
||||
// ValidateAccessToken проверяет, действителен ли токен для данного пользователя.
|
||||
// В нашей реализации мы просто проверяем его существование.
|
||||
// В более сложных системах здесь можно было бы проверять срок действия токена.
|
||||
func (r *UserRepository) ValidateAccessToken(ctx context.Context, token string, userUUID uuid.UUID) error {
|
||||
var exists bool
|
||||
query := `
|
||||
|
||||
Reference in New Issue
Block a user