diff --git a/src/main/java/com/ohdab/classroom/domain/Classroom.java b/src/main/java/com/ohdab/classroom/domain/Classroom.java index 90998f8b..fde41409 100644 --- a/src/main/java/com/ohdab/classroom/domain/Classroom.java +++ b/src/main/java/com/ohdab/classroom/domain/Classroom.java @@ -3,9 +3,11 @@ import com.ohdab.classroom.domain.classroomInfo.ClassroomInfo; import com.ohdab.classroom.exception.NoStudentException; import com.ohdab.core.baseentity.BaseEntity; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.student.studentid.StudentId; import com.ohdab.member.domain.teacher.teacherid.TeacherId; import com.ohdab.workbook.domain.workbookid.WorkbookId; +import io.jsonwebtoken.lang.Assert; import java.util.ArrayList; import java.util.List; import javax.persistence.*; @@ -41,48 +43,30 @@ public class Classroom extends BaseEntity { @Builder public Classroom(ClassroomInfo classroomInfo, TeacherId teacher) { - setClassroomInfo(classroomInfo); - setTeacher(teacher); - } - - private void setClassroomInfo(ClassroomInfo classroomInfo) { - if (classroomInfo == null) { - throw new IllegalStateException("ClassroomInfo cannot be null"); - } + Assert.notNull(classroomInfo, ExceptionEnum.IS_NULL.getMessage()); + Assert.notNull(teacher, ExceptionEnum.IS_NULL.getMessage()); this.classroomInfo = classroomInfo; - } - - private void setTeacher(TeacherId teacher) { - if (teacher == null) { - throw new IllegalStateException("Teacher cannot be null"); - } this.teacher = teacher; } public void addStudent(StudentId student) { - if (student == null) { - throw new IllegalStateException("Student cannot be null."); - } + Assert.notNull(student, ExceptionEnum.IS_NULL.getMessage()); this.students.add(student); } public void addWorkbook(WorkbookId workbook) { - if (workbook == null) { - throw new IllegalStateException("Workbook cannot be null."); - } + Assert.notNull(workbook, ExceptionEnum.IS_NULL.getMessage()); this.workbooks.add(workbook); } public void deleteStudent(long studentId) { if (!students.removeIf(student -> student.getId() == studentId)) { - throw new NoStudentException("교실에 존재하지 않는 학생입니다."); + throw new NoStudentException(ExceptionEnum.NO_STUDENT.getMessage()); } } public void updateClassroomInfo(ClassroomInfo classroomInfo) { - if (classroomInfo == null) { - throw new IllegalStateException("ClassroomInfo cannot be null"); - } + Assert.notNull(classroomInfo, ExceptionEnum.IS_NULL.getMessage()); this.classroomInfo = classroomInfo; } } diff --git a/src/main/java/com/ohdab/classroom/exception/ContentOverflowException.java b/src/main/java/com/ohdab/classroom/exception/ContentOverflowException.java deleted file mode 100644 index d1aaa709..00000000 --- a/src/main/java/com/ohdab/classroom/exception/ContentOverflowException.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ohdab.classroom.exception; - -public class ContentOverflowException extends RuntimeException { - - public ContentOverflowException() {} - - public ContentOverflowException(String message) { - super(message); - } - - public ContentOverflowException(String message, Throwable cause) { - super(message, cause); - } - - public ContentOverflowException(Throwable cause) { - super(cause); - } -} diff --git a/src/main/java/com/ohdab/classroom/service/AddClassroomService.java b/src/main/java/com/ohdab/classroom/service/AddClassroomService.java index 5602996c..c980445b 100644 --- a/src/main/java/com/ohdab/classroom/service/AddClassroomService.java +++ b/src/main/java/com/ohdab/classroom/service/AddClassroomService.java @@ -8,6 +8,7 @@ import com.ohdab.classroom.repository.ClassroomRepository; import com.ohdab.classroom.service.dto.ClassroomDto; import com.ohdab.classroom.service.usecase.AddClassroomUsecase; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.teacher.teacherid.TeacherId; import com.ohdab.member.repository.MemberRepository; import lombok.RequiredArgsConstructor; @@ -45,7 +46,7 @@ public void addClassroom(ClassroomDto.Request classroomReqDto) { private void throwIfTeacherDoesNotExist(long teacherId) { if (!memberRepository.existsById(teacherId)) { - throw new NoTeacherException("cannot find teacher by id : " + teacherId); + throw new NoTeacherException(ExceptionEnum.NO_TEACHER.getMessage()); } } } diff --git a/src/main/java/com/ohdab/classroom/service/ClassroomDetailService.java b/src/main/java/com/ohdab/classroom/service/ClassroomDetailService.java index 9ec85e85..49471837 100644 --- a/src/main/java/com/ohdab/classroom/service/ClassroomDetailService.java +++ b/src/main/java/com/ohdab/classroom/service/ClassroomDetailService.java @@ -7,6 +7,7 @@ import com.ohdab.classroom.repository.ClassroomRepository; import com.ohdab.classroom.service.mapper.ClassroomDetailServiceMapper; import com.ohdab.classroom.service.usecase.ClassroomDetailUsecase; +import com.ohdab.core.exception.ExceptionEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,7 +24,10 @@ public ClassroomDetailDtoResponse getClassroomDetailById(long classroomId) { Classroom classroom = classroomRepository .findById(classroomId) - .orElseThrow(() -> new NoClassroomException("교실이 존재하지 않습니다.")); + .orElseThrow( + () -> + new NoClassroomException( + ExceptionEnum.NO_CLASSROOM.getMessage())); return ClassroomDetailServiceMapper.classroomToClassroomDetail(classroom); } } diff --git a/src/main/java/com/ohdab/classroom/service/FindClassroomDetailService.java b/src/main/java/com/ohdab/classroom/service/FindClassroomDetailService.java index 6223f2f5..3665967b 100644 --- a/src/main/java/com/ohdab/classroom/service/FindClassroomDetailService.java +++ b/src/main/java/com/ohdab/classroom/service/FindClassroomDetailService.java @@ -7,6 +7,7 @@ import com.ohdab.classroom.repository.ClassroomRepository; import com.ohdab.classroom.service.mapper.ClassroomDetailServiceMapper; import com.ohdab.classroom.service.usecase.FindClassroomDetailUsecase; +import com.ohdab.core.exception.ExceptionEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,7 +24,10 @@ public ClassroomDetailDtoResponse getClassroomDetailById(long classroomId) { Classroom classroom = classroomRepository .findById(classroomId) - .orElseThrow(() -> new NoClassroomException("존재하지 않는 교실입니다.")); + .orElseThrow( + () -> + new NoClassroomException( + ExceptionEnum.NO_CLASSROOM.getMessage())); return ClassroomDetailServiceMapper.classroomToClassroomDetail(classroom); } } diff --git a/src/main/java/com/ohdab/classroom/service/GetWorkbookListService.java b/src/main/java/com/ohdab/classroom/service/GetWorkbookListService.java index cf226f90..cc001e05 100644 --- a/src/main/java/com/ohdab/classroom/service/GetWorkbookListService.java +++ b/src/main/java/com/ohdab/classroom/service/GetWorkbookListService.java @@ -5,6 +5,7 @@ import com.ohdab.classroom.repository.ClassroomRepository; import com.ohdab.classroom.service.dto.ClassroomWorkbookDto; import com.ohdab.classroom.service.usecase.GetWorkbookListUsecase; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.workbook.domain.Workbook; import com.ohdab.workbook.repository.WorkbookRepository; import java.util.List; @@ -31,7 +32,7 @@ public List getWorkbookListByClassroomId(long cla private void throwIfUnknownClassroomId(long classroomId) { if (!classroomRepository.existsById(classroomId)) { - throw new NoClassroomException("Cannot find classroom with id \"" + classroomId + "\""); + throw new NoClassroomException(ExceptionEnum.NO_CLASSROOM.getMessage()); } } diff --git a/src/main/java/com/ohdab/classroom/service/UpdateWorkbookInfoService.java b/src/main/java/com/ohdab/classroom/service/UpdateWorkbookInfoService.java index 7cc45bb6..4dc73487 100644 --- a/src/main/java/com/ohdab/classroom/service/UpdateWorkbookInfoService.java +++ b/src/main/java/com/ohdab/classroom/service/UpdateWorkbookInfoService.java @@ -3,6 +3,7 @@ import com.ohdab.classroom.service.dto.ClassroomWorkbookUpdateDto.Request; import com.ohdab.classroom.service.helper.ClassroomHelperService; import com.ohdab.classroom.service.usecase.UpdateWorkbookInfoUsecase; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.workbook.domain.Workbook; import com.ohdab.workbook.domain.workbookInfo.WorkbookInfo; import com.ohdab.workbook.exception.NoWorkbookException; @@ -30,7 +31,7 @@ public void updateWorkbookInfo(Request updateWorkbookReq) { private void throwIfUnknownWorkbookId(long id) { if (!workbookRepository.existsById(id)) { - throw new NoWorkbookException("No Workbook with id \"" + id + "\""); + throw new NoWorkbookException(ExceptionEnum.NO_WORKBOOK.getMessage()); } } diff --git a/src/main/java/com/ohdab/classroom/service/helper/ClassroomHelperService.java b/src/main/java/com/ohdab/classroom/service/helper/ClassroomHelperService.java index 9d13c116..82b743bc 100644 --- a/src/main/java/com/ohdab/classroom/service/helper/ClassroomHelperService.java +++ b/src/main/java/com/ohdab/classroom/service/helper/ClassroomHelperService.java @@ -3,10 +3,11 @@ import com.ohdab.classroom.domain.Classroom; import com.ohdab.classroom.domain.classroomInfo.Grade; import com.ohdab.classroom.domain.classroomid.ClassroomId; -import com.ohdab.classroom.exception.DuplicatedWorkbookException; import com.ohdab.classroom.exception.NoClassroomException; import com.ohdab.classroom.exception.NoGradeException; import com.ohdab.classroom.repository.ClassroomRepository; +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.workbook.exception.DuplicatedWorkbookException; import com.ohdab.workbook.repository.WorkbookRepository; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -18,7 +19,7 @@ public static Grade findGradeByString(String stringGrade) { try { return Grade.valueOfLabel(stringGrade); } catch (NullPointerException e) { - throw new NoGradeException("Cannot find Grade : " + stringGrade, e); + throw new NoGradeException(ExceptionEnum.NO_GRADE.getMessage()); } catch (ClassCastException e) { throw new IllegalArgumentException("인자의 자료형이 잘못되었습니다."); } @@ -29,20 +30,13 @@ public static Classroom findExistingClassroom( return classroomRepository .findById(classroomId) .orElseThrow( - () -> - new NoClassroomException( - "반을 찾을 수 없습니다. classroomId: " + classroomId)); + () -> new NoClassroomException(ExceptionEnum.NO_CLASSROOM.getMessage())); } public static void throwIfDuplicatedWorkbookName( WorkbookRepository workbookRepository, ClassroomId classroomId, String name) { if (workbookRepository.existsByClassroomIdAndWorkbookInfoName(classroomId, name)) { - throw new DuplicatedWorkbookException( - "Duplicated workbook name \"" - + name - + "\" in classroom with id \"" - + classroomId - + "\""); + throw new DuplicatedWorkbookException(ExceptionEnum.DUPLICATED_WORKBOOK.getMessage()); } } } diff --git a/src/main/java/com/ohdab/core/exception/ExceptionEnum.java b/src/main/java/com/ohdab/core/exception/ExceptionEnum.java new file mode 100644 index 00000000..b559b734 --- /dev/null +++ b/src/main/java/com/ohdab/core/exception/ExceptionEnum.java @@ -0,0 +1,44 @@ +package com.ohdab.core.exception; + +import lombok.Getter; + +@Getter +public enum ExceptionEnum { + + // 600 - classroom + NO_CLASSROOM(600, "존재하지 않는 교실입니다."), + NO_GRADE(601, "존재하지 않는 학년입니다."), + NO_STUDENT(602, "존재하지 않는 학생입니다."), + NO_TEACHER(603, "존재하지 않는 선생님입니다."), + + // 700 - member + ALREADY_WITHDRAWL(700, "이미 탈퇴한 계정입니다."), + DUPLICATED_MEMBER(701, "이미 존재하는 회원입니다."), + NO_MEMBER(702, "존재하지 않는 회원입니다."), + MEMBER_CONTENT_OVERFLOW(703, "최대 글자수를 초과했습니다."), + NO_AUTHORITY(704, "권한정보가 누락되었습니다."), + + // 800 - mistakeNote + NO_MISTAKE_NOTE(800, "존재하지 않는 오답노트입니다."), + NO_NUMBERS_WRONG_N_TIMES(801, ""), + NUMBER_IS_OUT_OF_RANGE(802, "N번 이상 틀린 문제가 없습니다."), + MISTAKE_NUMBERS_SIZE(803, "기록 가능한 문제수를 초과했습니다."), + + // 900 - workbook + WORKBOOK_CONTENT_OVERFLOW(900, "최대 글자수를 초과했습니다."), + DUPLICATED_WORKBOOK(901, "이미 존재하는 교재입니다."), + INVALID_WORKBOOK_NUMBER_RANGE(902, "허용 범위를 벗어난 문제 번호입니다."), + NO_WORKBOOK(903, "존재하지 않는 교재입니다."), + + // 1000 - null + IS_NULL(1000, "필수 입력값이 누락되었습니다."), + ; + + private int errorCode; + private String message; + + ExceptionEnum(int errorCode, String message) { + this.errorCode = errorCode; + this.message = message; + } +} diff --git a/src/main/java/com/ohdab/core/exception/handler/ClassroomExceptionHandler.java b/src/main/java/com/ohdab/core/exception/handler/ClassroomExceptionHandler.java new file mode 100644 index 00000000..e635ce3f --- /dev/null +++ b/src/main/java/com/ohdab/core/exception/handler/ClassroomExceptionHandler.java @@ -0,0 +1,55 @@ +package com.ohdab.core.exception.handler; + +import com.ohdab.classroom.exception.NoClassroomException; +import com.ohdab.classroom.exception.NoGradeException; +import com.ohdab.classroom.exception.NoStudentException; +import com.ohdab.classroom.exception.NoTeacherException; +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.core.template.ErrorMessage; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class ClassroomExceptionHandler { + + @ExceptionHandler + public ResponseEntity noClassroomException(NoClassroomException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_CLASSROOM.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noGradeException(NoGradeException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_GRADE.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noStudentException(NoStudentException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_STUDENT.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noTeacherException(NoTeacherException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_TEACHER.getErrorCode()) + .message(e.getMessage()) + .build()); + } +} diff --git a/src/main/java/com/ohdab/core/exception/handler/CommonExceptionHandler.java b/src/main/java/com/ohdab/core/exception/handler/CommonExceptionHandler.java new file mode 100644 index 00000000..fb20b792 --- /dev/null +++ b/src/main/java/com/ohdab/core/exception/handler/CommonExceptionHandler.java @@ -0,0 +1,21 @@ +package com.ohdab.core.exception.handler; + +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.core.template.ErrorMessage; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class CommonExceptionHandler { + + @ExceptionHandler + public ResponseEntity illegalArgumentException(IllegalArgumentException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.IS_NULL.getErrorCode()) + .message(e.getMessage()) + .build()); + } +} diff --git a/src/main/java/com/ohdab/core/exception/handler/MemberExceptionHandler.java b/src/main/java/com/ohdab/core/exception/handler/MemberExceptionHandler.java new file mode 100644 index 00000000..58cdb067 --- /dev/null +++ b/src/main/java/com/ohdab/core/exception/handler/MemberExceptionHandler.java @@ -0,0 +1,62 @@ +package com.ohdab.core.exception.handler; + +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.core.template.ErrorMessage; +import com.ohdab.member.exception.*; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class MemberExceptionHandler { + + @ExceptionHandler + public ResponseEntity alreadyWithdrawException(AlreadyWithdrawlException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.ALREADY_WITHDRAWL.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity duplicatedMemberException(DuplicatedMemberException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.DUPLICATED_MEMBER.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noMemberException(NoMemberException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_MEMBER.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity contentOverflowException(MemberContentOverflowException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.MEMBER_CONTENT_OVERFLOW.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noAuthorityException(NoAuthorityException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_AUTHORITY.getErrorCode()) + .message(e.getMessage()) + .build()); + } +} diff --git a/src/main/java/com/ohdab/core/exception/handler/MistakeNoteExceptionHandler.java b/src/main/java/com/ohdab/core/exception/handler/MistakeNoteExceptionHandler.java new file mode 100644 index 00000000..38b984fc --- /dev/null +++ b/src/main/java/com/ohdab/core/exception/handler/MistakeNoteExceptionHandler.java @@ -0,0 +1,56 @@ +package com.ohdab.core.exception.handler; + +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.core.template.ErrorMessage; +import com.ohdab.mistakenote.exception.MistakeNumbersSizeException; +import com.ohdab.mistakenote.exception.NoMistakeNoteException; +import com.ohdab.mistakenote.exception.NoNumbersWrongNTimesException; +import com.ohdab.mistakenote.exception.NumberIsOutOfRangeException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class MistakeNoteExceptionHandler { + + @ExceptionHandler + public ResponseEntity noMistakeException(NoMistakeNoteException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_MISTAKE_NOTE.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noNumbersWrongNTimesException( + NoNumbersWrongNTimesException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_NUMBERS_WRONG_N_TIMES.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity numberIsOutOfRangeException(NumberIsOutOfRangeException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NUMBER_IS_OUT_OF_RANGE.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity mistakeNumberSizeException(MistakeNumbersSizeException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.MISTAKE_NUMBERS_SIZE.getErrorCode()) + .message(e.getMessage()) + .build()); + } +} diff --git a/src/main/java/com/ohdab/core/exception/handler/WorkbookExceptionHandler.java b/src/main/java/com/ohdab/core/exception/handler/WorkbookExceptionHandler.java new file mode 100644 index 00000000..d8f66f73 --- /dev/null +++ b/src/main/java/com/ohdab/core/exception/handler/WorkbookExceptionHandler.java @@ -0,0 +1,58 @@ +package com.ohdab.core.exception.handler; + +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.core.template.ErrorMessage; +import com.ohdab.workbook.exception.DuplicatedWorkbookException; +import com.ohdab.workbook.exception.InvalidWorkbookNumberRangeException; +import com.ohdab.workbook.exception.NoWorkbookException; +import com.ohdab.workbook.exception.WorkbookContentOverflowException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class WorkbookExceptionHandler { + + @ExceptionHandler + public ResponseEntity contentOverflowException( + WorkbookContentOverflowException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.WORKBOOK_CONTENT_OVERFLOW.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity duplicatedWorkbookException(DuplicatedWorkbookException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.DUPLICATED_WORKBOOK.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity invalidWorkbookNumberRangeException( + InvalidWorkbookNumberRangeException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode( + ExceptionEnum.INVALID_WORKBOOK_NUMBER_RANGE.getErrorCode()) + .message(e.getMessage()) + .build()); + } + + @ExceptionHandler + public ResponseEntity noWorkbookException(NoWorkbookException e) { + return ResponseEntity.badRequest() + .body( + ErrorMessage.builder() + .errorCode(ExceptionEnum.NO_WORKBOOK.getErrorCode()) + .message(e.getMessage()) + .build()); + } +} diff --git a/src/main/java/com/ohdab/member/domain/Member.java b/src/main/java/com/ohdab/member/domain/Member.java index 30a5f737..7cea412a 100644 --- a/src/main/java/com/ohdab/member/domain/Member.java +++ b/src/main/java/com/ohdab/member/domain/Member.java @@ -1,8 +1,13 @@ package com.ohdab.member.domain; import com.ohdab.core.baseentity.BaseEntity; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.memberinfo.MemberInfo; import com.ohdab.member.exception.AlreadyWithdrawlException; +import com.ohdab.member.exception.MemberContentOverflowException; +import com.ohdab.member.exception.NoAuthorityException; +import io.jsonwebtoken.lang.Assert; +import java.util.ArrayList; import java.util.List; import javax.persistence.*; import lombok.AccessLevel; @@ -31,13 +36,15 @@ public class Member extends BaseEntity { @ElementCollection @CollectionTable(name = "MEMBER_AUTHORITY", joinColumns = @JoinColumn(name = "member_id")) - private List authorities; + private List authorities = new ArrayList<>(); @Enumerated(EnumType.STRING) private MemberStatus status; @Builder public Member(MemberInfo memberInfo, List authorities) { + Assert.notNull(memberInfo, ExceptionEnum.IS_NULL.getMessage()); + Assert.notNull(authorities, ExceptionEnum.IS_NULL.getMessage()); setMemberInfo(memberInfo); setAuthorities(authorities); this.status = MemberStatus.ACTIVE; @@ -45,17 +52,15 @@ public Member(MemberInfo memberInfo, List authorities) { private void setAuthorities(List authorities) { if (authorities.isEmpty()) { - throw new IllegalArgumentException("권한은 반드시 추가해야함"); + throw new NoAuthorityException(ExceptionEnum.NO_AUTHORITY.getMessage()); } this.authorities = authorities; } private void setMemberInfo(MemberInfo memberInfo) { if (memberInfo.getName().length() > 20) { - throw new IllegalStateException( - "Name length cannot exceed 20 : current length \"" - + memberInfo.getName().length() - + "\""); + throw new MemberContentOverflowException( + ExceptionEnum.MEMBER_CONTENT_OVERFLOW.getMessage()); } this.memberInfo = memberInfo; } @@ -67,7 +72,7 @@ public boolean matchPassword( public void withdrawal() { if (this.status == MemberStatus.INACTIVE) { - throw new AlreadyWithdrawlException("이미 탈퇴한 회원입니다."); + throw new AlreadyWithdrawlException(ExceptionEnum.ALREADY_WITHDRAWL.getMessage()); } this.status = MemberStatus.INACTIVE; } diff --git a/src/main/java/com/ohdab/member/exception/MemberContentOverflowException.java b/src/main/java/com/ohdab/member/exception/MemberContentOverflowException.java new file mode 100644 index 00000000..266519c1 --- /dev/null +++ b/src/main/java/com/ohdab/member/exception/MemberContentOverflowException.java @@ -0,0 +1,18 @@ +package com.ohdab.member.exception; + +public class MemberContentOverflowException extends RuntimeException { + + public MemberContentOverflowException() {} + + public MemberContentOverflowException(String message) { + super(message); + } + + public MemberContentOverflowException(String message, Throwable cause) { + super(message, cause); + } + + public MemberContentOverflowException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/com/ohdab/member/exception/NoAuthorityException.java b/src/main/java/com/ohdab/member/exception/NoAuthorityException.java new file mode 100644 index 00000000..610b2a31 --- /dev/null +++ b/src/main/java/com/ohdab/member/exception/NoAuthorityException.java @@ -0,0 +1,18 @@ +package com.ohdab.member.exception; + +public class NoAuthorityException extends RuntimeException { + + public NoAuthorityException() {} + + public NoAuthorityException(String message) { + super(message); + } + + public NoAuthorityException(String message, Throwable cause) { + super(message, cause); + } + + public NoAuthorityException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/com/ohdab/member/service/AddTeacherService.java b/src/main/java/com/ohdab/member/service/AddTeacherService.java index 18d28205..d25031c9 100644 --- a/src/main/java/com/ohdab/member/service/AddTeacherService.java +++ b/src/main/java/com/ohdab/member/service/AddTeacherService.java @@ -2,6 +2,7 @@ import static com.ohdab.member.service.helper.MemberHelperService.checkIfMemberExistByName; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.exception.NoMemberException; import com.ohdab.member.repository.MemberRepository; import com.ohdab.member.service.dto.MemberDtoForAddTeacher; @@ -47,7 +48,7 @@ private String changeNameIfDuplicated(String name) { private void throwIfJoinFailed(String name) { if (!checkIfMemberExistByName(memberRepository, name)) { - throw new NoMemberException("Join Failed with teacher name \"" + name + "\""); + throw new NoMemberException(ExceptionEnum.NO_MEMBER.getMessage()); } } } diff --git a/src/main/java/com/ohdab/member/service/JoinService.java b/src/main/java/com/ohdab/member/service/JoinService.java index 28466b09..26d68467 100644 --- a/src/main/java/com/ohdab/member/service/JoinService.java +++ b/src/main/java/com/ohdab/member/service/JoinService.java @@ -1,5 +1,6 @@ package com.ohdab.member.service; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.Authority; import com.ohdab.member.domain.Member; import com.ohdab.member.domain.memberinfo.MemberInfo; @@ -34,7 +35,7 @@ public void join(MemberDtoForJoin.Request joinReqDto) { private void checkDuplicatedMember(String name) { Optional member = memberRepository.findByMemberInfoName(name); if (member.isPresent()) { - throw new DuplicatedMemberException("이미 존재하는 회원입니다."); + throw new DuplicatedMemberException(ExceptionEnum.DUPLICATED_WORKBOOK.getMessage()); } } diff --git a/src/main/java/com/ohdab/member/service/helper/MemberHelperService.java b/src/main/java/com/ohdab/member/service/helper/MemberHelperService.java index cb5993dc..1c027dba 100644 --- a/src/main/java/com/ohdab/member/service/helper/MemberHelperService.java +++ b/src/main/java/com/ohdab/member/service/helper/MemberHelperService.java @@ -1,5 +1,6 @@ package com.ohdab.member.service.helper; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.Member; import com.ohdab.member.exception.NoMemberException; import com.ohdab.member.repository.MemberRepository; @@ -12,13 +13,13 @@ public final class MemberHelperService { public static Member findExistingMemberByName(MemberRepository memberRepository, String name) { return memberRepository .findByMemberInfoName(name) - .orElseThrow(() -> new NoMemberException("존재하지 않는 회원입니다.")); + .orElseThrow(() -> new NoMemberException(ExceptionEnum.NO_MEMBER.getMessage())); } public static Member findExistingMemberById(MemberRepository memberRepository, long id) { return memberRepository .findById(id) - .orElseThrow(() -> new NoMemberException("Unknown member with id \"" + id + "\"")); + .orElseThrow(() -> new NoMemberException(ExceptionEnum.NO_MEMBER.getMessage())); } public static boolean checkIfMemberExistByName(MemberRepository memberRepository, String name) { diff --git a/src/main/java/com/ohdab/mistakenote/domain/MistakeNote.java b/src/main/java/com/ohdab/mistakenote/domain/MistakeNote.java index 4f20a092..3b41e32f 100644 --- a/src/main/java/com/ohdab/mistakenote/domain/MistakeNote.java +++ b/src/main/java/com/ohdab/mistakenote/domain/MistakeNote.java @@ -1,10 +1,13 @@ package com.ohdab.mistakenote.domain; import com.ohdab.core.baseentity.BaseEntity; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.student.studentid.StudentId; +import com.ohdab.mistakenote.exception.MistakeNumbersSizeException; import com.ohdab.workbook.domain.Workbook; import com.ohdab.workbook.domain.service.NumberScopeCheckService; import com.ohdab.workbook.domain.workbookid.WorkbookId; +import io.jsonwebtoken.lang.Assert; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +45,8 @@ public class MistakeNote extends BaseEntity { @Builder public MistakeNote( WorkbookId workbookId, StudentId studentId, Map mistakeRecords) { + Assert.notNull(workbookId, ExceptionEnum.IS_NULL.getMessage()); + Assert.notNull(studentId, ExceptionEnum.IS_NULL.getMessage()); this.workbookId = workbookId; this.studentId = studentId; setMistakeRecords(mistakeRecords); @@ -69,7 +74,7 @@ public void addMistakeNumbers( private void checkMistakeNumbersSize(List numbers) { if (numbers.isEmpty() || numbers.size() > 500) { - throw new IllegalArgumentException("틀린 문제 번호는 최소 1개 이상, 500개 이하로 입력할 수 있습니다."); + throw new MistakeNumbersSizeException(ExceptionEnum.MISTAKE_NUMBERS_SIZE.getMessage()); } } diff --git a/src/main/java/com/ohdab/mistakenote/exception/MistakeNumbersSizeException.java b/src/main/java/com/ohdab/mistakenote/exception/MistakeNumbersSizeException.java new file mode 100644 index 00000000..3c04ead4 --- /dev/null +++ b/src/main/java/com/ohdab/mistakenote/exception/MistakeNumbersSizeException.java @@ -0,0 +1,18 @@ +package com.ohdab.mistakenote.exception; + +public class MistakeNumbersSizeException extends RuntimeException { + + public MistakeNumbersSizeException() {} + + public MistakeNumbersSizeException(String message) { + super(message); + } + + public MistakeNumbersSizeException(String message, Throwable cause) { + super(message, cause); + } + + public MistakeNumbersSizeException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/com/ohdab/mistakenote/service/GetMistakeNoteInfoService.java b/src/main/java/com/ohdab/mistakenote/service/GetMistakeNoteInfoService.java index ab25ef2e..9461b54c 100644 --- a/src/main/java/com/ohdab/mistakenote/service/GetMistakeNoteInfoService.java +++ b/src/main/java/com/ohdab/mistakenote/service/GetMistakeNoteInfoService.java @@ -2,6 +2,7 @@ import static com.ohdab.mistakenote.service.helper.MistakeNoteHelperService.isNotExistingMember; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.student.studentid.StudentId; import com.ohdab.member.exception.NoMemberException; import com.ohdab.member.repository.MemberRepository; @@ -39,13 +40,16 @@ public class GetMistakeNoteInfoService implements GetMistakeNoteInfoUsecase { public GetMistakeNoteInfoOfStudentDto.Response getMistakeNoteInfoOfStudent( long workbookId, long studentId) { if (isNotExistingMember(memberRepository, studentId)) { - throw new NoMemberException("존재하지 않는 회원입니다."); + throw new NoMemberException(ExceptionEnum.NO_MEMBER.getMessage()); } MistakeNote mistakeNote = mistakeNoteRepository .findByWorkbookIdAndStudentId( new WorkbookId(workbookId), new StudentId(studentId)) - .orElseThrow(() -> new NoMistakeNoteException("존재하지 않는 오답노트입니다.")); + .orElseThrow( + () -> + new NoMistakeNoteException( + ExceptionEnum.NO_MISTAKE_NOTE.getMessage())); return mapToMistakeNoteInfo(mistakeNote); } diff --git a/src/main/java/com/ohdab/mistakenote/service/GetNumberWrongNTimesService.java b/src/main/java/com/ohdab/mistakenote/service/GetNumberWrongNTimesService.java index f5245336..679fd3be 100644 --- a/src/main/java/com/ohdab/mistakenote/service/GetNumberWrongNTimesService.java +++ b/src/main/java/com/ohdab/mistakenote/service/GetNumberWrongNTimesService.java @@ -1,5 +1,6 @@ package com.ohdab.mistakenote.service; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.mistakenote.exception.NoNumbersWrongNTimesException; import com.ohdab.mistakenote.exception.NumberIsOutOfRangeException; import com.ohdab.mistakenote.repository.mapper.MistakeRecordMapper; @@ -28,7 +29,10 @@ public GetNumberWrongNTimesDto.Response getNumberWrongNTimes( Workbook workbook = workbookRepository .findById(getNumberWrongNTimeDto.getWorkbookId()) - .orElseThrow(() -> new NoWorkbookException("존재하지 않는 교재입니다.")); + .orElseThrow( + () -> + new NoWorkbookException( + ExceptionEnum.NO_WORKBOOK.getMessage())); checkNumberIsInRange(getNumberWrongNTimeDto, workbook); List numberWrongNTimes = mistakeRecordMapper.findNumbersWrongNTimes(getNumberWrongNTimeDto); @@ -45,7 +49,8 @@ private void checkNumberIsInRange( int to = getTo(getNumberWrongNTimeDto); if (isNotInRange(from, startingNumber, endingNumber) || isNotInRange(to, startingNumber, endingNumber)) { - throw new NumberIsOutOfRangeException("교재에 존재하지 않는 번호를 요청했습니다."); + throw new NumberIsOutOfRangeException( + ExceptionEnum.NUMBER_IS_OUT_OF_RANGE.getMessage()); } } @@ -71,7 +76,8 @@ private boolean isNotInRange(int target, int startingNumber, int endingNumber) { private String wrongNumbersToString(List numberWrongNTimes) { if (numberWrongNTimes.isEmpty()) { - throw new NoNumbersWrongNTimesException("틀린 문제가 없습니다."); + throw new NoNumbersWrongNTimesException( + ExceptionEnum.NO_NUMBERS_WRONG_N_TIMES.getMessage()); } return numberWrongNTimes.stream().map(String::valueOf).collect(Collectors.joining(",")); } diff --git a/src/main/java/com/ohdab/mistakenote/service/SaveMistakeNoteInfoService.java b/src/main/java/com/ohdab/mistakenote/service/SaveMistakeNoteInfoService.java index 36942e49..e186ab84 100644 --- a/src/main/java/com/ohdab/mistakenote/service/SaveMistakeNoteInfoService.java +++ b/src/main/java/com/ohdab/mistakenote/service/SaveMistakeNoteInfoService.java @@ -2,6 +2,7 @@ import static com.ohdab.mistakenote.service.helper.MistakeNoteHelperService.isNotExistingMember; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.member.domain.student.studentid.StudentId; import com.ohdab.member.exception.NoMemberException; import com.ohdab.member.repository.MemberRepository; @@ -32,18 +33,24 @@ public class SaveMistakeNoteInfoService implements SaveMistakeNoteInfoUsecase { @Override public void saveMistakeNoteInfo(SaveMistakeNoteInfoDto saveMistakeNoteInfoDto) { if (isNotExistingMember(memberRepository, saveMistakeNoteInfoDto.getStudentId())) { - throw new NoMemberException("존재하지 않는 회원입니다."); + throw new NoMemberException(ExceptionEnum.NO_MEMBER.getMessage()); } MistakeNote mistakeNote = mistakeNoteRepository .findByWorkbookIdAndStudentId( new WorkbookId(saveMistakeNoteInfoDto.getWorkbookId()), new StudentId(saveMistakeNoteInfoDto.getStudentId())) - .orElseThrow(() -> new NoMistakeNoteException("존재하지 않는 오답노트입니다.")); + .orElseThrow( + () -> + new NoMistakeNoteException( + ExceptionEnum.NO_MISTAKE_NOTE.getMessage())); Workbook workbook = workbookRepository .findById(saveMistakeNoteInfoDto.getWorkbookId()) - .orElseThrow(() -> new NoWorkbookException("존재하지 않는 교재입니다.")); + .orElseThrow( + () -> + new NoWorkbookException( + ExceptionEnum.NO_WORKBOOK.getMessage())); mistakeNote.addMistakeNumbers( numberScopeCheckService, workbook, saveMistakeNoteInfoDto.getMistakeNumbers()); } diff --git a/src/main/java/com/ohdab/workbook/domain/Workbook.java b/src/main/java/com/ohdab/workbook/domain/Workbook.java index 8416003f..2aa886e4 100644 --- a/src/main/java/com/ohdab/workbook/domain/Workbook.java +++ b/src/main/java/com/ohdab/workbook/domain/Workbook.java @@ -2,7 +2,9 @@ import com.ohdab.classroom.domain.classroomid.ClassroomId; import com.ohdab.core.baseentity.BaseEntity; +import com.ohdab.core.exception.ExceptionEnum; import com.ohdab.workbook.domain.workbookInfo.WorkbookInfo; +import io.jsonwebtoken.lang.Assert; import javax.persistence.*; import lombok.AccessLevel; import lombok.Builder; @@ -35,21 +37,14 @@ public class Workbook extends BaseEntity { @Builder public Workbook(WorkbookInfo workbookInfo, ClassroomId classroomId) { - setWorkbookInfo(workbookInfo); - this.classroomId = classroomId; - } - - private void setWorkbookInfo(WorkbookInfo workbookInfo) { - if (workbookInfo == null) { - throw new IllegalArgumentException("예외"); - } + Assert.notNull(workbookInfo, ExceptionEnum.IS_NULL.getMessage()); + Assert.notNull(classroomId, ExceptionEnum.IS_NULL.getMessage()); this.workbookInfo = workbookInfo; + this.classroomId = classroomId; } public void updateWorkbookInfo(WorkbookInfo workbookInfo) { - if (workbookInfo == null) { - throw new IllegalStateException("WorkbookInfo cannot be null"); - } + Assert.notNull(workbookInfo, ExceptionEnum.IS_NULL.getMessage()); this.workbookInfo = workbookInfo; } } diff --git a/src/main/java/com/ohdab/workbook/domain/workbookInfo/WorkbookInfo.java b/src/main/java/com/ohdab/workbook/domain/workbookInfo/WorkbookInfo.java index d0d66444..41c0edd8 100644 --- a/src/main/java/com/ohdab/workbook/domain/workbookInfo/WorkbookInfo.java +++ b/src/main/java/com/ohdab/workbook/domain/workbookInfo/WorkbookInfo.java @@ -1,7 +1,8 @@ package com.ohdab.workbook.domain.workbookInfo; -import com.ohdab.classroom.exception.ContentOverflowException; -import com.ohdab.classroom.exception.InvalidWorkbookNumberRangeException; +import com.ohdab.core.exception.ExceptionEnum; +import com.ohdab.workbook.exception.InvalidWorkbookNumberRangeException; +import com.ohdab.workbook.exception.WorkbookContentOverflowException; import javax.persistence.Embeddable; import lombok.AccessLevel; import lombok.Builder; @@ -28,18 +29,16 @@ public WorkbookInfo(String name, String description, int startingNumber, int end private void setName(String name) { if (name.length() > 20) { - throw new ContentOverflowException( - "Name length cannot exceed 20 : current length \"" + name.length() + "\""); + throw new WorkbookContentOverflowException( + ExceptionEnum.WORKBOOK_CONTENT_OVERFLOW.getMessage()); } this.name = name; } private void setDescription(String description) { if (description != null && description.length() > 30) { - throw new ContentOverflowException( - "Description length cannot exceed 30 : current length \"" - + description.length() - + "\""); + throw new WorkbookContentOverflowException( + ExceptionEnum.WORKBOOK_CONTENT_OVERFLOW.getMessage()); } this.description = description; } @@ -50,19 +49,11 @@ private void setRange(int startingNumber, int endingNumber) { || endingNumber < 0 || endingNumber > 5000) { throw new InvalidWorkbookNumberRangeException( - "Invalid range with starting number \"" - + startingNumber - + "\", ending number \"" - + endingNumber - + "\""); + ExceptionEnum.INVALID_WORKBOOK_NUMBER_RANGE.getMessage()); } if (startingNumber > endingNumber) { throw new InvalidWorkbookNumberRangeException( - "Ending number \"" - + endingNumber - + "\" cannot precede starting number \"" - + startingNumber - + "\""); + ExceptionEnum.INVALID_WORKBOOK_NUMBER_RANGE.getMessage()); } this.startingNumber = startingNumber; this.endingNumber = endingNumber; diff --git a/src/main/java/com/ohdab/classroom/exception/DuplicatedWorkbookException.java b/src/main/java/com/ohdab/workbook/exception/DuplicatedWorkbookException.java similarity index 91% rename from src/main/java/com/ohdab/classroom/exception/DuplicatedWorkbookException.java rename to src/main/java/com/ohdab/workbook/exception/DuplicatedWorkbookException.java index 21f4127a..f43c2ffe 100644 --- a/src/main/java/com/ohdab/classroom/exception/DuplicatedWorkbookException.java +++ b/src/main/java/com/ohdab/workbook/exception/DuplicatedWorkbookException.java @@ -1,4 +1,4 @@ -package com.ohdab.classroom.exception; +package com.ohdab.workbook.exception; public class DuplicatedWorkbookException extends RuntimeException { diff --git a/src/main/java/com/ohdab/classroom/exception/InvalidWorkbookNumberRangeException.java b/src/main/java/com/ohdab/workbook/exception/InvalidWorkbookNumberRangeException.java similarity index 91% rename from src/main/java/com/ohdab/classroom/exception/InvalidWorkbookNumberRangeException.java rename to src/main/java/com/ohdab/workbook/exception/InvalidWorkbookNumberRangeException.java index a973ceb8..af6cb257 100644 --- a/src/main/java/com/ohdab/classroom/exception/InvalidWorkbookNumberRangeException.java +++ b/src/main/java/com/ohdab/workbook/exception/InvalidWorkbookNumberRangeException.java @@ -1,4 +1,4 @@ -package com.ohdab.classroom.exception; +package com.ohdab.workbook.exception; public class InvalidWorkbookNumberRangeException extends RuntimeException { diff --git a/src/main/java/com/ohdab/workbook/exception/WorkbookContentOverflowException.java b/src/main/java/com/ohdab/workbook/exception/WorkbookContentOverflowException.java new file mode 100644 index 00000000..6fe5513a --- /dev/null +++ b/src/main/java/com/ohdab/workbook/exception/WorkbookContentOverflowException.java @@ -0,0 +1,18 @@ +package com.ohdab.workbook.exception; + +public class WorkbookContentOverflowException extends RuntimeException { + + public WorkbookContentOverflowException() {} + + public WorkbookContentOverflowException(String message) { + super(message); + } + + public WorkbookContentOverflowException(String message, Throwable cause) { + super(message, cause); + } + + public WorkbookContentOverflowException(Throwable cause) { + super(cause); + } +}