diff --git a/internal/api/user_handler.go b/internal/api/user_handler.go index 02f384f..99e3631 100644 --- a/internal/api/user_handler.go +++ b/internal/api/user_handler.go @@ -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) } diff --git a/internal/database/user_repository.go b/internal/database/user_repository.go index 1e85304..f2bf4b9 100644 --- a/internal/database/user_repository.go +++ b/internal/database/user_repository.go @@ -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 := `