utopiadeals-wms/src/main/java/com/utopia/wms/service/auth/AuthService.java

58 lines
2.1 KiB
Java

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);
}
}