small fixes

This commit is contained in:
2025-06-18 09:01:14 +03:00
parent 42f2b68848
commit 5e609017f0
15 changed files with 55 additions and 108 deletions

View File

@@ -23,10 +23,8 @@ func (r *UserRepository) CreateUserTx(ctx context.Context, user *models.User) er
if err != nil {
return err
}
// Гарантируем откат транзакции в случае любой ошибки
defer tx.Rollback()
// Шаг 4 из ТЗ: Проверка уникальности
var exists bool
err = tx.QueryRowContext(ctx,
"SELECT EXISTS(SELECT 1 FROM users WHERE username = $1 OR email = $2)",
@@ -38,7 +36,6 @@ func (r *UserRepository) CreateUserTx(ctx context.Context, user *models.User) er
return ErrUserExists
}
// Шаг 7 из ТЗ: INSERT в таблицу users. Получаем ID нового пользователя.
var newUserID int
err = tx.QueryRowContext(ctx,
"INSERT INTO users (uuid, username, email, password_hash, role) VALUES ($1, $2, $3, $4, $5) RETURNING id",
@@ -48,22 +45,18 @@ func (r *UserRepository) CreateUserTx(ctx context.Context, user *models.User) er
return err
}
// Шаг 9 из ТЗ: INSERT в таблицу profiles
_, err = tx.ExecContext(ctx, "INSERT INTO profiles (user_id) VALUES ($1)", newUserID)
if err != nil {
return err
}
// Шаг 10 из ТЗ: Коммитим транзакцию
return tx.Commit()
}
var (
ErrUserNotFound = errors.New("user not found") // Новая ошибка
ErrUserNotFound = errors.New("user not found")
)
// ...
// GetUserByUsername находит пользователя по его имени.
// Возвращает полную структуру User, включая хеш пароля для проверки.
func (r *UserRepository) GetUserByUsername(ctx context.Context, username string) (*models.User, error) {
@@ -97,7 +90,7 @@ func (r *UserRepository) CreateAccessToken(ctx context.Context, userID int, acce
func (r *UserRepository) GetProfileByUUID(ctx context.Context, userUUID uuid.UUID) (*models.User, *models.Profile, error) {
user := &models.User{UUID: userUUID}
profile := &models.Profile{}
var skinHash, capeHash sql.NullString // Используем NullString для полей, которые могут быть NULL
var skinHash, capeHash sql.NullString
query := `
SELECT u.id, u.username, p.skin_hash, p.cape_hash
@@ -127,8 +120,7 @@ func (r *UserRepository) GetProfileByUUID(ctx context.Context, userUUID uuid.UUI
}
var (
// ...
ErrTokenNotFound = errors.New("access token not found or invalid") // Новая ошибка
ErrTokenNotFound = errors.New("access token not found or invalid")
)
// ValidateAccessToken проверяет, действителен ли токен для данного пользователя.
@@ -169,7 +161,7 @@ func (r *UserRepository) UpdateSkinHash(ctx context.Context, userID int, skinHas
return err
}
if rowsAffected == 0 {
return ErrUserNotFound // Если профиль для user_id не найден
return ErrUserNotFound
}
return nil
@@ -180,7 +172,6 @@ func (r *UserRepository) GetUserByLogin(ctx context.Context, login string) (*mod
user := &models.User{}
var userUUID string
// Ищем по username ИЛИ по email
query := "SELECT id, uuid, username, email, password_hash, role, created_at, updated_at FROM users WHERE username = $1 OR email = $1"
err := r.DB.QueryRowContext(ctx, query, login).Scan(
&user.ID, &userUUID, &user.Username, &user.Email, &user.PasswordHash, &user.Role, &user.CreatedAt, &user.UpdatedAt,