Skip to content

Commit

Permalink
feat: controller advice 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
simhani1 committed Aug 14, 2023
1 parent 1b25354 commit 2161a9d
Show file tree
Hide file tree
Showing 16 changed files with 362 additions and 62 deletions.
29 changes: 6 additions & 23 deletions src/main/java/com/ohdab/classroom/domain/Classroom.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
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.*;
Expand Down Expand Up @@ -42,35 +43,19 @@ 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);
}

Expand All @@ -81,9 +66,7 @@ public void deleteStudent(long studentId) {
}

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;
}
}
8 changes: 7 additions & 1 deletion src/main/java/com/ohdab/core/exception/ExceptionEnum.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,23 @@ public enum ExceptionEnum {
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
CONTENT_OVERFLOW(900, "최대 글자수를 초과했습니다."),
WORKBOOK_CONTENT_OVERFLOW(900, "최대 글자수를 초과했습니다."),
DUPLICATED_WORKBOOK(901, "이미 존재하는 교재입니다."),
INVALID_WORKBOOK_NUMBER_RANGE(902, "허용 범위를 벗어난 문제 번호입니다."),
NO_WORKBOOK(903, "존재하지 않는 교재입니다."),

// 1000 - null
IS_NULL(1000, "필수 입력값이 누락되었습니다."),
;

private int errorCode;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ErrorMessage> noClassroomException(NoClassroomException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_CLASSROOM.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noGradeException(NoGradeException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_GRADE.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noStudentException(NoStudentException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_STUDENT.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noTeacherException(NoTeacherException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_TEACHER.getErrorCode())
.message(e.getMessage())
.build());
}
}
Original file line number Diff line number Diff line change
@@ -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<ErrorMessage> illegalArgumentException(IllegalArgumentException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.IS_NULL.getErrorCode())
.message(e.getMessage())
.build());
}
}
Original file line number Diff line number Diff line change
@@ -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<ErrorMessage> alreadyWithdrawException(AlreadyWithdrawlException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.ALREADY_WITHDRAWL.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> duplicatedMemberException(DuplicatedMemberException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.DUPLICATED_MEMBER.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noMemberException(NoMemberException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_MEMBER.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> contentOverflowException(MemberContentOverflowException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.MEMBER_CONTENT_OVERFLOW.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noAuthorityException(NoAuthorityException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_AUTHORITY.getErrorCode())
.message(e.getMessage())
.build());
}
}
Original file line number Diff line number Diff line change
@@ -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<ErrorMessage> noMistakeException(NoMistakeNoteException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_MISTAKE_NOTE.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noNumbersWrongNTimesException(
NoNumbersWrongNTimesException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_NUMBERS_WRONG_N_TIMES.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> numberIsOutOfRangeException(NumberIsOutOfRangeException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NUMBER_IS_OUT_OF_RANGE.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> mistakeNumberSizeException(MistakeNumbersSizeException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.MISTAKE_NUMBERS_SIZE.getErrorCode())
.message(e.getMessage())
.build());
}
}
Original file line number Diff line number Diff line change
@@ -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<ErrorMessage> contentOverflowException(
WorkbookContentOverflowException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.WORKBOOK_CONTENT_OVERFLOW.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> duplicatedWorkbookException(DuplicatedWorkbookException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.DUPLICATED_WORKBOOK.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> invalidWorkbookNumberRangeException(
InvalidWorkbookNumberRangeException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(
ExceptionEnum.INVALID_WORKBOOK_NUMBER_RANGE.getErrorCode())
.message(e.getMessage())
.build());
}

@ExceptionHandler
public ResponseEntity<ErrorMessage> noWorkbookException(NoWorkbookException e) {
return ResponseEntity.badRequest()
.body(
ErrorMessage.builder()
.errorCode(ExceptionEnum.NO_WORKBOOK.getErrorCode())
.message(e.getMessage())
.build());
}
}
13 changes: 8 additions & 5 deletions src/main/java/com/ohdab/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
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.List;
import javax.persistence.*;
import lombok.AccessLevel;
Expand Down Expand Up @@ -39,24 +42,24 @@ public class Member extends BaseEntity {

@Builder
public Member(MemberInfo memberInfo, List<Authority> authorities) {
Assert.notNull(memberInfo, ExceptionEnum.IS_NULL.getMessage());
Assert.notNull(authorities, ExceptionEnum.IS_NULL.getMessage());
setMemberInfo(memberInfo);
setAuthorities(authorities);
this.status = MemberStatus.ACTIVE;
}

private void setAuthorities(List<Authority> 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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading

0 comments on commit 2161a9d

Please sign in to comment.