Professor update

This commit is contained in:
2025-11-05 12:49:26 +05:30
parent 6d46457973
commit 0df3fc6ae3
2 changed files with 168 additions and 109 deletions

View File

@ -214,90 +214,82 @@ public class ProfessorServiceImpl implements ProfessorService {
}
@Override
@Transactional
public Professor updateProfessor(UUID professorId, ProfessorDto professorDto) {
Professor professor = professorRepository.findByProfessorId(professorId)
.orElseThrow(() -> new RuntimeException("Professor not found with id: " + professorId));
@Transactional
public Professor updateProfessor(UUID professorId, ProfessorDto professorDto) {
Professor professor = professorRepository.findByProfessorId(professorId)
.orElseThrow(() -> new RuntimeException("Professor not found with id: " + professorId));
validateUpdateEmail(professorId, professorDto.getEmail());
validateUpdateEmail(professorId, professorDto.getEmail());
// Update basic fields
professor.setFirstName(professorDto.getFirstName());
professor.setLastName(professorDto.getLastName());
professor.setEmail(professorDto.getEmail());
professor.setDepartment(professorDto.getDepartment());
professor.setPosition(professorDto.getPosition());
professor.setOfficeLocation(professorDto.getOfficeLocation());
professor.setStatus(professorDto.getStatus());
professor.setCategory(professorDto.getCategory());
// Update extended fields
professor.setPhone(professorDto.getPhone());
professor.setSpecialty(professorDto.getSpecialty());
professor.setCertification(professorDto.getCertification());
professor.setTraining(professorDto.getTraining());
professor.setExperience(professorDto.getExperience());
professor.setDescription(professorDto.getDescription());
professor.setDesignation(professorDto.getDesignation());
professor.setWorkDays(professorDto.getWorkDays());
// Update basic fields
professor.setFirstName(professorDto.getFirstName());
professor.setLastName(professorDto.getLastName());
professor.setEmail(professorDto.getEmail());
professor.setDepartment(professorDto.getDepartment());
professor.setPosition(professorDto.getPosition());
professor.setOfficeLocation(professorDto.getOfficeLocation());
professor.setStatus(professorDto.getStatus());
professor.setCategory(professorDto.getCategory());
// Update extended fields
professor.setPhone(professorDto.getPhone());
professor.setSpecialty(professorDto.getSpecialty());
professor.setCertification(professorDto.getCertification());
professor.setTraining(professorDto.getTraining());
professor.setExperience(professorDto.getExperience());
professor.setDescription(professorDto.getDescription());
professor.setDesignation(professorDto.getDesignation());
professor.setWorkDays(professorDto.getWorkDays());
if (professorDto.getJoinDate() != null) {
professor.setJoinDate(professorDto.getJoinDate());
}
// Create a final reference for lambda expressions
final Professor professorRef = professor;
// Update skills - clear existing and add new ones
if (professor.getSkills() != null) {
professor.getSkills().clear();
}
if (professorDto.getSkills() != null && !professorDto.getSkills().isEmpty()) {
Set<ProfessorSkill> skills = professorDto.getSkills().stream()
.filter(skillDto -> skillDto.getName() != null && !skillDto.getName().trim().isEmpty())
.map(skillDto -> ProfessorSkill.builder()
.name(skillDto.getName().trim())
.level(skillDto.getLevel())
.professor(professorRef)
.build())
.collect(Collectors.toSet());
if (professor.getSkills() == null) {
professor.setSkills(new HashSet<>());
}
professor.getSkills().addAll(skills);
}
// Update awards - clear existing and add new ones
if (professor.getAwards() != null) {
professor.getAwards().clear();
}
if (professorDto.getAwards() != null && !professorDto.getAwards().isEmpty()) {
Set<ProfessorAward> awards = professorDto.getAwards().stream()
.filter(awardDto -> awardDto.getTitle() != null && !awardDto.getTitle().trim().isEmpty())
.map(awardDto -> ProfessorAward.builder()
.title(awardDto.getTitle().trim())
.year(awardDto.getYear())
.description(awardDto.getDescription())
.imageUrl(awardDto.getImageUrl())
.professor(professorRef)
.build())
.collect(Collectors.toSet());
if (professor.getAwards() == null) {
professor.setAwards(new HashSet<>());
}
professor.getAwards().addAll(awards);
}
Professor savedProfessor = professorRepository.save(professor);
// Handle profile image if provided
if (professorDto.getProfileImage() != null) {
saveProfileImage(savedProfessor, professorDto.getProfileImage());
}
return savedProfessor;
if (professorDto.getJoinDate() != null) {
professor.setJoinDate(professorDto.getJoinDate());
}
// Create a final reference for lambda expressions
final Professor professorRef = professor;
// Update skills - REPLACE the entire collection
if (professorDto.getSkills() != null && !professorDto.getSkills().isEmpty()) {
Set<ProfessorSkill> skills = professorDto.getSkills().stream()
.filter(skillDto -> skillDto.getName() != null && !skillDto.getName().trim().isEmpty())
.map(skillDto -> ProfessorSkill.builder()
.name(skillDto.getName().trim())
.level(skillDto.getLevel())
.professor(professorRef)
.build())
.collect(Collectors.toSet());
professor.setSkills(skills); // ✅ REPLACE instead of add
} else {
professor.setSkills(new HashSet<>()); // Clear if empty
}
// Update awards - REPLACE the entire collection
if (professorDto.getAwards() != null && !professorDto.getAwards().isEmpty()) {
Set<ProfessorAward> awards = professorDto.getAwards().stream()
.filter(awardDto -> awardDto.getTitle() != null && !awardDto.getTitle().trim().isEmpty())
.map(awardDto -> ProfessorAward.builder()
.title(awardDto.getTitle().trim())
.year(awardDto.getYear())
.description(awardDto.getDescription())
.imageUrl(awardDto.getImageUrl())
.professor(professorRef)
.build())
.collect(Collectors.toSet());
professor.setAwards(awards); // ✅ REPLACE instead of add
} else {
professor.setAwards(new HashSet<>()); // Clear if empty
}
Professor savedProfessor = professorRepository.save(professor);
// Handle profile image if provided
if (professorDto.getProfileImage() != null) {
saveProfileImage(savedProfessor, professorDto.getProfileImage());
}
return savedProfessor;
}
@Override
public void deleteProfessor(UUID professorId) {
Professor professorToBeDeleted = professorRepository