package com.utopia.wms.service.auth; import com.utopia.wms.dto.auth.AuthRequest; import com.utopia.wms.dto.auth.AuthResponse; import com.utopia.wms.dto.auth.RegisterRequest; import com.utopia.wms.model.auth.Role; import com.utopia.wms.model.user.User; import com.utopia.wms.repository.auth.RoleRepository; import com.utopia.wms.repository.user.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class AuthService { private final UserRepository userRepository; private final RoleRepository roleRepository; private final PasswordEncoder passwordEncoder; private final JwtService jwtService; private final AuthenticationManager authenticationManager; public AuthResponse register(RegisterRequest request) { // 1. Get the ADMIN role (seeded via Liquibase) Role adminRole = roleRepository.findByName("ADMIN") .orElseThrow(() -> new RuntimeException("Default Role not found")); // 2. Create the User User user = new User(); user.setEmail(request.email()); user.setPassword(passwordEncoder.encode(request.password())); user.setTenantId(request.tenantId()); user.setRole(adminRole); user.setEnabled(true); userRepository.save(user); // 3. Generate Token String jwtToken = jwtService.generateToken(user, user.getTenantId()); return new AuthResponse(jwtToken); } public AuthResponse authenticate(AuthRequest request) { authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(request.email(), request.password()) ); User user = userRepository.findByEmail(request.email()) .orElseThrow(); String jwtToken = jwtService.generateToken(user, user.getTenantId()); return new AuthResponse(jwtToken); } }