package com.recipeapp.auth; import com.recipeapp.auth.entity.UserAccount; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import java.util.List; @Service public class CustomUserDetailsService implements UserDetailsService { private final UserAccountRepository userAccountRepository; public CustomUserDetailsService(UserAccountRepository userAccountRepository) { this.userAccountRepository = userAccountRepository; } @Override public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { UserAccount account = userAccountRepository.findByEmailIgnoreCase(email) .orElseThrow(() -> new UsernameNotFoundException("User not found: " + email)); if (!account.isActive()) { throw new UsernameNotFoundException("Account is deactivated: " + email); } var authorities = List.of(new SimpleGrantedAuthority("ROLE_" + account.getSystemRole().toUpperCase())); return new User(account.getEmail(), account.getPasswordHash(), authorities); } }