package ru.mcs.diary.auth;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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 org.springframework.transaction.annotation.Transactional;
import ru.mcs.diary.parent.Parent;
import ru.mcs.diary.parent.ParentRepository;
import ru.mcs.diary.teacher.Teacher;
import ru.mcs.diary.teacher.TeacherRepository;
import java.util.Optional;
@Slf4j
@Service
@RequiredArgsConstructor
public class CustomUserDetailsService implements UserDetailsService {
private final TeacherRepository teacherRepository;
private final ParentRepository parentRepository;
@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
log.debug("Attempting to load user by email: {}", email);
// Сначала ищем среди преподавателей
Optional<Teacher> teacher = teacherRepository.findByEmail(email);
if (teacher.isPresent()) {
log.debug("Found teacher: {}", email);
return new CustomUserDetails(teacher.get());
}
// Затем ищем среди родителей (только активированных)
Optional<Parent> parent = parentRepository.findByEmailAndEnabledTrue(email);
if (parent.isPresent()) {
log.debug("Found parent: {}", email);
return new CustomUserDetails(parent.get());
}
log.warn("User not found: {}", email);
throw new UsernameNotFoundException("Пользователь не найден: " + email);
}
}