diff --git a/eeos/src/main/java/com/blackcompany/eeos/calendar/application/validator/CalendarValidator.java b/eeos/src/main/java/com/blackcompany/eeos/calendar/application/validator/CalendarValidator.java index 914df201..127fdc1d 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/calendar/application/validator/CalendarValidator.java +++ b/eeos/src/main/java/com/blackcompany/eeos/calendar/application/validator/CalendarValidator.java @@ -6,6 +6,7 @@ import com.blackcompany.eeos.calendar.application.model.CalendarModel; import com.blackcompany.eeos.calendar.application.model.CalendarType; import com.blackcompany.eeos.member.application.model.Department; +import com.blackcompany.eeos.member.application.repository.MemberRepository; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; @@ -15,9 +16,14 @@ @Component public class CalendarValidator { - private final Map> AVAILABLE = new HashMap<>(); + private final MemberRepository memberRepository; + private final Map> AVAILABLE; + + public CalendarValidator(MemberRepository memberRepository) { + this.memberRepository = memberRepository; + + AVAILABLE = new HashMap<>(); - public CalendarValidator() { final Set EVENT_AVAILABLE = Set.of(Department.EVENT, Department.PRESIDENT); final Set PRESENTATION_AVAILABLE = Set.of(Department.PRESIDENT); final Set ETC_AVAILABLE = @@ -34,7 +40,11 @@ public CalendarValidator() { } public void updateValidate(CalendarModel calendar, Long memberId) { - if (!calendar.isWriter(memberId)) throw new DeniedCalendarUpdateException(); + Department department = memberRepository.findById(memberId).getDepartment(); + + if (!isWritable(calendar.getType(), department)) { + throw new DeniedCalendarUpdateException(); + } } public void durationValidate(CalendarModel calendar) { @@ -46,13 +56,20 @@ public void durationValidate(CalendarModel calendar) { public void typeValidate(CalendarModel calendar, Department department) { CalendarType type = calendar.getType(); - Set departments = AVAILABLE.getOrDefault(type, Set.of()); - if (!departments.contains(department)) { + if (!isWritable(type, department)) { throw new DeniedCalendarTypeException(department); } } + /** 업데이트가 가능한지 여부 : 부서가 업데이트 기준이 된다. */ + private boolean isWritable(CalendarType type, Department department) { + Set updatable = AVAILABLE.getOrDefault(type, Set.of()); + + if (updatable.contains(department)) return true; + return false; + } + public void urlValidator(CalendarModel calendar) { String url = calendar.getUrl();