# Code coverage report for application/auth/commands/RegisterUserCommandHandler.js

# All files / application/auth/commands RegisterUserCommandHandler.js

0% Statements 0/25
0% Branches 0/13
0% Functions 0/3
0% Lines 0/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84

     const bcrypt = require('bcryptjs');
    const JwtService = require('../../services/JwtService');

    const jwtService = new JwtService();

    /**
     * Register User Command Handler
     * Handles user registration business logic
     */
    class RegisterUserCommandHandler {
      constructor(prisma, emailService) {
        this.prisma = prisma;
        this.emailService = emailService;
      }

      /**
       * Execute user registration command
       * @param {RegisterUserCommand} command
       * @returns {Promise<Object>} { user, token }
       */
      async handle(command) {
        const { name, email, password } = command;

        // Validáció
        if (!name || !email || !password) {
          throw new Error('Name, email and password are required');
        }

        if (password.length < 6) {
          throw new Error('Password must be at least 6 characters long');
        }

        // Email formátum ellenőrzés
        const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        if (!emailRegex.test(email)) {
          throw new Error('Invalid email format');
        }

        // Ellenőrizzük, hogy létezik-e már a user
        const existingUser = await this.prisma.user.findUnique({
          where: { email }
        });

        if (existingUser) {
          throw new Error('User with this email already exists');
        }

        // Jelszó hashelése (bcrypt)
        const hashedPassword = await bcrypt.hash(password, 10);

        // User létrehozása
        const user = await this.prisma.user.create({
          data: {
            name,
            email,
            password: hashedPassword
          }
        });

        // Welcome email küldése (async, nem várunk rá)
        if (this.emailService) {
          this.emailService.sendWelcomeEmail(email, name).catch(err => {
            console.error('❌ Failed to send welcome email:', err.message);
          });
        }

        // JWT token generálása
        const token = jwtService.generateToken({
          userId: user.id,
          email: user.email
        });

        // Jelszót ne adjuk vissza a response-ban
        const { password: _, ...userWithoutPassword } = user;

        return {
          user: userWithoutPassword,
          token
        };
      }
    }

    module.exports = RegisterUserCommandHandler;