diff --git a/src/main/java/com/livable/server/config/JpaConfig.java b/src/main/java/com/livable/server/core/config/JpaConfig.java similarity index 83% rename from src/main/java/com/livable/server/config/JpaConfig.java rename to src/main/java/com/livable/server/core/config/JpaConfig.java index 906573a7..8bd76345 100644 --- a/src/main/java/com/livable/server/config/JpaConfig.java +++ b/src/main/java/com/livable/server/core/config/JpaConfig.java @@ -1,4 +1,4 @@ -package com.livable.server.config; +package com.livable.server.core.config; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; diff --git a/src/main/java/com/livable/server/core/exception/ErrorCode.java b/src/main/java/com/livable/server/core/exception/ErrorCode.java new file mode 100644 index 00000000..cadd9c54 --- /dev/null +++ b/src/main/java/com/livable/server/core/exception/ErrorCode.java @@ -0,0 +1,10 @@ +package com.livable.server.core.exception; + +import org.springframework.http.HttpStatus; + +public interface ErrorCode { + + String getMessage(); + + HttpStatus getHttpStatus(); +} diff --git a/src/main/java/com/livable/server/core/exception/GlobalExceptionHandler.java b/src/main/java/com/livable/server/core/exception/GlobalExceptionHandler.java new file mode 100644 index 00000000..3f34db59 --- /dev/null +++ b/src/main/java/com/livable/server/core/exception/GlobalExceptionHandler.java @@ -0,0 +1,48 @@ +package com.livable.server.core.exception; + +import com.livable.server.core.response.ApiResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public ResponseEntity methodMethodArgumentTypeMismatchExceptionHandle(MethodArgumentTypeMismatchException e) { + return ApiResponse.error(e.getMessage(), HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(BindException.class) + public ResponseEntity bindException(BindException e) { + log.error("bindException", e); + + return ApiResponse.error(e.getBindingResult().getFieldError().getDefaultMessage(), HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(GlobalRuntimeException.class) + public ResponseEntity globalRuntimeExceptionHandle(GlobalRuntimeException e) { + log.error("globalRuntimeExceptionHandle", e); + + return ApiResponse.error(e.getErrorCode()); + } + + @ExceptionHandler(RuntimeException.class) + public ResponseEntity runtimeExceptionHandle(RuntimeException e) { + log.error("runtimeExceptionHandle", e); + + return ApiResponse.error(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity exceptionHandle(Exception e) { + log.error("exceptionHandle", e); + + return ApiResponse.error(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } +} diff --git a/src/main/java/com/livable/server/core/exception/GlobalRuntimeException.java b/src/main/java/com/livable/server/core/exception/GlobalRuntimeException.java new file mode 100644 index 00000000..b726228a --- /dev/null +++ b/src/main/java/com/livable/server/core/exception/GlobalRuntimeException.java @@ -0,0 +1,14 @@ +package com.livable.server.core.exception; + +import lombok.Getter; + +@Getter +public class GlobalRuntimeException extends RuntimeException { + + private final ErrorCode errorCode; + + public GlobalRuntimeException(ErrorCode errorCode) { + super(); + this.errorCode = errorCode; + } +} diff --git a/src/main/java/com/livable/server/core/response/ApiResponse.java b/src/main/java/com/livable/server/core/response/ApiResponse.java new file mode 100644 index 00000000..eeeafc81 --- /dev/null +++ b/src/main/java/com/livable/server/core/response/ApiResponse.java @@ -0,0 +1,56 @@ +package com.livable.server.core.response; + +import com.livable.server.core.exception.ErrorCode; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.lang.NonNull; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ApiResponse { + + public static ResponseEntity> success(@NonNull HttpStatus httpStatus) { + return ResponseEntity.status(httpStatus) + .build(); + } + + public static ResponseEntity> success(@NonNull T data, @NonNull HttpStatus httpStatus) { + return ResponseEntity.status(httpStatus) + .body(Success.of(data)); + } + + public static ResponseEntity error(@NonNull String message, @NonNull HttpStatus httpStatus) { + return ResponseEntity.status(httpStatus) + .body(Error.of(message)); + } + + public static ResponseEntity error(@NonNull ErrorCode errorCode) { + return ResponseEntity.status(errorCode.getHttpStatus()) + .body(Error.of(errorCode.getMessage())); + } + + @Getter + @AllArgsConstructor(access = AccessLevel.PRIVATE) + public static class Error { + + private String message; + + public static Error of(@NonNull String errorMessage) { + return new Error(errorMessage); + } + } + + @Getter + @AllArgsConstructor(access = AccessLevel.PRIVATE) + public static class Success { + + private T data; + + public static Success of(@NonNull T data) { + return new Success<>(data); + } + } +} diff --git a/src/main/java/com/livable/server/entity/BaseTimeEntity.java b/src/main/java/com/livable/server/entity/BaseTimeEntity.java index 7f00ea0b..72f35efb 100644 --- a/src/main/java/com/livable/server/entity/BaseTimeEntity.java +++ b/src/main/java/com/livable/server/entity/BaseTimeEntity.java @@ -2,12 +2,10 @@ import lombok.Getter; -import lombok.experimental.SuperBuilder; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.Column; import javax.persistence.EntityListeners; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; diff --git a/src/main/java/com/livable/server/entity/Building.java b/src/main/java/com/livable/server/entity/Building.java index fe6182f9..be0eafaa 100644 --- a/src/main/java/com/livable/server/entity/Building.java +++ b/src/main/java/com/livable/server/entity/Building.java @@ -1,11 +1,8 @@ package com.livable.server.entity; import lombok.*; -import org.hibernate.annotations.ColumnDefault; -import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; -import java.time.LocalDateTime; import java.time.LocalTime; @Getter diff --git a/src/main/java/com/livable/server/entity/CafeteriaReview.java b/src/main/java/com/livable/server/entity/CafeteriaReview.java index 0f60538e..8333eb18 100644 --- a/src/main/java/com/livable/server/entity/CafeteriaReview.java +++ b/src/main/java/com/livable/server/entity/CafeteriaReview.java @@ -17,6 +17,7 @@ public class CafeteriaReview extends Review { @Column(nullable = false) private Evaluation taste; + @JoinColumn(nullable = false) @ManyToOne(fetch = FetchType.LAZY) private Building building; } diff --git a/src/main/java/com/livable/server/entity/CommonPlace.java b/src/main/java/com/livable/server/entity/CommonPlace.java index 741c52d7..5ee2aa00 100644 --- a/src/main/java/com/livable/server/entity/CommonPlace.java +++ b/src/main/java/com/livable/server/entity/CommonPlace.java @@ -19,9 +19,12 @@ public class CommonPlace extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY) private Building building; + @Column(nullable = false) private String name; + @Column(nullable = false) private String floor; + @Column(nullable = false) private String roomNumber; } diff --git a/src/main/java/com/livable/server/entity/Evaluation.java b/src/main/java/com/livable/server/entity/Evaluation.java index a2885277..fdbdfec2 100644 --- a/src/main/java/com/livable/server/entity/Evaluation.java +++ b/src/main/java/com/livable/server/entity/Evaluation.java @@ -3,6 +3,5 @@ public enum Evaluation { GOOD, - BAD, - ; + BAD; } diff --git a/src/main/java/com/livable/server/entity/Invitation.java b/src/main/java/com/livable/server/entity/Invitation.java index 796a72e1..ff8d6a33 100644 --- a/src/main/java/com/livable/server/entity/Invitation.java +++ b/src/main/java/com/livable/server/entity/Invitation.java @@ -1,11 +1,9 @@ package com.livable.server.entity; import lombok.*; -import org.hibernate.annotations.ColumnDefault; import javax.persistence.*; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.LocalTime; @Getter @@ -43,5 +41,4 @@ public class Invitation extends BaseTimeEntity { @Column(nullable = false) private LocalTime endTime; - } diff --git a/src/main/java/com/livable/server/entity/InvitationPurpose.java b/src/main/java/com/livable/server/entity/InvitationPurpose.java index ff58ffc7..4cafa97b 100644 --- a/src/main/java/com/livable/server/entity/InvitationPurpose.java +++ b/src/main/java/com/livable/server/entity/InvitationPurpose.java @@ -7,6 +7,5 @@ public enum InvitationPurpose { PERIOD_WORK, SEMINAR, AFTER_SERVICE, - ETC, - ; + ETC; } diff --git a/src/main/java/com/livable/server/entity/LunchBoxReview.java b/src/main/java/com/livable/server/entity/LunchBoxReview.java index 6c6f158a..a04f7bc8 100644 --- a/src/main/java/com/livable/server/entity/LunchBoxReview.java +++ b/src/main/java/com/livable/server/entity/LunchBoxReview.java @@ -1,9 +1,11 @@ package com.livable.server.entity; -import lombok.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import javax.persistence.*; +import javax.persistence.Entity; @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/com/livable/server/entity/Member.java b/src/main/java/com/livable/server/entity/Member.java index b0706ee9..32511131 100644 --- a/src/main/java/com/livable/server/entity/Member.java +++ b/src/main/java/com/livable/server/entity/Member.java @@ -1,7 +1,6 @@ package com.livable.server.entity; import lombok.*; -import org.hibernate.annotations.ColumnDefault; import javax.persistence.*; diff --git a/src/main/java/com/livable/server/entity/MenuChoiceResult.java b/src/main/java/com/livable/server/entity/MenuChoiceResult.java index 70ca60e9..eed7411a 100644 --- a/src/main/java/com/livable/server/entity/MenuChoiceResult.java +++ b/src/main/java/com/livable/server/entity/MenuChoiceResult.java @@ -1,7 +1,6 @@ package com.livable.server.entity; import lombok.*; -import org.hibernate.annotations.ColumnDefault; import javax.persistence.*; import java.time.LocalDate; diff --git a/src/main/java/com/livable/server/entity/Point.java b/src/main/java/com/livable/server/entity/Point.java index 6ab3d481..1dfdf0a8 100644 --- a/src/main/java/com/livable/server/entity/Point.java +++ b/src/main/java/com/livable/server/entity/Point.java @@ -1,7 +1,6 @@ package com.livable.server.entity; import lombok.*; -import org.hibernate.annotations.ColumnDefault; import javax.persistence.*; diff --git a/src/main/java/com/livable/server/entity/PointCode.java b/src/main/java/com/livable/server/entity/PointCode.java index 7b82116b..3c419a72 100644 --- a/src/main/java/com/livable/server/entity/PointCode.java +++ b/src/main/java/com/livable/server/entity/PointCode.java @@ -13,8 +13,7 @@ public enum PointCode { PA03("오점완 7일차 달성 보상"), PA04("오점완 14일차 달성 보상"), PA05("오점완 21일차 달성 보상"), - PM00("제휴 카페 메뉴 할인에 대한 포인트 사용"), - ; + PM00("제휴 카페 메뉴 할인에 대한 포인트 사용"); private final String description; } diff --git a/src/main/java/com/livable/server/entity/PointLog.java b/src/main/java/com/livable/server/entity/PointLog.java index 9137f84c..0b0d9eb2 100644 --- a/src/main/java/com/livable/server/entity/PointLog.java +++ b/src/main/java/com/livable/server/entity/PointLog.java @@ -3,7 +3,6 @@ import lombok.*; import javax.persistence.*; -import java.time.LocalDate; @Getter @Builder diff --git a/src/main/java/com/livable/server/entity/Reservation.java b/src/main/java/com/livable/server/entity/Reservation.java index bfb71908..ec23e5d5 100644 --- a/src/main/java/com/livable/server/entity/Reservation.java +++ b/src/main/java/com/livable/server/entity/Reservation.java @@ -4,7 +4,6 @@ import javax.persistence.*; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.LocalTime; @Getter diff --git a/src/main/java/com/livable/server/entity/RestaurantCategory.java b/src/main/java/com/livable/server/entity/RestaurantCategory.java index 0765f4bd..b98fca14 100644 --- a/src/main/java/com/livable/server/entity/RestaurantCategory.java +++ b/src/main/java/com/livable/server/entity/RestaurantCategory.java @@ -3,6 +3,5 @@ public enum RestaurantCategory { RESTAURANT, - CAFE, - ; + CAFE; } diff --git a/src/main/java/com/livable/server/entity/RestaurantReview.java b/src/main/java/com/livable/server/entity/RestaurantReview.java index 0fb349bf..40a968bb 100644 --- a/src/main/java/com/livable/server/entity/RestaurantReview.java +++ b/src/main/java/com/livable/server/entity/RestaurantReview.java @@ -1,6 +1,9 @@ package com.livable.server.entity; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import javax.persistence.*; diff --git a/src/main/java/com/livable/server/entity/Review.java b/src/main/java/com/livable/server/entity/Review.java index 8567da1a..00afb006 100644 --- a/src/main/java/com/livable/server/entity/Review.java +++ b/src/main/java/com/livable/server/entity/Review.java @@ -2,7 +2,6 @@ import lombok.*; import lombok.experimental.SuperBuilder; -import org.hibernate.annotations.DynamicInsert; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; diff --git a/src/main/java/com/livable/server/entity/Role.java b/src/main/java/com/livable/server/entity/Role.java index 827bdd37..307a887f 100644 --- a/src/main/java/com/livable/server/entity/Role.java +++ b/src/main/java/com/livable/server/entity/Role.java @@ -1,5 +1,6 @@ package com.livable.server.entity; public enum Role { - ADMIN, USER + ADMIN, + USER; } diff --git a/src/main/java/com/livable/server/invitation/controller/.gitkeep b/src/main/java/com/livable/server/invitation/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/invitation/domain/.gitkeep b/src/main/java/com/livable/server/invitation/domain/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/invitation/dto/.gitkeep b/src/main/java/com/livable/server/invitation/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/invitation/repository/.gitkeep b/src/main/java/com/livable/server/invitation/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/invitation/service/.gitkeep b/src/main/java/com/livable/server/invitation/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/member/controller/.gitkeep b/src/main/java/com/livable/server/member/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/member/dto/.gitkeep b/src/main/java/com/livable/server/member/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/member/exception/.gitkeep b/src/main/java/com/livable/server/member/exception/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/member/repository/.gitkeep b/src/main/java/com/livable/server/member/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/member/service/.gitkeep b/src/main/java/com/livable/server/member/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/menu/controller/.gitkeep b/src/main/java/com/livable/server/menu/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/menu/dto/.gitkeep b/src/main/java/com/livable/server/menu/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/menu/exception/.gitkeep b/src/main/java/com/livable/server/menu/exception/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/menu/repository/.gitkeep b/src/main/java/com/livable/server/menu/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/menu/service/.gitkeep b/src/main/java/com/livable/server/menu/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/point/controller/.gitkeep b/src/main/java/com/livable/server/point/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/point/dto/.gitkeep b/src/main/java/com/livable/server/point/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/point/exception/.gitkeep b/src/main/java/com/livable/server/point/exception/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/point/repository/.gitkeep b/src/main/java/com/livable/server/point/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/point/service/.gitkeep b/src/main/java/com/livable/server/point/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/reservation/controller/.gitkeep b/src/main/java/com/livable/server/reservation/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/reservation/domain/.gitkeep b/src/main/java/com/livable/server/reservation/domain/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/reservation/dto/.gitkeep b/src/main/java/com/livable/server/reservation/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/reservation/repository/.gitkeep b/src/main/java/com/livable/server/reservation/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/reservation/service/.gitkeep b/src/main/java/com/livable/server/reservation/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/restaurant/controller/.gitkeep b/src/main/java/com/livable/server/restaurant/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/restaurant/domain/.gitkeep b/src/main/java/com/livable/server/restaurant/domain/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/restaurant/dto/.gitkeep b/src/main/java/com/livable/server/restaurant/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/restaurant/repository/.gitkeep b/src/main/java/com/livable/server/restaurant/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/restaurant/service/.gitkeep b/src/main/java/com/livable/server/restaurant/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/review/controller/.gitkeep b/src/main/java/com/livable/server/review/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/review/domain/.gitkeep b/src/main/java/com/livable/server/review/domain/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/review/dto/.gitkeep b/src/main/java/com/livable/server/review/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/review/repository/.gitkeep b/src/main/java/com/livable/server/review/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/review/service/.gitkeep b/src/main/java/com/livable/server/review/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/visitation/controller/.gitkeep b/src/main/java/com/livable/server/visitation/controller/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/visitation/domain/.gitkeep b/src/main/java/com/livable/server/visitation/domain/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/visitation/dto/.gitkeep b/src/main/java/com/livable/server/visitation/dto/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/visitation/repository/.gitkeep b/src/main/java/com/livable/server/visitation/repository/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/livable/server/visitation/service/.gitkeep b/src/main/java/com/livable/server/visitation/service/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/test/java/com/livable/server/LivableServerApplicationTests.java b/src/test/java/com/livable/server/LivableServerApplicationTests.java index 6a40278c..52bd189e 100644 --- a/src/test/java/com/livable/server/LivableServerApplicationTests.java +++ b/src/test/java/com/livable/server/LivableServerApplicationTests.java @@ -1,5 +1,6 @@ package com.livable.server; +import com.livable.server.core.response.ApiResponse; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;