small fixes
This commit is contained in:
@@ -5,7 +5,7 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
_ "github.com/jackc/pgx/v5/stdlib" // Регистрируем pgx драйвер
|
||||
_ "github.com/jackc/pgx/v5/stdlib"
|
||||
)
|
||||
|
||||
// Connect устанавливает соединение с базой данных PostgreSQL
|
||||
@@ -20,7 +20,6 @@ func Connect() *sql.DB {
|
||||
log.Fatalf("Unable to connect to database: %v\n", err)
|
||||
}
|
||||
|
||||
// Проверяем, что соединение действительно установлено
|
||||
if err = db.Ping(); err != nil {
|
||||
log.Fatalf("Unable to ping database: %v\n", err)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user