import { EmailAddress } from '../../domain/value-objects/EmailAddress'; import { UserId } from '../../domain/value-objects/UserId'; import { User } from '../../domain/entities/User'; import { IAuthRepository } from '../../domain/repositories/IAuthRepository'; import { IPasswordHashingService } from '../../domain/services/PasswordHashingService'; /** * Application Use Case: SignupUseCase * * Handles user registration. */ export class SignupUseCase { constructor( private authRepo: IAuthRepository, private passwordService: IPasswordHashingService ) {} async execute(email: string, password: string, displayName: string): Promise { const emailVO = EmailAddress.create(email); // Check if user already exists const existingUser = await this.authRepo.findByEmail(emailVO); if (existingUser) { throw new Error('User already exists'); } const hashedPassword = await this.passwordService.hash(password); const passwordHash = await import('../../domain/value-objects/PasswordHash').then(m => m.PasswordHash.fromHash(hashedPassword)); const userId = UserId.create(); const user = User.create({ id: userId, displayName, email: emailVO.value, passwordHash, }); await this.authRepo.save(user); return user; } }