diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index 4246d468..00000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/README.md b/README.md
index 33d38a6f..a2443d26 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
# TOASTER-SERVER
-
+
+
더 이상 **링크**를 태우지 마세요. **토스트 먹듯이 간단하게!**
@@ -33,7 +34,8 @@
## 📦 ERD
-
+
+
diff --git a/linkmind/build.gradle b/linkmind/build.gradle
index d1526bf8..99c38747 100644
--- a/linkmind/build.gradle
+++ b/linkmind/build.gradle
@@ -34,28 +34,36 @@ dependencies {
implementation 'mysql:mysql-connector-java:8.0.32'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
+
+ runtimeOnly 'com.h2database:h2'
+
testImplementation 'org.springframework.boot:spring-boot-starter-test'
- runtimeOnly 'com.mysql:mysql-connector-j'
- implementation 'org.springframework.boot:spring-boot-starter-validation'
+ testImplementation group: 'com.h2database', name: 'h2', version: '2.2.224'
+ testCompileOnly 'org.projectlombok:lombok'
+ testAnnotationProcessor 'org.projectlombok:lombok'
- implementation 'io.sentry:sentry-spring-boot-starter:5.7.0'
- //JWT
- implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
- implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
- implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'
+ runtimeOnly 'com.mysql:mysql-connector-j'
+ implementation 'org.springframework.boot:spring-boot-starter-validation'
+
+ implementation 'io.sentry:sentry-spring-boot-starter:5.7.0'
+ //JWT
+ implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
+ implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
+ implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'
// FCM
implementation 'com.google.firebase:firebase-admin:9.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.10.0' // Firebase 서버로 푸시 메시지 전송 시 필요
- implementation 'org.springframework.boot:spring-boot-starter-actuator'
- //Query DSL
- implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
- annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
- annotationProcessor "jakarta.annotation:jakarta.annotation-api"
- annotationProcessor "jakarta.persistence:jakarta.persistence-api"
+ implementation 'org.springframework.boot:spring-boot-starter-actuator'
+
+//Query DSL
+ implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
+ annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
+ annotationProcessor "jakarta.annotation:jakarta.annotation-api"
+ annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// S3 AWS
implementation("software.amazon.awssdk:bom:2.21.0")
@@ -71,9 +79,89 @@ dependencies {
implementation 'io.sentry:sentry-spring-boot-starter:5.7.0'
+ // openfeign
+ implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
+
+}
+
+dependencyManagement {
+ imports {
+ mavenBom("org.springframework.cloud:spring-cloud-dependencies:2023.0.3")
+ }
}
+//sourceSets {
+// main {
+// java {
+// srcDirs = ["$projectDir/src/main/java", "$projectDir/build/generated"]
+// }
+// }
+//}
+//compileJava { options.compilerArgs << '-parameters'}
tasks.named('test') {
- useJUnitPlatform()
+ useJUnitPlatform()
+// finalizedBy 'jacocoTestReport' // test가 끝나면 jacocoTestReport 동작
}
+//// jacoco report 설정
+//jacocoTestReport {
+// reports {
+// // html로 report 생성하기
+// // 빌드경로/jacoco/report.html 폴더 내부로 경로 설정
+// html.destination file("$jacoco/report.html")
+// }
+//
+// // jacocoTestReport가 끝나면 jacocoTestCoverageVerification 동작
+// finalizedBy 'jacocoTestCoverageVerification'
+//}
+//
+//// jacoco 커버리지 검증 설정
+//jacocoTestCoverageVerification {
+// violationRules {
+// rule {
+// enabled = true // 커버리지 적용 여부
+// element = 'CLASS' // 커버리지 적용 단위
+//
+// // 라인 커버리지 설정
+// // 적용 대상 전체 소스 코드들을 한줄 한줄 따졌을 때 테스트 코드가 작성되어 있는 줄의 빈도
+// // 테스트 코드가 작성되어 있는 비율이 90% 이상이어야 함
+// limit {
+// counter = 'LINE'
+// value = 'COVEREDRATIO'
+// minimum = 0.10
+// }
+//
+// // 브랜치 커버리지 설정
+// // if-else 등을 활용하여 발생되는 분기들 중 테스트 코드가 작성되어 있는 빈도
+// // 테스트 코드가 작성되어 있는 비율이 90% 이상이어야 함
+// limit {
+// counter = 'BRANCH'
+// value = 'COVEREDRATIO'
+// minimum = 0.00
+// }
+//
+// // 라인 최대 갯수 설정
+// // 빈 줄을 제외하고 하나의 자바 파일에서 작성될 수 있는 최대 라인 갯수
+// // 한 파일에 최대 500줄까지 작성되어야 함
+// limit {
+// counter = 'LINE'
+// value = 'TOTALCOUNT'
+// maximum = 500
+// }
+// // 커버리지 체크를 제외할 클래스들
+// excludes = [
+// // '*.test.*',
+// '*.common.*',
+// '*.config.*',
+// '*.controller.*',
+// '*.domain.*',
+// '*.exception.*',
+// '*.external.*',
+// '*.infrastructure.*',
+// '*.auth.*',
+// '*.service.*'
+//
+// ]
+// }
+// }
+//}
diff --git a/linkmind/src/main/java/com/app/toaster/ToasterApplication.java b/linkmind/src/main/java/com/app/toaster/ToasterApplication.java
index cc0c595a..d85e4b44 100644
--- a/linkmind/src/main/java/com/app/toaster/ToasterApplication.java
+++ b/linkmind/src/main/java/com/app/toaster/ToasterApplication.java
@@ -3,6 +3,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cglib.core.Local;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import javax.annotation.PostConstruct;
@@ -10,6 +11,7 @@
import java.util.TimeZone;
@SpringBootApplication
+@EnableFeignClients
@EnableJpaAuditing
public class ToasterApplication {
diff --git a/linkmind/src/main/java/com/app/toaster/controller/AuthController.java b/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java
similarity index 84%
rename from linkmind/src/main/java/com/app/toaster/controller/AuthController.java
rename to linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java
index 0bd3f6a7..9d53f49c 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/AuthController.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller;
+package com.app.toaster.auth.controller;
import java.io.IOException;
@@ -13,13 +13,13 @@
import com.app.toaster.common.dto.ApiResponse;
// import com.app.toaster.config.UserId;
-import com.app.toaster.config.UserId;
-import com.app.toaster.controller.request.auth.SignInRequestDto;
-import com.app.toaster.controller.response.auth.SignInResponseDto;
-import com.app.toaster.controller.response.auth.TokenHealthDto;
-import com.app.toaster.controller.response.auth.TokenResponseDto;
+import com.app.toaster.common.config.UserId;
+import com.app.toaster.auth.controller.request.SignInRequestDto;
+import com.app.toaster.auth.controller.response.SignInResponseDto;
+import com.app.toaster.auth.controller.response.TokenHealthDto;
+import com.app.toaster.auth.controller.response.TokenResponseDto;
import com.app.toaster.exception.Success;
-import com.app.toaster.service.auth.AuthService;
+import com.app.toaster.auth.service.AuthService;
import lombok.RequiredArgsConstructor;
diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/auth/SignInRequestDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/request/SignInRequestDto.java
similarity index 59%
rename from linkmind/src/main/java/com/app/toaster/controller/request/auth/SignInRequestDto.java
rename to linkmind/src/main/java/com/app/toaster/auth/controller/request/SignInRequestDto.java
index a8876bfe..72742468 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/request/auth/SignInRequestDto.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/controller/request/SignInRequestDto.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.request.auth;
+package com.app.toaster.auth.controller.request;
public record SignInRequestDto(String socialType, String fcmToken) {
}
diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/auth/SignInResponseDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/response/SignInResponseDto.java
similarity index 89%
rename from linkmind/src/main/java/com/app/toaster/controller/response/auth/SignInResponseDto.java
rename to linkmind/src/main/java/com/app/toaster/auth/controller/response/SignInResponseDto.java
index eee40bf6..a7269605 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/response/auth/SignInResponseDto.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/controller/response/SignInResponseDto.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.response.auth;
+package com.app.toaster.auth.controller.response;
public record SignInResponseDto(Long userId, String accessToken, String refreshToken, String fcmToken, Boolean isRegistered,Boolean fcmIsAllowed, String profile) {
public static SignInResponseDto of(Long userId, String accessToken, String refreshToken, String fcmToken,
diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenHealthDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenHealthDto.java
similarity index 75%
rename from linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenHealthDto.java
rename to linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenHealthDto.java
index 7d65e852..42455b87 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenHealthDto.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenHealthDto.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.response.auth;
+package com.app.toaster.auth.controller.response;
public record TokenHealthDto(boolean tokenHealth) {
public static TokenHealthDto of(boolean tokenHealth){return new TokenHealthDto(tokenHealth);}
diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenResponseDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenResponseDto.java
similarity index 81%
rename from linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenResponseDto.java
rename to linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenResponseDto.java
index 37f2e926..a162c1ec 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenResponseDto.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenResponseDto.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.response.auth;
+package com.app.toaster.auth.controller.response;
public record TokenResponseDto(String accessToken, String refreshToken) {
public static TokenResponseDto of(String accessToken, String refreshToken){
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java
similarity index 79%
rename from linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java
index 60db12f2..497234f8 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java
@@ -1,38 +1,41 @@
-package com.app.toaster.service.auth;
+package com.app.toaster.auth.service;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.client.RestTemplate;
-
-import com.app.toaster.common.dto.ApiResponse;
-import com.app.toaster.config.jwt.JwtService;
-import com.app.toaster.controller.request.auth.SignInRequestDto;
-import com.app.toaster.controller.response.auth.SignInResponseDto;
-import com.app.toaster.controller.response.auth.TokenHealthDto;
-import com.app.toaster.controller.response.auth.TokenResponseDto;
-import com.app.toaster.domain.SocialType;
-import com.app.toaster.domain.User;
+
+
+import com.app.toaster.common.config.jwt.JwtService;
+import com.app.toaster.auth.controller.request.SignInRequestDto;
+import com.app.toaster.auth.controller.response.SignInResponseDto;
+import com.app.toaster.auth.controller.response.TokenHealthDto;
+import com.app.toaster.auth.controller.response.TokenResponseDto;
+import com.app.toaster.user.domain.SocialType;
+import com.app.toaster.user.domain.User;
import com.app.toaster.exception.Error;
-import com.app.toaster.exception.Success;
-import com.app.toaster.exception.model.BadRequestException;
import com.app.toaster.exception.model.CustomException;
import com.app.toaster.exception.model.NotFoundException;
import com.app.toaster.exception.model.UnprocessableEntityException;
+import com.app.toaster.external.client.discord.DiscordMessageProvider;
+import com.app.toaster.external.client.discord.NotificationDto;
+import com.app.toaster.external.client.discord.NotificationType;
import com.app.toaster.external.client.slack.SlackApi;
-import com.app.toaster.infrastructure.CategoryRepository;
-import com.app.toaster.infrastructure.TimerRepository;
-import com.app.toaster.infrastructure.ToastRepository;
-import com.app.toaster.infrastructure.UserRepository;
-import com.app.toaster.service.auth.apple.AppleSignInService;
-import com.app.toaster.service.auth.kakao.KakaoSignInService;
-import com.app.toaster.service.auth.kakao.LoginResult;
-import com.app.toaster.service.toast.ToastService;
+import com.app.toaster.category.infrastructure.CategoryRepository;
+import com.app.toaster.timer.infrastructure.TimerRepository;
+import com.app.toaster.toast.infrastructure.ToastRepository;
+import com.app.toaster.user.infrastructure.UserRepository;
+import com.app.toaster.popup.infrastructure.PopupManagerRepository;
+import com.app.toaster.auth.service.apple.AppleSignInService;
+import com.app.toaster.auth.service.kakao.KakaoSignInService;
+import com.app.toaster.auth.service.kakao.LoginResult;
+import com.app.toaster.toast.service.ToastService;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+@Slf4j
@Service
@RequiredArgsConstructor
public class AuthService {
@@ -43,8 +46,10 @@ public class AuthService {
private final UserRepository userRepository;
private final CategoryRepository categoryRepository;
+ private final PopupManagerRepository popupManagerRepository;
private final SlackApi slackApi;
+ private final DiscordMessageProvider discordMessageProvider;
private final Long TOKEN_EXPIRATION_TIME_ACCESS = 7*24*60 * 60 * 1000L; //7일
@@ -73,7 +78,8 @@ public SignInResponseDto signIn(String socialAccessToken, SignInRequestDto reque
.socialType(socialType).build();
newUser.updateFcmIsAllowed(true); //신규 유저면 true박고
userRepository.save(newUser);
- slackApi.sendSuccess(Success.LOGIN_SUCCESS);
+
+ discordMessageProvider.sendNotification(new NotificationDto(NotificationType.SIGNUP,null,null));
}
User user = userRepository.findBySocialIdAndSocialType(socialId, socialType)
@@ -149,6 +155,7 @@ public void withdraw(Long userId) {
}
timerRepository.deleteAllByUser(user);
categoryRepository.deleteAllByUser(user);
+ popupManagerRepository.deleteAllByUserId(userId);
Long res = userRepository.deleteByUserId(userId); //res가 삭제된 컬럼의 개수 즉, 1이 아니면 뭔가 알 수 없는 에러.
@@ -163,4 +170,5 @@ public TokenHealthDto checkHealthOfToken(String refreshToken){
return TokenHealthDto.of(jwtService.verifyToken(refreshToken));
}
+
}
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/AppleSignInService.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/AppleSignInService.java
similarity index 78%
rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/AppleSignInService.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/AppleSignInService.java
index 7c7b8330..07630819 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/AppleSignInService.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/AppleSignInService.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.apple;
+package com.app.toaster.auth.service.apple;
import java.security.PublicKey;
import java.util.Map;
@@ -7,11 +7,10 @@
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClient;
-import com.app.toaster.service.auth.apple.response.ApplePublicKeys;
-import com.app.toaster.service.auth.apple.verify.AppleJwtParser;
-import com.app.toaster.service.auth.apple.verify.PublicKeyGenerator;
-import com.app.toaster.service.auth.kakao.LoginResult;
-import com.mysql.cj.log.Log;
+import com.app.toaster.auth.service.apple.response.ApplePublicKeys;
+import com.app.toaster.auth.service.apple.verify.AppleJwtParser;
+import com.app.toaster.auth.service.apple.verify.PublicKeyGenerator;
+import com.app.toaster.auth.service.kakao.LoginResult;
import io.jsonwebtoken.Claims;
import lombok.RequiredArgsConstructor;
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKey.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKey.java
similarity index 67%
rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKey.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKey.java
index 808848bc..eb321486 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKey.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKey.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.apple.response;
+package com.app.toaster.auth.service.apple.response;
public record ApplePublicKey(
String kty,
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKeys.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKeys.java
similarity index 84%
rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKeys.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKeys.java
index 09be00ee..f7f56a30 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKeys.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKeys.java
@@ -1,12 +1,10 @@
-package com.app.toaster.service.auth.apple.response;
+package com.app.toaster.auth.service.apple.response;
import java.util.List;
import com.app.toaster.exception.Error;
import com.app.toaster.exception.model.CustomException;
-import lombok.extern.slf4j.Slf4j;
-
public record ApplePublicKeys(List keys) {
public ApplePublicKey getMatchesKey(String alg, String kid) {
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/AppleJwtParser.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/AppleJwtParser.java
similarity index 97%
rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/AppleJwtParser.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/AppleJwtParser.java
index 1786b1d9..59febec3 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/AppleJwtParser.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/AppleJwtParser.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.apple.verify;
+package com.app.toaster.auth.service.apple.verify;
import java.security.PublicKey;
import java.util.Base64;
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/EncryptUtils.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/EncryptUtils.java
similarity index 93%
rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/EncryptUtils.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/EncryptUtils.java
index 0635998e..d1939c09 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/EncryptUtils.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/EncryptUtils.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.apple.verify;
+package com.app.toaster.auth.service.apple.verify;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/PublicKeyGenerator.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/PublicKeyGenerator.java
similarity index 88%
rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/PublicKeyGenerator.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/PublicKeyGenerator.java
index 11080824..6b272d5f 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/PublicKeyGenerator.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/PublicKeyGenerator.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.apple.verify;
+package com.app.toaster.auth.service.apple.verify;
import java.math.BigInteger;
import java.security.KeyFactory;
@@ -13,10 +13,8 @@
import com.app.toaster.exception.Error;
import com.app.toaster.exception.model.CustomException;
-import com.app.toaster.service.auth.apple.response.ApplePublicKey;
-import com.app.toaster.service.auth.apple.response.ApplePublicKeys;
-
-import lombok.extern.slf4j.Slf4j;
+import com.app.toaster.auth.service.apple.response.ApplePublicKey;
+import com.app.toaster.auth.service.apple.response.ApplePublicKeys;
@Component
public class PublicKeyGenerator {
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoAccount.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoAccount.java
similarity index 56%
rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoAccount.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoAccount.java
index 131902fd..d6582e1e 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoAccount.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoAccount.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.kakao;
+package com.app.toaster.auth.service.kakao;
public record KakaoAccount(KakaoUserProfile profile) {
}
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoSignInService.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoSignInService.java
similarity index 96%
rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoSignInService.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoSignInService.java
index 814a4ba3..c0e1bbc5 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoSignInService.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoSignInService.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.kakao;
+package com.app.toaster.auth.service.kakao;
import java.util.HashMap;
import java.util.Map;
@@ -13,7 +13,6 @@
import org.springframework.web.client.RestTemplate;
import com.app.toaster.exception.Error;
-import com.app.toaster.exception.model.ForbiddenException;
import com.app.toaster.exception.model.UnprocessableEntityException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.JsonArray;
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserProfile.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserProfile.java
similarity index 63%
rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserProfile.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserProfile.java
index 9044293c..5667e160 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserProfile.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserProfile.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.kakao;
+package com.app.toaster.auth.service.kakao;
public record KakaoUserProfile(String nickname, String profileImageUrl) {
}
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserResponse.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserResponse.java
similarity index 80%
rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserResponse.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserResponse.java
index 253ce5b9..c87a5883 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserResponse.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserResponse.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.kakao;
+package com.app.toaster.auth.service.kakao;
public record KakaoUserResponse(KakaoAccount kakaoAccount) {
public static KakaoUserResponse of(KakaoAccount kakaoAccount){
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/LoginResult.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/LoginResult.java
similarity index 81%
rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/LoginResult.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/LoginResult.java
index 556e48c8..0cf22581 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/LoginResult.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/LoginResult.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.kakao;
+package com.app.toaster.auth.service.kakao;
public record LoginResult(String id, String profile, String nickname) {
public static LoginResult of(String id, String profile,String nickname){
diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/Strategy.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/Strategy.java
similarity index 51%
rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/Strategy.java
rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/Strategy.java
index bfcdf390..1ebd0793 100644
--- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/Strategy.java
+++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/Strategy.java
@@ -1,4 +1,4 @@
-package com.app.toaster.service.auth.kakao;
+package com.app.toaster.auth.service.kakao;
public enum Strategy {
WITHDRAWAL,
diff --git a/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java
similarity index 82%
rename from linkmind/src/main/java/com/app/toaster/controller/CategoryController.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java
index 99e4446b..dd4cb164 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java
@@ -1,27 +1,26 @@
-package com.app.toaster.controller;
+package com.app.toaster.category.controller;
+import com.app.toaster.category.controller.request.ChangeCateoryPriorityDto;
+import com.app.toaster.category.controller.request.ChangeCateoryTitleDto;
+import com.app.toaster.category.controller.request.CreateCategoryDto;
import com.app.toaster.common.dto.ApiResponse;
-import com.app.toaster.config.UserId;
-import com.app.toaster.controller.request.category.*;
-import com.app.toaster.controller.response.category.CategoriesResponse;
-import com.app.toaster.controller.response.toast.ToastFilter;
-import com.app.toaster.controller.response.category.CategoryResponse;
-import com.app.toaster.controller.response.category.GetCategoryResponseDto;
-import com.app.toaster.controller.valid.Severity;
-import com.app.toaster.controller.valid.TitleValid;
+import com.app.toaster.common.config.UserId;
+import com.app.toaster.category.controller.response.CategoriesResponse;
+import com.app.toaster.toast.controller.response.ToastFilter;
+import com.app.toaster.category.controller.response.GetCategoryResponseDto;
+import com.app.toaster.utils.valid.Severity;
+import com.app.toaster.utils.valid.TitleValid;
import com.app.toaster.exception.Success;
-import com.app.toaster.service.category.CategoryService;
-import com.app.toaster.service.search.SearchService;
+import com.app.toaster.category.service.CategoryService;
+import com.app.toaster.search.service.SearchService;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Pattern;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
-import java.util.List;
@RestController
@RequestMapping("/category")
diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryPriorityDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryPriorityDto.java
similarity index 76%
rename from linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryPriorityDto.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryPriorityDto.java
index c3276d18..4337f794 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryPriorityDto.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryPriorityDto.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.request.category;
+package com.app.toaster.category.controller.request;
import jakarta.validation.constraints.NotNull;
diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryTitleDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java
similarity index 57%
rename from linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryTitleDto.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java
index c05e4c16..9a9f7b53 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryTitleDto.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java
@@ -1,7 +1,7 @@
-package com.app.toaster.controller.request.category;
+package com.app.toaster.category.controller.request;
-import com.app.toaster.controller.valid.Severity;
-import com.app.toaster.controller.valid.TitleValid;
+import com.app.toaster.utils.valid.Severity;
+import com.app.toaster.utils.valid.TitleValid;
import jakarta.validation.constraints.NotNull;
public record ChangeCateoryTitleDto(
diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/CreateCategoryDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java
similarity index 50%
rename from linkmind/src/main/java/com/app/toaster/controller/request/category/CreateCategoryDto.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java
index 39ba634b..64807482 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/request/category/CreateCategoryDto.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java
@@ -1,7 +1,7 @@
-package com.app.toaster.controller.request.category;
+package com.app.toaster.category.controller.request;
-import com.app.toaster.controller.valid.Severity;
-import com.app.toaster.controller.valid.TitleValid;
+import com.app.toaster.utils.valid.Severity;
+import com.app.toaster.utils.valid.TitleValid;
import jakarta.validation.constraints.NotNull;
public record CreateCategoryDto(@TitleValid(payload = Severity.Error.class) @NotNull String categoryTitle) {
diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/DeleteCategoryDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/DeleteCategoryDto.java
similarity index 75%
rename from linkmind/src/main/java/com/app/toaster/controller/request/category/DeleteCategoryDto.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/request/DeleteCategoryDto.java
index a2c705c4..f65e784b 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/request/category/DeleteCategoryDto.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/DeleteCategoryDto.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.request.category;
+package com.app.toaster.category.controller.request;
import jakarta.validation.constraints.NotNull;
diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoriesResponse.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoriesResponse.java
similarity index 84%
rename from linkmind/src/main/java/com/app/toaster/controller/response/category/CategoriesResponse.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/response/CategoriesResponse.java
index 6c4c5d79..abb89d63 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoriesResponse.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoriesResponse.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.response.category;
+package com.app.toaster.category.controller.response;
import java.util.List;
diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoryResponse.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoryResponse.java
similarity index 73%
rename from linkmind/src/main/java/com/app/toaster/controller/response/category/CategoryResponse.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/response/CategoryResponse.java
index 8abb5567..84ee62f4 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoryResponse.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoryResponse.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.response.category;
+package com.app.toaster.category.controller.response;
import lombok.Builder;
diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/DuplicatedResponse.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/DuplicatedResponse.java
similarity index 75%
rename from linkmind/src/main/java/com/app/toaster/controller/response/category/DuplicatedResponse.java
rename to linkmind/src/main/java/com/app/toaster/category/controller/response/DuplicatedResponse.java
index 8254fbde..606fd69c 100644
--- a/linkmind/src/main/java/com/app/toaster/controller/response/category/DuplicatedResponse.java
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/DuplicatedResponse.java
@@ -1,4 +1,4 @@
-package com.app.toaster.controller.response.category;
+package com.app.toaster.category.controller.response;
public record DuplicatedResponse(Boolean isDupicated) {
public static DuplicatedResponse of(Boolean isDupicated){
diff --git a/linkmind/src/main/java/com/app/toaster/category/controller/response/GetCategoryResponseDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/GetCategoryResponseDto.java
new file mode 100644
index 00000000..4424f4f4
--- /dev/null
+++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/GetCategoryResponseDto.java
@@ -0,0 +1,14 @@
+package com.app.toaster.category.controller.response;
+
+import com.app.toaster.toast.controller.response.ToastDto;
+import lombok.Builder;
+
+import java.util.List;
+
+@Builder
+public record GetCategoryResponseDto(
+ int allToastNum,
+ List toastListDto
+){
+
+}
diff --git a/linkmind/src/main/java/com/app/toaster/domain/Category.java b/linkmind/src/main/java/com/app/toaster/category/domain/Category.java
similarity index 88%
rename from linkmind/src/main/java/com/app/toaster/domain/Category.java
rename to linkmind/src/main/java/com/app/toaster/category/domain/Category.java
index 82003080..9b3c34c7 100644
--- a/linkmind/src/main/java/com/app/toaster/domain/Category.java
+++ b/linkmind/src/main/java/com/app/toaster/category/domain/Category.java
@@ -1,12 +1,11 @@
-package com.app.toaster.domain;
+package com.app.toaster.category.domain;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
+import com.app.toaster.timer.domain.Reminder;
+import com.app.toaster.user.domain.User;
import jakarta.persistence.*;
-import jakarta.validation.constraints.Size;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java b/linkmind/src/main/java/com/app/toaster/category/infrastructure/CategoryRepository.java
similarity index 90%
rename from linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java
rename to linkmind/src/main/java/com/app/toaster/category/infrastructure/CategoryRepository.java
index 0b29c63b..12b86c06 100644
--- a/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java
+++ b/linkmind/src/main/java/com/app/toaster/category/infrastructure/CategoryRepository.java
@@ -1,20 +1,17 @@
-package com.app.toaster.infrastructure;
+package com.app.toaster.category.infrastructure;
import java.util.ArrayList;
import java.util.List;
-import java.util.Optional;
-import com.app.toaster.controller.request.category.ChangeCateoryTitleDto;
-import com.app.toaster.domain.User;
+import com.app.toaster.user.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
-import com.app.toaster.domain.Category;
+import com.app.toaster.category.domain.Category;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
-import org.springframework.transaction.annotation.Transactional;
public interface CategoryRepository extends JpaRepository {
diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java b/linkmind/src/main/java/com/app/toaster/category/service/CategoryService.java
similarity index 87%
rename from linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java
rename to linkmind/src/main/java/com/app/toaster/category/service/CategoryService.java
index b1fd6de1..fd7ffbd2 100644
--- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java
+++ b/linkmind/src/main/java/com/app/toaster/category/service/CategoryService.java
@@ -1,24 +1,26 @@
-package com.app.toaster.service.category;
-
-import com.app.toaster.controller.request.category.*;
-import com.app.toaster.controller.response.category.CategoriesResponse;
-import com.app.toaster.controller.response.category.DuplicatedResponse;
-import com.app.toaster.controller.response.toast.ToastDto;
-import com.app.toaster.controller.response.toast.ToastFilter;
-import com.app.toaster.controller.response.category.CategoryResponse;
-import com.app.toaster.controller.response.category.GetCategoryResponseDto;
-import com.app.toaster.domain.Category;
-import com.app.toaster.domain.Reminder;
-import com.app.toaster.domain.Toast;
-import com.app.toaster.domain.User;
+package com.app.toaster.category.service;
+
+import com.app.toaster.category.controller.request.ChangeCateoryPriorityDto;
+import com.app.toaster.category.controller.request.ChangeCateoryTitleDto;
+import com.app.toaster.category.controller.request.CreateCategoryDto;
+import com.app.toaster.category.controller.response.CategoriesResponse;
+import com.app.toaster.category.controller.response.DuplicatedResponse;
+import com.app.toaster.toast.controller.response.ToastDto;
+import com.app.toaster.toast.controller.response.ToastFilter;
+import com.app.toaster.category.controller.response.CategoryResponse;
+import com.app.toaster.category.controller.response.GetCategoryResponseDto;
+import com.app.toaster.category.domain.Category;
+import com.app.toaster.timer.domain.Reminder;
+import com.app.toaster.toast.domain.Toast;
+import com.app.toaster.user.domain.User;
import com.app.toaster.exception.Error;
import com.app.toaster.exception.model.BadRequestException;
import com.app.toaster.exception.model.CustomException;
import com.app.toaster.exception.model.NotFoundException;
-import com.app.toaster.infrastructure.CategoryRepository;
-import com.app.toaster.infrastructure.TimerRepository;
-import com.app.toaster.infrastructure.ToastRepository;
-import com.app.toaster.infrastructure.UserRepository;
+import com.app.toaster.category.infrastructure.CategoryRepository;
+import com.app.toaster.timer.infrastructure.TimerRepository;
+import com.app.toaster.toast.infrastructure.ToastRepository;
+import com.app.toaster.user.infrastructure.UserRepository;
import lombok.RequiredArgsConstructor;
import lombok.val;
diff --git a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java
index 6be80bc7..dfc59494 100644
--- a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java
+++ b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java
@@ -20,11 +20,15 @@
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.context.request.WebRequest;
import org.springframework.web.method.annotation.HandlerMethodValidationException;
import com.app.toaster.common.dto.ApiResponse;
import com.app.toaster.exception.Error;
import com.app.toaster.exception.model.CustomException;
+import com.app.toaster.external.client.discord.DiscordMessageProvider;
+import com.app.toaster.external.client.discord.NotificationDto;
+import com.app.toaster.external.client.discord.NotificationType;
import com.app.toaster.external.client.slack.SlackApi;
import io.sentry.Sentry;
@@ -33,18 +37,20 @@
import jakarta.validation.ConstraintViolationException;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
+import org.springframework.web.servlet.resource.NoResourceFoundException;
@RestControllerAdvice
@Component
@RequiredArgsConstructor
public class ControllerExceptionAdvice {
private final SlackApi slackApi;
+ private final DiscordMessageProvider discordMessageProvider;
/**
* custom error
*/
@ExceptionHandler(CustomException.class)
- protected ResponseEntity handleCustomException(CustomException e) {
+ protected ResponseEntity handleCustomException(CustomException e , WebRequest request) {
Sentry.captureException(e);
return ResponseEntity.status(e.getHttpStatus())
.body(ApiResponse.error(e.getError(), e.getMessage()));
@@ -52,7 +58,7 @@ protected ResponseEntity handleCustomException(CustomException e) {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
- protected ResponseEntity handleConstraintDefinitionException(final MethodArgumentNotValidException e) {
+ protected ResponseEntity handleConstraintDefinitionException(final MethodArgumentNotValidException e, WebRequest request) {
FieldError fieldError = e.getBindingResult().getFieldError();
Sentry.captureException(e);
return ResponseEntity.status(e.getStatusCode())
@@ -60,7 +66,7 @@ protected ResponseEntity handleConstraintDefinitionException(final
}
@ExceptionHandler(MalformedURLException.class)
- protected ResponseEntity handleConstraintDefinitionException(final MalformedURLException e) {
+ protected ResponseEntity handleConstraintDefinitionException(final MalformedURLException e, WebRequest request) {
Sentry.captureException(e);
return ResponseEntity.status(Error.MALFORMED_URL_EXEPTION.getErrorCode())
.body(ApiResponse.error(Error.MALFORMED_URL_EXEPTION, Error.MALFORMED_URL_EXEPTION.getMessage()));
@@ -68,42 +74,49 @@ protected ResponseEntity handleConstraintDefinitionException(final
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(DateTimeParseException.class)
- protected ResponseEntity handleDateTimeParseException(final DateTimeParseException e) {
+ protected ResponseEntity handleDateTimeParseException(final DateTimeParseException e, WebRequest request) {
return ResponseEntity.status(Error.BAD_REQUEST_REMIND_TIME.getErrorCode())
.body(ApiResponse.error(Error.BAD_REQUEST_REMIND_TIME, Error.BAD_REQUEST_REMIND_TIME.getMessage()));
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
- protected ResponseEntity handleHttpRequestMethodNotSupportedException(final HttpRequestMethodNotSupportedException e) {
+ protected ResponseEntity handleHttpRequestMethodNotSupportedException(final HttpRequestMethodNotSupportedException e, WebRequest request) {
return ResponseEntity.status(e.getStatusCode())
.body(ApiResponse.error(Error.REQUEST_METHOD_VALIDATION_EXCEPTION, Error.REQUEST_METHOD_VALIDATION_EXCEPTION.getMessage()));
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
- protected ResponseEntity handleHttpMediaTypeNotSupportedException(final HttpMediaTypeNotSupportedException e) {
+ protected ResponseEntity handleHttpMediaTypeNotSupportedException(final HttpMediaTypeNotSupportedException e, WebRequest request) {
return ResponseEntity.status(e.getStatusCode())
.body(ApiResponse.error(Error.REQUEST_MEDIA_TYPE_VALIDATION_EXCEPTION, Error.REQUEST_MEDIA_TYPE_VALIDATION_EXCEPTION.getMessage()));
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingServletRequestParameterException.class)
- protected ResponseEntity MissingServletRequestParameterException(final MissingServletRequestParameterException e) {
+ protected ResponseEntity MissingServletRequestParameterException(final MissingServletRequestParameterException e, WebRequest request) {
return ResponseEntity.status(e.getStatusCode())
.body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage()));
}
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ @ExceptionHandler(NoResourceFoundException.class)
+ protected ResponseEntity ServletCrawlerException(final NoResourceFoundException e, WebRequest request) {
+ return ResponseEntity.status(e.getStatusCode())
+ .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage()));
+ }
+
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
- protected ResponseEntity MissingServletRequestParameterException(final HttpMessageNotReadableException e) {
+ protected ResponseEntity MissingServletRequestParameterException(final HttpMessageNotReadableException e, WebRequest request) {
return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode())
.body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage()));
}
@ResponseStatus(HttpStatus.BAD_REQUEST) // 커스텀 validation 에러 핸들링.
@ExceptionHandler(HandlerMethodValidationException.class)
- protected ResponseEntity ConstraintViolationException(final HandlerMethodValidationException e) {
+ protected ResponseEntity ConstraintViolationException(final HandlerMethodValidationException e, WebRequest request) {
Sentry.captureException(e);
return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode())
.body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage()));
@@ -111,7 +124,7 @@ protected ResponseEntity ConstraintViolationException(final Handler
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(UnknownHostException.class)
- protected ResponseEntity UnknownHostException(final UnknownHostException e) {
+ protected ResponseEntity UnknownHostException(final UnknownHostException e, WebRequest request) {
Sentry.captureException(e);
return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode())
.body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage()));
@@ -119,7 +132,7 @@ protected ResponseEntity UnknownHostException(final UnknownHostExce
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingRequestHeaderException.class)
- protected ResponseEntity MissingRequestHeaderException(final MissingRequestHeaderException e){
+ protected ResponseEntity MissingRequestHeaderException(final MissingRequestHeaderException e, WebRequest request){
Sentry.captureException(e);
return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode())
.body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage()));
@@ -134,8 +147,10 @@ protected ResponseEntity MissingRequestHeaderException(final Missin
@ExceptionHandler(Exception.class)
protected ApiResponse