package users_repo import ( "context" "errors" "github.com/jackc/pgx/v5/pgxpool" ) var ( ErrUserNotFound = errors.New("Пользователь не найден") ) type UsersRepo struct { pool *pgxpool.Pool } func NewUserRepo(pool *pgxpool.Pool) *UsersRepo { return &UsersRepo{ pool: pool, } } func (s *UsersRepo) AddUser( ctx context.Context, username string, email string, passwordHash string, role string, ) error { tag, err := s.pool.Exec( ctx, `INSERT INTO users (username, email, password_hash, role) SELECT $1, $2, $3, $4 WHERE NOT EXISTS ( SELECT 1 FROM users WHERE username = $5 OR email = $6 )`, username, email, passwordHash, role, username, email, ) if err != nil { return err } if tag.RowsAffected() == 0 { return errors.New("username или email уже используется") } return nil } func (s *UsersRepo) UpdateUserPassword( ctx context.Context, email string, passwordHash string, ) error { tag, err := s.pool.Exec( ctx, `UPDATE users SET password_hash = $1 WHERE email = $2`, passwordHash, email, ) if err != nil { return err } if tag.RowsAffected() == 0 { return ErrUserNotFound } return nil }