diff --git a/build.gradle b/build.gradle index da185495..7e33a036 100644 --- a/build.gradle +++ b/build.gradle @@ -2,8 +2,7 @@ plugins { id 'java-library' id 'org.springframework.boot' apply(false) id 'io.spring.dependency-management' - id 'org.sonarqube' version '4.4.1.3373' - + id 'org.sonarqube' version '4.4.1.3373' apply(false) } allprojects { @@ -17,14 +16,6 @@ allprojects { } -sonar { - properties { - property "sonar.projectKey", "CMC11th-Melly_Melly_Server" - property "sonar.organization", "cmc11th-melly" - property "sonar.host.url", "https://sonarcloud.io" - } -} - subprojects { apply plugin: 'java-library' apply plugin: 'org.springframework.boot' @@ -34,13 +25,24 @@ subprojects { apply plugin: 'jacoco-report-aggregation' + sonar { + properties { + property "sonar.projectKey", "CMC11th-Melly_Melly_Server" + property "sonar.organization", "melly" + property "sonar.host.url", "https://sonarcloud.io" + property "sonar.coverage.jacoco.xmlReportPaths", "/home/runner/work/Melly_Server/Melly_Server/core/core-api/build/reports/jacoco/testCodeCoverageReport/testCodeCoverageReport.xml" + } + } + + bootJar.enabled = false // core-api 모듈 이외에는 모두 boot 되지 않는 모듈 + jar.enabled = true // jar는 필요함 + dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudDependenciesVersion}" } } - jacoco { toolVersion = '0.8.8' } @@ -50,7 +52,7 @@ subprojects { // jacoco report 형식 및 경로 설정 reports { html.required = true - csv.required = true + csv.required = false xml.required = true } @@ -68,7 +70,7 @@ subprojects { ) } - finalizedBy 'jacocoTestCoverageVerification' + finalizedBy 'jacocoTestCoverageVerification' // jacocoTestReport를 실행 후 jacocoTestCoverageVerification 실행 } jacocoTestCoverageVerification { @@ -88,13 +90,13 @@ subprojects { limit { counter = 'BRANCH' value = 'COVEREDRATIO' - minimum = 0.00 + minimum = 0.0 } limit { counter = 'LINE' value = 'COVEREDRATIO' - minimum = 0.00 + minimum = 0.0 } limit { @@ -106,42 +108,28 @@ subprojects { excludes = [] + Qdomains } - } } - sonar { - properties { - property 'sonar.core.codeCoveragePlugin', 'jacoco' - property 'sonar.coverage.jacoco.xmlReportPaths', "${project.buildDir}/reports/jacoco/testCodeCoverageReport/**.xml" - } - } dependencies { - // Lombok + // lombok implementation 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' - - testAnnotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' + + // test testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation group: 'org.testcontainers', name: 'testcontainers', version: '1.17.2' testImplementation group: 'org.mockito', name: 'mockito-core', version: '4.8.0' testImplementation "com.h2database:h2" - - implementation 'org.springframework.restdocs:spring-restdocs-mockmvc' - implementation 'org.springframework.restdocs:spring-restdocs-restassured' - implementation 'io.rest-assured:spring-mock-mvc' } - bootJar.enabled = false - jar.enabled = true - test { useJUnitPlatform() - finalizedBy 'jacocoTestReport' // test가 끝나면 jacocoTestReport를 실행합니다. + finalizedBy 'jacocoTestReport' // test가 끝나면 jacocoTestReport를 실행 } } diff --git a/clients/client-auth/build.gradle b/clients/client-auth/build.gradle index c2331360..e51f4dd7 100644 --- a/clients/client-auth/build.gradle +++ b/clients/client-auth/build.gradle @@ -1,3 +1,11 @@ +/* +Client 기능만을 위한 모듈을 분리함으로써 외부 통신을 위한 의존성만 독립적으로 implementation 할 수 있습니다. +장점 : + - 다른 모듈의 의존성 변화에 영향을 받지 않으므로 모듈을 안정적으로 관리할 수 있습니다. + - Client 기능만을 위한 의존성만 남아서 관리가 편하고 쉽게 파악이 가능합니다. + - implementation은 compile 단계와 runtime 모두에 의존성이 들어옵니다. 즉, implementation한 의존성이 많아지면 compile시 시간이 오래 걸립니다. + client 기능에 필요한 의존성만 compile함으로 compile 시간이 단축됩니다. + */ dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' @@ -13,4 +21,6 @@ dependencies { // JSON implementation 'com.fasterxml.jackson.core:jackson-databind' + + testImplementation "org.springframework.cloud:spring-cloud-starter-contract-stub-runner" } diff --git a/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/LoginClient.java b/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/LoginClient.java index 1c912923..a7749678 100644 --- a/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/LoginClient.java +++ b/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/LoginClient.java @@ -2,6 +2,13 @@ import cmc.mellyserver.clientauth.api.LoginClientResult; +/* +현재 Melly에서는 카카오, 네이버, 구글, 애플 OAuth를 사용하고 있습니다. 차후 OAuth는 얼마든지 추가될 수 있기에 확장성을 고려한 설계가 필요합니다. +따라서 LoginClient 인터페이스를 만들어서 구체 클라이언트들이 구현하도록 만들었습니다. +OAuth 리소스 서버로부터 데이터를 받아와야 하는 쪽에서는 누구에게 요청하는지 관심을 가지지 않아도 됩니다. +- support : 해당 클라이언트가 어떤 Provider인지 판별합니다 +- getUserData : 실제 유저 데이터를 받아옵니다 + */ public interface LoginClient { boolean supports(String provider); diff --git a/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverClient.java b/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverClient.java index f8b29ee5..8cd06e05 100644 --- a/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverClient.java +++ b/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverClient.java @@ -1,11 +1,16 @@ package cmc.mellyserver.clientauth.api; -import cmc.mellyserver.clientauth.LoginClient; -import lombok.RequiredArgsConstructor; +import static cmc.mellyserver.clientauth.api.Provider.*; + import org.springframework.stereotype.Component; -import static cmc.mellyserver.clientauth.api.Provider.NAVER; +import cmc.mellyserver.clientauth.LoginClient; +import lombok.RequiredArgsConstructor; +/* +타 모듈은 Client 호출이 필요할때 xxClient 객체를 사용해서 호출하면 됩니다. +OpenFeign 인터페이스에 대한 접근은 패키지 내부로 숨겼습니다. + */ @Component @RequiredArgsConstructor public class NaverClient implements LoginClient { diff --git a/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverLoginApi.java b/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverLoginApi.java index a3a72679..31aaa8c5 100644 --- a/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverLoginApi.java +++ b/clients/client-auth/src/main/java/cmc/mellyserver/clientauth/api/NaverLoginApi.java @@ -7,6 +7,10 @@ import cmc.mellyserver.clientauth.model.NaverResource; +/* +통신 클라이언트를 호출하는 작업은 OpenFeign 인터페이스가 아닌 NaverClient라는 객체를 통해 수행합니다. +OpenFeign 인터페이스에 대한 세부 구현은 package default 접근 지시자를 통해 예상치 못한 곳에서의 사용을 차단했습니다. + */ @FeignClient(name = "naverLogin", url = "${client.oauth.uri.naver}") interface NaverLoginApi { diff --git a/clients/client-auth/src/main/resources/client-auth.yml b/clients/client-auth/src/main/resources/client-auth.yml index e75b733d..6d884047 100644 --- a/clients/client-auth/src/main/resources/client-auth.yml +++ b/clients/client-auth/src/main/resources/client-auth.yml @@ -25,13 +25,13 @@ resilience4j.circuitbreaker: configs: default: slidingWindowType: COUNT_BASED - minimumNumberOfCalls: 7 # Circuit Open 여부를 판단하기 위해 실행해야 하는 최소 요청 횟수 - slidingWindowSize: 10 # Circuit Open 여부를 체크하는 윈도우 크기 - waitDurationInOpenState: 10s # Circuit이 Open 상태에 머무는 시간 + minimumNumberOfCalls: 3 # Circuit Open 여부를 판단하기 위해 실행해야 하는 최소 요청 횟수 + slidingWindowSize: 5 # Circuit Open 여부를 체크하는 윈도우 크기 + waitDurationInOpenState: 5s # Circuit이 Open 상태에 머무는 시간 failureRateThreshold: 80 # 슬라이딩 윈도우 내에서 몇 %이상되면 Circuit을 Open할지 결정하는 비율 - slowCallDurationThreshold: 3000 # 몇초동안 요청이 지속되면 슬로우 콜로 판별되는지 기준 + slowCallDurationThreshold: 2000 # 몇초동안 요청이 지속되면 슬로우 콜로 판별되는지 기준 slowCallRateThreshold: 80 # 슬라이딩 윈도우 내 요청 중 몇 %이상 슬로우 콜이 발생하면 Circuit을 Open할지 결정하는 비율 permittedNumberOfCallsInHalfOpenState: 5 # Half Open 상태에서 상태 변화를 위해 테스트 해보는 요청 횟수 diff --git a/core/core-api/build.gradle b/core/core-api/build.gradle index 035db22e..a4030d6c 100644 --- a/core/core-api/build.gradle +++ b/core/core-api/build.gradle @@ -1,6 +1,5 @@ plugins { id 'org.asciidoctor.jvm.convert' version '3.3.2' - // Rest Docs는 API 문서화 & 테스트로만 필요합니다. 따라서 core-api 모듈에서만 플러그인을 사용하도록 만들었습니다. } bootJar.enabled = true @@ -13,7 +12,6 @@ configurations { asciidoctorExt } - dependencies { // Spring @@ -22,6 +20,9 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.restdocs:spring-restdocs-mockmvc' + implementation 'org.springframework.restdocs:spring-restdocs-restassured' + implementation 'io.rest-assured:spring-mock-mvc' // JWT // 해당 라이브러리 또한 client-auth에서 implementation으로 사용 중이기에 compileOnly로 변경했습니다. @@ -58,7 +59,6 @@ dependencies { // Rest Docs asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor' - // Multi Module implementation project(":storage:db-core") implementation project(":storage:db-redis") @@ -68,7 +68,6 @@ dependencies { implementation project(":support:logging") implementation project(":clients:client-auth") - jacocoAggregation project(":storage:db-core") jacocoAggregation project(":storage:db-redis") jacocoAggregation project(":infra:notification") diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/AuthService.java b/core/core-api/src/main/java/cmc/mellyserver/auth/AuthService.java index 86cd61fd..101bf157 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/auth/AuthService.java +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/AuthService.java @@ -1,26 +1,26 @@ package cmc.mellyserver.auth; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import cmc.mellyserver.auth.dto.request.AuthLoginRequestDto; import cmc.mellyserver.auth.dto.request.AuthSignupRequestDto; import cmc.mellyserver.auth.dto.request.ChangePasswordRequest; -import cmc.mellyserver.auth.dto.response.RefreshTokenDto; import cmc.mellyserver.auth.dto.response.TokenResponseDto; -import cmc.mellyserver.auth.repository.AuthTokenRepository; import cmc.mellyserver.auth.repository.RefreshToken; -import cmc.mellyserver.auth.token.TokenProvider; +import cmc.mellyserver.auth.token.TokenDto; +import cmc.mellyserver.auth.token.TokenService; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbredis.repository.FcmTokenRepository; -import cmc.mellyserver.domain.comment.event.SignupCompletedEvent; +import cmc.mellyserver.domain.comment.event.SignupEvent; import cmc.mellyserver.domain.user.UserReader; import cmc.mellyserver.domain.user.UserWriter; import cmc.mellyserver.support.exception.BusinessException; import cmc.mellyserver.support.exception.ErrorCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; @Slf4j @Service @@ -33,9 +33,7 @@ public class AuthService { private final PasswordEncoder passwordEncoder; - private final TokenProvider tokenProvider; - - private final AuthTokenRepository tokenRepository; + private final TokenService tokenService; private final FcmTokenRepository fcmTokenRepository; @@ -44,35 +42,23 @@ public class AuthService { @Transactional public TokenResponseDto signup(AuthSignupRequestDto authSignupRequestDto) { - checkDuplicatedEmail(authSignupRequestDto); - User savedUser = userWriter.save(User.createEmailLoginUser(authSignupRequestDto.getEmail(), - passwordEncoder.encode(authSignupRequestDto.getPassword()), authSignupRequestDto.getNickname(), - authSignupRequestDto.getAgeGroup(), authSignupRequestDto.getGender())); - - String accessToken = tokenProvider.createAccessToken(savedUser.getId(), savedUser.getRoleType()); - RefreshTokenDto refreshToken = tokenProvider.createRefreshToken(savedUser.getId(), savedUser.getRoleType()); + checkDuplicatedEmail(authSignupRequestDto.getEmail()); + User user = userWriter.save(authSignupRequestDto.toEntity()); - tokenRepository.saveRefreshToken(new RefreshToken(refreshToken.getToken(), savedUser.getId()), - refreshToken.getExpiredAt()); - fcmTokenRepository.saveToken(savedUser.getId().toString(), authSignupRequestDto.getFcmToken()); + TokenDto tokenDto = tokenService.createToken(user); - publisher.publishEvent(new SignupCompletedEvent(savedUser.getId())); + fcmTokenRepository.saveToken(user.getId().toString(), user.getFcmToken()); + publisher.publishEvent(new SignupEvent(user.getId())); - return TokenResponseDto.of(accessToken, refreshToken.getToken()); + return TokenResponseDto.of(tokenDto.accessToken(), tokenDto.refreshToken().getToken()); } - /** - * 로그인 요청이 몰리는 상황에서 TPS를 올릴 수 있는 방법들을 고민했습니다. - *

- * 1. email 컬럼에 대한 인덱스를 생성해서 DB 랜덤 I/O 시간 단축 - *

- * 2. password 비교하는 과정에서 encoder의 암호화 강도가 높아서 CPU 사용량과 처리시간 증가, EC2의 CPU 스펙에 맞춰서 암호화 - * 강도 조절 - *

- * 3. FCM Token을 Redis에 생성하는 부분을 이벤트로 분리. 분산 환경의 Redis를 사용하기에 네트워크 I/O 시간이 추가됩니다. I/O - * 시간 단축을 위해서 FCM 관련 로직 이벤트 분리 - *

- * 4. @TransactionEventListener를 적용해서 데이터 일관성 보장 + /* + 로그인 요청이 몰리는 상황에서 TPS를 올릴 수 있는 방법들을 고민했습니다. + - 1. email 컬럼에 대한 인덱스를 생성해서 DB 랜덤 I/O 시간 단축 + - 2. password 비교하는 과정에서 encoder의 암호화 강도가 높아서 CPU 사용량과 처리시간 증가, EC2의 CPU 스펙에 맞춰서 암호화 강도 조절 + - 3. FCM Token을 Redis에 생성하는 부분을 이벤트로 분리. 분산 환경의 Redis를 사용하기에 네트워크 I/O 시간이 추가됩니다. I/O 시간 단축을 위해서 FCM 관련 로직 이벤트 분리 + - 4. @TransactionEventListener를 적용해서 데이터 일관성 보장 */ @Transactional public TokenResponseDto login(AuthLoginRequestDto authLoginRequestDto) { @@ -80,47 +66,30 @@ public TokenResponseDto login(AuthLoginRequestDto authLoginRequestDto) { User user = checkEmail(authLoginRequestDto.getEmail()); checkPassword(authLoginRequestDto.getPassword(), user.getPassword()); - String accessToken = tokenProvider.createAccessToken(user.getId(), user.getRoleType()); - RefreshTokenDto refreshToken = tokenProvider.createRefreshToken(user.getId(), user.getRoleType()); - - // ------ 3. 레디스에 Refresh token 저장, EC2 간 네트워크 I/O 발생 - tokenRepository.saveRefreshToken(new RefreshToken(refreshToken.getToken(), user.getId()), - refreshToken.getExpiredAt()); + TokenDto tokenDto = tokenService.createToken(user); fcmTokenRepository.saveToken(user.getId().toString(), authLoginRequestDto.getFcmToken()); - return TokenResponseDto.of(accessToken, refreshToken.getToken()); + return TokenResponseDto.of(tokenDto.accessToken(), tokenDto.refreshToken().getToken()); } // Refresh Token Rotation (RTR) 전략 적용 public TokenResponseDto reIssueAccessTokenAndRefreshToken(final String token) { - // 1. Claim을 파싱하는 과정에서 유효기간이 지나면 예외 발생 - Long userId = tokenProvider.extractUserId(token); + Long userId = tokenService.extractUserId(token); + RefreshToken refreshToken = tokenService.findRefreshToken(userId); - // 2. 만약 해당 ID에 해당하는 리프레시 토큰이 redis에 없으면 재로그인 - RefreshToken refreshToken = tokenRepository.findRefreshToken(userId).orElseThrow(() -> { - throw new BusinessException(ErrorCode.RELOGIN_REQUIRED); - }); - - // 3. Redis에 있는 토큰과 내가 refresh를 위해 가져온 토큰이 다르면 변조됐다고 판단 후 재로그인 checkAbnormalUserAccess(token, userId, refreshToken); User user = userReader.findById(refreshToken.getUserId()); + TokenDto tokenDto = tokenService.createToken(user); - String newAccessToken = tokenProvider.createAccessToken(refreshToken.getUserId(), user.getRoleType()); - RefreshTokenDto newRefreshToken = tokenProvider.createRefreshToken(refreshToken.getUserId(), - user.getRoleType()); - tokenRepository.saveRefreshToken(new RefreshToken(newRefreshToken.getToken(), user.getId()), - newRefreshToken.getExpiredAt()); - - return TokenResponseDto.of(newAccessToken, newRefreshToken.getToken()); + return TokenResponseDto.of(tokenDto.accessToken(), tokenDto.refreshToken().getToken()); } public void logout(final Long userId, final String accessToken) { - tokenRepository.makeAccessTokenDisabled(accessToken); - tokenRepository.removeRefreshToken(userId); - + tokenService.makeAccessTokenDisabled(accessToken); + tokenService.removeRefreshToken(userId); fcmTokenRepository.deleteToken(userId.toString()); } @@ -128,10 +97,9 @@ public void withdraw(final Long userId, final String accessToken) { User user = userReader.findById(userId); user.remove(); - - tokenRepository.makeAccessTokenDisabled(accessToken); - tokenRepository.removeRefreshToken(userId); - + + tokenService.makeAccessTokenDisabled(accessToken); + tokenService.removeRefreshToken(userId); fcmTokenRepository.deleteToken(userId.toString()); } @@ -186,18 +154,10 @@ private void checkPassword(final String password, final String originPassword) { } } - private void checkDuplicatedEmail(AuthSignupRequestDto authSignupRequestDto) { - - if (userReader.existsByEmail(authSignupRequestDto.getEmail())) { - throw new BusinessException(ErrorCode.DUPLICATE_EMAIL); - } - } - private void checkAbnormalUserAccess(final String token, final Long userId, final RefreshToken refreshToken) { if (!refreshToken.getRefreshToken().equals(token)) { - - tokenRepository.removeRefreshToken(userId); + tokenService.removeRefreshToken(userId); throw new BusinessException(ErrorCode.ABNORMAL_ACCESS); } } diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/LoginClientFactory.java b/core/core-api/src/main/java/cmc/mellyserver/auth/LoginClientFactory.java index 9085bbaa..11307667 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/auth/LoginClientFactory.java +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/LoginClientFactory.java @@ -1,21 +1,24 @@ package cmc.mellyserver.auth; -import cmc.mellyserver.clientauth.LoginClient; -import cmc.mellyserver.dbcore.user.enums.Provider; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.stereotype.Component; + +import cmc.mellyserver.clientauth.LoginClient; +import cmc.mellyserver.dbcore.user.enums.Provider; +import lombok.RequiredArgsConstructor; + @Component @RequiredArgsConstructor public class LoginClientFactory { - // LoginClient 타입의 모든게 다 들어온다. private final List loginClientList; + /* + 한번 생성된 Client 객체를 런타임 내에 메모리상에 캐싱합니다 + */ private final Map factoryCache = new HashMap<>(); public LoginClient find(Provider provider) { @@ -24,12 +27,6 @@ public LoginClient find(Provider provider) { return loginClient; } - // 이 부분이 중요하다. - // loginClient = loginClientList.stream() - // .filter(v -> v.supports(provider)) - // .findFirst() - // .orElseThrow(); - loginClient = loginClientList.stream() .filter(client -> client.supports(provider.name())) .findFirst() diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/OAuthService.java b/core/core-api/src/main/java/cmc/mellyserver/auth/OAuthService.java index 216b2349..6a6f5bb4 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/auth/OAuthService.java +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/OAuthService.java @@ -1,5 +1,10 @@ package cmc.mellyserver.auth; +import java.util.Objects; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import cmc.mellyserver.auth.controller.dto.request.OAuthSignupRequestDto; import cmc.mellyserver.auth.controller.dto.response.OAuthResponseDto; import cmc.mellyserver.auth.controller.dto.response.OAuthSignupResponseDto; @@ -17,10 +22,6 @@ import cmc.mellyserver.domain.user.UserWriter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Objects; @Slf4j @Service @@ -42,23 +43,11 @@ public class OAuthService { @Transactional public OAuthResponseDto login(OAuthLoginRequestDto oAuthLoginRequestDto) { - LoginClient loginClient = loginClientFactory.find(oAuthLoginRequestDto.getProvider()); // Provider에 - // 맞는 - // 리소스 - // 서버 - // 통신 - // 클라이언트 - // 선택 - LoginClientResult socialUser = loginClient.getUserData(oAuthLoginRequestDto.getAccessToken()); // 실제 - // 통신 - // 후 - // 유저 - // 데이터 - // 반환 - - User user = userReader.findBySocialId(socialUser.uid()); // 기존에 회원가입한 이력 있는지 체크 - - // 회원가입이 필요한 유저라면 회원가입 로직으로 넘긴다 + LoginClient loginClient = loginClientFactory.find(oAuthLoginRequestDto.getProvider()); + LoginClientResult socialUser = loginClient.getUserData(oAuthLoginRequestDto.getAccessToken()); + + User user = userReader.findBySocialId(socialUser.uid()); + if (Objects.isNull(user)) { return new OAuthResponseDto(null, new OAuthSignupResponseDto(socialUser.uid(), socialUser.provider())); } @@ -66,7 +55,7 @@ public OAuthResponseDto login(OAuthLoginRequestDto oAuthLoginRequestDto) { String accessToken = tokenProvider.createAccessToken(user.getId(), user.getRoleType()); RefreshTokenDto refreshToken = tokenProvider.createRefreshToken(user.getId(), user.getRoleType()); tokenRepository.saveRefreshToken(new RefreshToken(refreshToken.getToken(), user.getId()), - refreshToken.getExpiredAt()); + refreshToken.getExpiredAt()); storeFCMToken(user, oAuthLoginRequestDto.getFcmToken()); @@ -77,19 +66,15 @@ public TokenResponseDto signup(OAuthSignupRequestDto oAuthSignupRequestDto) { User user = userWriter .save(User.oauthUser(oAuthSignupRequestDto.getSocialId(), oAuthSignupRequestDto.getProvider(), - oAuthSignupRequestDto.getEmail(), oAuthSignupRequestDto.getNickname(), - oAuthSignupRequestDto.getAgeGroup(), oAuthSignupRequestDto.getGender())); - - String accessToken = tokenProvider.createAccessToken(user.getId(), user.getRoleType()); // Access - // Token - // 생성 - RefreshTokenDto refreshToken = tokenProvider.createRefreshToken(user.getId(), user.getRoleType()); // Refresh - // Token - // 생성 + oAuthSignupRequestDto.getEmail(), oAuthSignupRequestDto.getNickname(), + oAuthSignupRequestDto.getAgeGroup(), oAuthSignupRequestDto.getGender())); + + String accessToken = tokenProvider.createAccessToken(user.getId(), user.getRoleType()); + RefreshTokenDto refreshToken = tokenProvider.createRefreshToken(user.getId(), user.getRoleType()); tokenRepository.saveRefreshToken(new RefreshToken(refreshToken.getToken(), user.getId()), - refreshToken.getExpiredAt()); // Refresh Token을 Redis에 저장 + refreshToken.getExpiredAt()); - storeFCMToken(user, oAuthSignupRequestDto.getFcmToken()); // FCM 토큰 Redis에 저장 + storeFCMToken(user, oAuthSignupRequestDto.getFcmToken()); return TokenResponseDto.of(accessToken, refreshToken.getToken()); } diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/config/SecurityConfig.java b/core/core-api/src/main/java/cmc/mellyserver/auth/config/SecurityConfig.java index a9925df2..fa7091e3 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/auth/config/SecurityConfig.java +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/config/SecurityConfig.java @@ -1,11 +1,5 @@ package cmc.mellyserver.auth.config; -import cmc.mellyserver.auth.common.filter.JwtExceptionFilter; -import cmc.mellyserver.auth.common.filter.RestAuthenticationEntryPoint; -import cmc.mellyserver.auth.common.filter.TokenAccessDeniedHandler; -import cmc.mellyserver.auth.common.filter.TokenAuthenticationFilter; -import cmc.mellyserver.auth.token.JwtTokenProvider; -import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; @@ -21,6 +15,13 @@ import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import cmc.mellyserver.auth.common.filter.JwtExceptionFilter; +import cmc.mellyserver.auth.common.filter.RestAuthenticationEntryPoint; +import cmc.mellyserver.auth.common.filter.TokenAccessDeniedHandler; +import cmc.mellyserver.auth.common.filter.TokenAuthenticationFilter; +import cmc.mellyserver.auth.token.JwtTokenProvider; +import lombok.RequiredArgsConstructor; + @Configuration @EnableWebSecurity @RequiredArgsConstructor @@ -45,14 +46,17 @@ public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Excepti .cors(CorsConfigurer::disable) .httpBasic(HttpBasicConfigurer::disable) .sessionManagement( - (sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + (sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .exceptionHandling( - (authenticationManager) -> authenticationManager.authenticationEntryPoint(authenticationEntryPoint) - .accessDeniedHandler(accessDeniedHandler)) + (authenticationManager) -> authenticationManager.authenticationEntryPoint(authenticationEntryPoint) + .accessDeniedHandler(accessDeniedHandler)) .authorizeHttpRequests(authorize -> authorize.requestMatchers(WhiteList.WHITE_LIST) .permitAll() .requestMatchers(HttpMethod.OPTIONS, "/**") - .permitAll()) + .permitAll() + .anyRequest() + .authenticated() + ) .addFilterBefore(authenticationFilter, UsernamePasswordAuthenticationFilter.class) .addFilterBefore(jwtExceptionFilter, TokenAuthenticationFilter.class); diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/dto/request/AuthSignupRequestDto.java b/core/core-api/src/main/java/cmc/mellyserver/auth/dto/request/AuthSignupRequestDto.java index c09a24f9..9112c0e4 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/auth/dto/request/AuthSignupRequestDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/dto/request/AuthSignupRequestDto.java @@ -1,12 +1,14 @@ package cmc.mellyserver.auth.dto.request; +import org.hibernate.validator.constraints.Length; + +import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.enums.AgeGroup; import cmc.mellyserver.dbcore.user.enums.Gender; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Pattern; import lombok.Builder; import lombok.Data; -import org.hibernate.validator.constraints.Length; @Data public class AuthSignupRequestDto { @@ -28,7 +30,7 @@ public class AuthSignupRequestDto { @Builder public AuthSignupRequestDto(String email, String password, String nickname, AgeGroup ageGroup, Gender gender, - String fcmToken) { + String fcmToken) { this.email = email; this.password = password; this.nickname = nickname; @@ -37,4 +39,8 @@ public AuthSignupRequestDto(String email, String password, String nickname, AgeG this.fcmToken = fcmToken; } + public User toEntity() { + return null; + } + } diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/token/TokenDto.java b/core/core-api/src/main/java/cmc/mellyserver/auth/token/TokenDto.java new file mode 100644 index 00000000..12e363e6 --- /dev/null +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/token/TokenDto.java @@ -0,0 +1,10 @@ +package cmc.mellyserver.auth.token; + +import cmc.mellyserver.auth.dto.response.RefreshTokenDto; + +public record TokenDto( + String accessToken, + RefreshTokenDto refreshToken +) { + +} diff --git a/core/core-api/src/main/java/cmc/mellyserver/auth/token/TokenService.java b/core/core-api/src/main/java/cmc/mellyserver/auth/token/TokenService.java new file mode 100644 index 00000000..f8b7e151 --- /dev/null +++ b/core/core-api/src/main/java/cmc/mellyserver/auth/token/TokenService.java @@ -0,0 +1,47 @@ +package cmc.mellyserver.auth.token; + +import org.springframework.stereotype.Component; + +import cmc.mellyserver.auth.dto.response.RefreshTokenDto; +import cmc.mellyserver.auth.repository.AuthTokenRepository; +import cmc.mellyserver.auth.repository.RefreshToken; +import cmc.mellyserver.dbcore.user.User; +import cmc.mellyserver.support.exception.BusinessException; +import cmc.mellyserver.support.exception.ErrorCode; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class TokenService { + + private final TokenProvider tokenProvider; + + private final AuthTokenRepository tokenRepository; + + public TokenDto createToken(User user) { + String accessToken = tokenProvider.createAccessToken(user.getId(), user.getRoleType()); + RefreshTokenDto refreshToken = tokenProvider.createRefreshToken(user.getId(), user.getRoleType()); + tokenRepository.saveRefreshToken(new RefreshToken(refreshToken.getToken(), user.getId()), + refreshToken.getExpiredAt()); + return new TokenDto(accessToken, refreshToken); + } + + public RefreshToken findRefreshToken(Long userId) { + return tokenRepository.findRefreshToken(userId).orElseThrow(() -> { + throw new BusinessException(ErrorCode.RELOGIN_REQUIRED); + }); + } + + public void makeAccessTokenDisabled(String accessToken) { + tokenRepository.makeAccessTokenDisabled(accessToken); + } + + public void removeRefreshToken(Long userId) { + tokenRepository.removeRefreshToken(userId); + } + + public long extractUserId(String accessToken) { + return tokenProvider.extractUserId(accessToken); + } + +} diff --git a/core/core-api/src/main/java/cmc/mellyserver/common/aop/lock/OptimisticLockAop.java b/core/core-api/src/main/java/cmc/mellyserver/common/aop/lock/OptimisticLockAop.java deleted file mode 100644 index c39d7ea4..00000000 --- a/core/core-api/src/main/java/cmc/mellyserver/common/aop/lock/OptimisticLockAop.java +++ /dev/null @@ -1,41 +0,0 @@ -package cmc.mellyserver.common.aop.lock; - -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.springframework.dao.CannotAcquireLockException; -import org.springframework.orm.ObjectOptimisticLockingFailureException; -import org.springframework.stereotype.Component; - -import jakarta.persistence.OptimisticLockException; -import lombok.extern.slf4j.Slf4j; - -@Aspect -@Slf4j -@Component -public class OptimisticLockAop { - - private static int RETRY_MAX_COUNT = 3; - - @Around("@annotation(cmc.mellyserver.common.aop.lock.annotation.OptimisticLock)") - public Object doOneMoreRetryTransactionIfOptimisticLockExceptionThrow(ProceedingJoinPoint joinPoint) - throws Throwable { - - Exception exceptionHolder = null; - - for (int retryCount = 0; retryCount <= RETRY_MAX_COUNT; retryCount++) { - - try { - return joinPoint.proceed(); - - } catch (OptimisticLockException | ObjectOptimisticLockingFailureException | CannotAcquireLockException e) { - - exceptionHolder = e; - } - } - - // 3번 반복 후에도 실패하면 예외 반환 - throw exceptionHolder; - } - -} diff --git a/core/core-api/src/main/java/cmc/mellyserver/common/aop/lock/annotation/OptimisticLock.java b/core/core-api/src/main/java/cmc/mellyserver/common/aop/lock/annotation/OptimisticLock.java deleted file mode 100644 index 832d31ce..00000000 --- a/core/core-api/src/main/java/cmc/mellyserver/common/aop/lock/annotation/OptimisticLock.java +++ /dev/null @@ -1,12 +0,0 @@ -package cmc.mellyserver.common.aop.lock.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface OptimisticLock { - -} \ No newline at end of file diff --git a/core/core-api/src/main/java/cmc/mellyserver/common/event/SignupCompletedEventHandler.java b/core/core-api/src/main/java/cmc/mellyserver/common/event/SignupCompletedEventHandler.java index 80a5b998..bd21323b 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/common/event/SignupCompletedEventHandler.java +++ b/core/core-api/src/main/java/cmc/mellyserver/common/event/SignupCompletedEventHandler.java @@ -1,17 +1,18 @@ package cmc.mellyserver.common.event; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; -import cmc.mellyserver.domain.comment.event.SignupCompletedEvent; +import cmc.mellyserver.domain.comment.event.SignupEvent; import cmc.mellyserver.mail.EmailService; import cmc.mellyserver.support.exception.BusinessException; import cmc.mellyserver.support.exception.ErrorCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; -import org.springframework.transaction.event.TransactionPhase; -import org.springframework.transaction.event.TransactionalEventListener; @Slf4j @Component @@ -26,7 +27,7 @@ public class SignupCompletedEventHandler { @Async @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - public void signupEvent(SignupCompletedEvent event) { + public void signupEvent(SignupEvent event) { User user = userRepository.findById(event.getUserId()) .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); diff --git a/core/core-api/src/main/java/cmc/mellyserver/config/cache/CacheConfig.java b/core/core-api/src/main/java/cmc/mellyserver/config/cache/CacheConfig.java index c004f7db..b087cd7f 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/config/cache/CacheConfig.java +++ b/core/core-api/src/main/java/cmc/mellyserver/config/cache/CacheConfig.java @@ -4,13 +4,16 @@ import java.util.HashMap; import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; @@ -25,8 +28,19 @@ @Configuration public class CacheConfig { - @Autowired - RedisConnectionFactory redisConnectionFactory; + @Value("${spring.redis.cache.host}") + private String host; + + @Value("${spring.redis.cache.port}") + private int port; + + @Bean(name = "redisCacheConnectionFactory") + RedisConnectionFactory redisCacheConnectionFactory() { + RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); + redisStandaloneConfiguration.setHostName(host); + redisStandaloneConfiguration.setPort(port); + return new LettuceConnectionFactory(redisStandaloneConfiguration); + } /* 설정 종류 @@ -54,7 +68,8 @@ public ObjectMapper objectMapper() { - Group 데이터도 수정이 적을 것으로 예상되어 1시간으로 TTL을 설정했습니다. */ @Bean - public RedisCacheManager redisCacheManager() { + public RedisCacheManager redisCacheManager( + @Qualifier("redisCacheConnectionFactory") RedisConnectionFactory connectionFactory) { RedisCacheConfiguration defaultConfig = RedisCacheConfiguration.defaultCacheConfig() .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( @@ -66,7 +81,7 @@ public RedisCacheManager redisCacheManager() { redisCacheConfigMap.put(CacheNames.FEED, defaultConfig.entryTtl(Duration.ofMinutes(1))); redisCacheConfigMap.put(CacheNames.GROUP, defaultConfig.entryTtl(Duration.ofHours(1))); - return RedisCacheManager.builder(redisConnectionFactory) + return RedisCacheManager.builder(connectionFactory) .withInitialCacheConfigurations(redisCacheConfigMap) .build(); } diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupCreateRequest.java b/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupCreateRequest.java index 6ebdef6b..3c6544f3 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupCreateRequest.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupCreateRequest.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.group.dto.request; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.AccessLevel; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupUpdateRequest.java b/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupUpdateRequest.java index ebf8fe3c..036f3230 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupUpdateRequest.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/request/GroupUpdateRequest.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.group.dto.request; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import jakarta.validation.constraints.Size; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/response/GroupCreateResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/response/GroupCreateResponse.java index eb9116bf..25b36790 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/response/GroupCreateResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/group/dto/response/GroupCreateResponse.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.group.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/MemoryController.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/MemoryController.java index 182fc792..eb328d54 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/MemoryController.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/MemoryController.java @@ -22,7 +22,7 @@ import cmc.mellyserver.controller.memory.dto.request.MemoryCreateRequest; import cmc.mellyserver.controller.memory.dto.request.MemoryUpdateRequest; import cmc.mellyserver.controller.memory.dto.response.MemoryDetailResponse; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.domain.group.GroupService; import cmc.mellyserver.domain.group.dto.response.GroupListLoginUserParticipatedResponse; import cmc.mellyserver.domain.memory.MemoryService; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryCreateRequest.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryCreateRequest.java index fd4e403f..b942e903 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryCreateRequest.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryCreateRequest.java @@ -1,16 +1,18 @@ package cmc.mellyserver.controller.memory.dto.request; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import java.time.LocalDate; +import java.util.List; + +import org.hibernate.validator.constraints.Length; + import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.memory.OpenType; import jakarta.validation.constraints.NotNull; import lombok.AccessLevel; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import java.time.LocalDate; -import java.util.List; @Data @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -45,7 +47,7 @@ public class MemoryCreateRequest { @Builder public MemoryCreateRequest(Double lat, Double lng, String placeName, String placeCategory, String title, - String content, List keyword, Long groupId, OpenType openType, LocalDate visitedDate, Long star) { + String content, List keyword, Long groupId, OpenType openType, LocalDate visitedDate, Long star) { this.lat = lat; this.lng = lng; this.placeName = placeName; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryUpdateRequest.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryUpdateRequest.java index 2519a62f..46ed6e03 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryUpdateRequest.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/request/MemoryUpdateRequest.java @@ -1,15 +1,16 @@ package cmc.mellyserver.controller.memory.dto.request; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import java.time.LocalDate; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.memory.OpenType; import lombok.AccessLevel; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; -import java.util.List; - @Data @NoArgsConstructor(access = AccessLevel.PROTECTED) public class MemoryUpdateRequest { @@ -33,7 +34,7 @@ public class MemoryUpdateRequest { @Builder public MemoryUpdateRequest(String title, String content, List keyword, Long groupId, OpenType openType, - LocalDate visitedDate, Long star, List deleteImageList) { + LocalDate visitedDate, Long star, List deleteImageList) { this.title = title; this.content = content; this.keyword = keyword; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryByMemoryIdResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryByMemoryIdResponse.java index dfb6d19a..eb067d2d 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryByMemoryIdResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryByMemoryIdResponse.java @@ -1,14 +1,15 @@ package cmc.mellyserver.controller.memory.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import cmc.mellyserver.domain.memory.query.dto.ImageDto; +import java.time.LocalDateTime; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.group.GroupType; +import cmc.mellyserver.domain.memory.query.dto.ImageDto; import lombok.AllArgsConstructor; import lombok.Data; -import java.time.LocalDateTime; -import java.util.List; - @Data @AllArgsConstructor public class GetMemoryByMemoryIdResponse { diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryForPlaceResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryForPlaceResponse.java index c0d20560..bf7c5b0e 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryForPlaceResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetMemoryForPlaceResponse.java @@ -1,14 +1,15 @@ package cmc.mellyserver.controller.memory.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import cmc.mellyserver.domain.memory.query.dto.ImageDto; +import java.time.LocalDateTime; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.group.GroupType; +import cmc.mellyserver.domain.memory.query.dto.ImageDto; import lombok.AllArgsConstructor; import lombok.Data; -import java.time.LocalDateTime; -import java.util.List; - @Data @AllArgsConstructor public class GetMemoryForPlaceResponse { diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetOtherMemoryForPlaceResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetOtherMemoryForPlaceResponse.java index fe887a83..d147a2fc 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetOtherMemoryForPlaceResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GetOtherMemoryForPlaceResponse.java @@ -1,14 +1,15 @@ package cmc.mellyserver.controller.memory.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import cmc.mellyserver.domain.memory.query.dto.ImageDto; +import java.time.LocalDateTime; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.group.GroupType; +import cmc.mellyserver.domain.memory.query.dto.ImageDto; import lombok.AllArgsConstructor; import lombok.Data; -import java.time.LocalDateTime; -import java.util.List; - @Data @AllArgsConstructor public class GetOtherMemoryForPlaceResponse { diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GroupListForSaveMemoryResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GroupListForSaveMemoryResponse.java index 592c4d0e..3df84f4c 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GroupListForSaveMemoryResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/GroupListForSaveMemoryResponse.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.memory.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.domain.group.query.dto.GroupLoginUserParticipatedResponseDto; import lombok.Builder; import lombok.Data; @@ -22,7 +22,7 @@ public GroupListForSaveMemoryResponse(Long groupId, String groupName, GroupType } public static GroupListForSaveMemoryResponse of( - GroupLoginUserParticipatedResponseDto groupLoginUserParticipatedResponseDto) { + GroupLoginUserParticipatedResponseDto groupLoginUserParticipatedResponseDto) { return GroupListForSaveMemoryResponse.builder() .groupId(groupLoginUserParticipatedResponseDto.getGroupId()) .groupName(groupLoginUserParticipatedResponseDto.getGroupName()) diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryDetailResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryDetailResponse.java index 4a4bb572..dcbacc25 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryDetailResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryDetailResponse.java @@ -1,16 +1,17 @@ package cmc.mellyserver.controller.memory.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import java.time.LocalDate; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.domain.memory.query.dto.ImageDto; import cmc.mellyserver.domain.memory.query.dto.KeywordDto; import cmc.mellyserver.domain.memory.query.dto.MemoryDetailResponseDto; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Builder; import lombok.Data; -import java.time.LocalDate; -import java.util.List; - @Data public class MemoryDetailResponse { @@ -48,8 +49,8 @@ public class MemoryDetailResponse { @Builder public MemoryDetailResponse(Long placeId, String placeName, Long memoryId, List imageDtos, String title, - String content, GroupType groupType, int groupIcon, String groupName, Long stars, List keyword, - Long groupId, LocalDate visitedDate) { + String content, GroupType groupType, int groupIcon, String groupName, Long stars, List keyword, + Long groupId, LocalDate visitedDate) { this.placeId = placeId; this.placeName = placeName; this.memoryId = memoryId; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryResponse.java index 51ec2c7a..e3cf77f4 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/memory/dto/response/MemoryResponse.java @@ -1,16 +1,17 @@ package cmc.mellyserver.controller.memory.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import java.time.LocalDate; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.domain.memory.query.dto.ImageDto; import cmc.mellyserver.domain.memory.query.dto.KeywordDto; import cmc.mellyserver.domain.memory.query.dto.MemoryResponseDto; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Builder; import lombok.Data; -import java.time.LocalDate; -import java.util.List; - @Data public class MemoryResponse { @@ -48,8 +49,8 @@ public class MemoryResponse { @Builder public MemoryResponse(Long placeId, String placeName, Long memoryId, List imageDtos, String title, - String content, GroupType groupType, String groupName, Long stars, List keyword, - LocalDate visitedDate) { + String content, GroupType groupType, String groupName, Long stars, List keyword, + LocalDate visitedDate) { this.placeId = placeId; this.placeName = placeName; this.memoryId = memoryId; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/place/PlaceController.java b/core/core-api/src/main/java/cmc/mellyserver/controller/place/PlaceController.java index 642ad3e0..19d6ac4c 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/place/PlaceController.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/place/PlaceController.java @@ -16,7 +16,7 @@ import cmc.mellyserver.controller.place.dto.PlaceAssembler; import cmc.mellyserver.controller.place.dto.request.PlaceSimpleRequest; import cmc.mellyserver.controller.place.dto.response.PlaceResponse; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.place.Position; import cmc.mellyserver.domain.memory.query.dto.FindPlaceByMemoryTitleResponseDto; import cmc.mellyserver.domain.place.PlaceService; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/place/dto/response/MarkedPlaceReponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/place/dto/response/MarkedPlaceReponse.java index 6755e773..3b2f1698 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/place/dto/response/MarkedPlaceReponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/place/dto/response/MarkedPlaceReponse.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.place.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.place.Position; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/scrap/dto/request/ScrapRequest.java b/core/core-api/src/main/java/cmc/mellyserver/controller/scrap/dto/request/ScrapRequest.java index 197edbcf..50138de9 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/scrap/dto/request/ScrapRequest.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/scrap/dto/request/ScrapRequest.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.scrap.dto.request; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/user/UserController.java b/core/core-api/src/main/java/cmc/mellyserver/controller/user/UserController.java index 5e53620d..eb48f86e 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/user/UserController.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/user/UserController.java @@ -21,8 +21,8 @@ import cmc.mellyserver.controller.user.dto.request.ProfileUpdateRequest; import cmc.mellyserver.controller.user.dto.response.PlaceScrapCountResponse; import cmc.mellyserver.controller.user.dto.response.ProfileResponse; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.group.GroupType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.domain.group.GroupService; import cmc.mellyserver.domain.group.dto.response.GroupListLoginUserParticipatedResponse; import cmc.mellyserver.domain.memory.MemoryService; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/GroupLoginUserParticipatedResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/GroupLoginUserParticipatedResponse.java index 6d6c5685..69d5b226 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/GroupLoginUserParticipatedResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/GroupLoginUserParticipatedResponse.java @@ -2,7 +2,7 @@ import java.util.List; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.user.GroupMemberResponseDto; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/PlaceScrapCountResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/PlaceScrapCountResponse.java index 1b7fde03..1fbce7a8 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/PlaceScrapCountResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/PlaceScrapCountResponse.java @@ -1,6 +1,6 @@ package cmc.mellyserver.controller.user.dto.response; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/UserCreatedMemoryListResponse.java b/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/UserCreatedMemoryListResponse.java index e339fcc4..5532e9df 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/UserCreatedMemoryListResponse.java +++ b/core/core-api/src/main/java/cmc/mellyserver/controller/user/dto/response/UserCreatedMemoryListResponse.java @@ -1,14 +1,15 @@ package cmc.mellyserver.controller.user.dto.response; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import cmc.mellyserver.domain.memory.query.dto.ImageDto; +import java.time.LocalDateTime; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; + +import cmc.mellyserver.dbcore.group.GroupType; +import cmc.mellyserver.domain.memory.query.dto.ImageDto; import lombok.AllArgsConstructor; import lombok.Data; -import java.time.LocalDateTime; -import java.util.List; - @Data @AllArgsConstructor public class UserCreatedMemoryListResponse { diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/comment/event/SignupCompletedEvent.java b/core/core-api/src/main/java/cmc/mellyserver/domain/comment/event/SignupEvent.java similarity index 81% rename from core/core-api/src/main/java/cmc/mellyserver/domain/comment/event/SignupCompletedEvent.java rename to core/core-api/src/main/java/cmc/mellyserver/domain/comment/event/SignupEvent.java index 2e506d15..961d72a3 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/comment/event/SignupCompletedEvent.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/comment/event/SignupEvent.java @@ -5,7 +5,7 @@ @Data @AllArgsConstructor -public class SignupCompletedEvent { +public class SignupEvent { private Long userId; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/CreateGroupRequestDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/CreateGroupRequestDto.java index 76732e0e..d23ea6e2 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/CreateGroupRequestDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/CreateGroupRequestDto.java @@ -1,7 +1,7 @@ package cmc.mellyserver.domain.group.dto.request; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.group.UserGroup; -import cmc.mellyserver.dbcore.group.enums.GroupType; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/UpdateGroupRequestDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/UpdateGroupRequestDto.java index 0dbb9ef5..d07cf906 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/UpdateGroupRequestDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/group/dto/request/UpdateGroupRequestDto.java @@ -1,6 +1,6 @@ package cmc.mellyserver.domain.group.dto.request; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupDetailResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupDetailResponseDto.java index 48810fdd..4ba1f0e4 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupDetailResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupDetailResponseDto.java @@ -3,8 +3,8 @@ import java.io.Serializable; import java.util.List; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.group.UserGroup; -import cmc.mellyserver.dbcore.group.enums.GroupType; import cmc.mellyserver.dbcore.user.GroupMemberResponseDto; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupListForSaveMemoryResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupListForSaveMemoryResponseDto.java index f71f2190..75f56167 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupListForSaveMemoryResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupListForSaveMemoryResponseDto.java @@ -1,6 +1,6 @@ package cmc.mellyserver.domain.group.query.dto; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupLoginUserParticipatedResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupLoginUserParticipatedResponseDto.java index 6488f9ac..bd180ce4 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupLoginUserParticipatedResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/group/query/dto/GroupLoginUserParticipatedResponseDto.java @@ -1,7 +1,7 @@ package cmc.mellyserver.domain.group.query.dto; import cmc.mellyserver.dbcore.group.GroupAndUser; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryReader.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryReader.java index 8e23a7fa..5605a44a 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryReader.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryReader.java @@ -7,7 +7,7 @@ import org.springframework.data.domain.Slice; import org.springframework.stereotype.Component; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.memory.Memory; import cmc.mellyserver.dbcore.memory.MemoryRepository; import cmc.mellyserver.domain.memory.dto.response.MemoryListResponse; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryService.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryService.java index 33db11c1..453b24cc 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryService.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/MemoryService.java @@ -10,7 +10,7 @@ import cmc.mellyserver.common.aop.place.ValidatePlaceExisted; import cmc.mellyserver.common.constants.CacheNames; import cmc.mellyserver.common.event.MemoryCreatedEvent; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.memory.Memory; import cmc.mellyserver.domain.memory.dto.request.CreateMemoryRequestDto; import cmc.mellyserver.domain.memory.dto.request.UpdateMemoryRequestDto; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/CreateMemoryRequestDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/CreateMemoryRequestDto.java index 47ab8969..441f5e31 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/CreateMemoryRequestDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/CreateMemoryRequestDto.java @@ -6,7 +6,7 @@ import org.springframework.web.multipart.MultipartFile; import cmc.mellyserver.dbcore.memory.Memory; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import cmc.mellyserver.dbcore.memory.OpenType; import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.Position; import lombok.Builder; @@ -69,7 +69,6 @@ public Memory toMemory() { return Memory.builder() .title(title) .userId(userId) - .keyword(keyword) .content(content) .groupId(groupId) .openType(openType) diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/UpdateMemoryRequestDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/UpdateMemoryRequestDto.java index d7316654..3025ae97 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/UpdateMemoryRequestDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/dto/request/UpdateMemoryRequestDto.java @@ -1,13 +1,14 @@ package cmc.mellyserver.domain.memory.dto.request; -import cmc.mellyserver.dbcore.memory.enums.OpenType; -import lombok.Builder; -import lombok.Data; -import org.springframework.web.multipart.MultipartFile; - import java.time.LocalDate; import java.util.List; +import org.springframework.web.multipart.MultipartFile; + +import cmc.mellyserver.dbcore.memory.OpenType; +import lombok.Builder; +import lombok.Data; + @Data public class UpdateMemoryRequestDto { @@ -35,8 +36,8 @@ public class UpdateMemoryRequestDto { @Builder public UpdateMemoryRequestDto(Long id, Long memoryId, String title, String content, List keyword, - Long groupId, OpenType openType, LocalDate visitedDate, Long star, List deleteImageList, - List images) { + Long groupId, OpenType openType, LocalDate visitedDate, Long star, List deleteImageList, + List images) { this.id = id; this.memoryId = memoryId; this.title = title; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/MemoryQueryRepository.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/MemoryQueryRepository.java index c9bfbe4b..b4b331e2 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/MemoryQueryRepository.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/MemoryQueryRepository.java @@ -20,8 +20,8 @@ import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import cmc.mellyserver.dbcore.group.GroupType; +import cmc.mellyserver.dbcore.memory.OpenType; import cmc.mellyserver.domain.memory.query.dto.ImageDto; import cmc.mellyserver.domain.memory.query.dto.MemoryDetailResponseDto; import cmc.mellyserver.domain.memory.query.dto.MemoryResponseDto; @@ -237,7 +237,7 @@ private BooleanExpression createdByLoginUser(Long id) { } private BooleanExpression isActive() { - return memory.is_deleted.eq(Boolean.FALSE); + return memory.deletedAt.isNull(); } private BooleanExpression createdByNotCurrentLoginUser(Long id) { @@ -254,9 +254,4 @@ private SliceImpl transferToSlice(Pageable pageable, List(results, pageable, hasNext); } - - private BooleanExpression checkOpenTypeAllOrGroup() { - return memory.openType.ne(OpenType.PRIVATE); - } - } diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryDetailResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryDetailResponseDto.java index 7b4e9a9a..28c63d90 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryDetailResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryDetailResponseDto.java @@ -1,13 +1,13 @@ package cmc.mellyserver.domain.memory.query.dto; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.io.Serializable; import java.time.LocalDate; import java.util.List; +import cmc.mellyserver.dbcore.group.GroupType; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @NoArgsConstructor public class MemoryDetailResponseDto implements Serializable { @@ -44,7 +44,7 @@ public class MemoryDetailResponseDto implements Serializable { private int groupIcon; public MemoryDetailResponseDto(Long placeId, String placeName, Long memoryId, String title, String content, - Long stars, LocalDate visitedDate, Long groupId, GroupType groupType, String groupName, int groupIcon) { + Long stars, LocalDate visitedDate, Long groupId, GroupType groupType, String groupName, int groupIcon) { this.placeId = placeId; this.placeName = placeName; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryResponseDto.java index 191ca742..79138ff6 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/memory/query/dto/MemoryResponseDto.java @@ -1,12 +1,12 @@ package cmc.mellyserver.domain.memory.query.dto; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import java.time.LocalDate; + +import cmc.mellyserver.dbcore.group.GroupType; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; - @Data @NoArgsConstructor public class MemoryResponseDto { diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/notification/NotificationService.java b/core/core-api/src/main/java/cmc/mellyserver/domain/notification/NotificationService.java index 1b42a966..d988287c 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/notification/NotificationService.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/notification/NotificationService.java @@ -42,8 +42,8 @@ public List getNotificationList(Long userId) { public NotificationOnOffResponseDto getNotificationStatus(Long userId) { User user = userReader.findById(userId); - return NotificationOnOffResponseDto.of(user.getEnableAppPush(), user.getEnableCommentPush(), - user.getEnableCommentLikePush()); + return NotificationOnOffResponseDto.of(user.isEnableAppPush(), user.isEnableCommentPush(), + user.isEnableCommentLikePush()); } @Transactional diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceReader.java b/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceReader.java index 2c9eae37..1382a8da 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceReader.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceReader.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Component; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.PlaceRepository; import cmc.mellyserver.dbcore.place.Position; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceService.java b/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceService.java index 0681f954..fdd8ea93 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceService.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/place/PlaceService.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.Position; import cmc.mellyserver.domain.memory.MemoryReader; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/place/query/PlaceQueryRepository.java b/core/core-api/src/main/java/cmc/mellyserver/domain/place/query/PlaceQueryRepository.java index dce1f25b..be1459e7 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/place/query/PlaceQueryRepository.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/place/query/PlaceQueryRepository.java @@ -11,7 +11,7 @@ import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.domain.memory.query.dto.FindPlaceByMemoryTitleResponseDto; import lombok.RequiredArgsConstructor; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapReader.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapReader.java index 519e3673..136949d1 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapReader.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapReader.java @@ -6,7 +6,7 @@ import org.springframework.data.domain.Slice; import org.springframework.stereotype.Component; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.domain.scrap.query.PlaceScrapQueryRepository; import cmc.mellyserver.domain.scrap.query.dto.PlaceScrapCountResponseDto; import cmc.mellyserver.domain.scrap.query.dto.ScrapedPlaceResponseDto; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapService.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapService.java index b2508645..e5ec25e7 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapService.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/PlaceScrapService.java @@ -13,7 +13,7 @@ import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.Position; import cmc.mellyserver.dbcore.scrap.PlaceScrap; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.domain.place.PlaceReader; import cmc.mellyserver.domain.scrap.dto.request.CreatePlaceScrapRequestDto; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MarkedPlaceResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MarkedPlaceResponseDto.java index 825aeb8d..0385f0dc 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MarkedPlaceResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MarkedPlaceResponseDto.java @@ -1,6 +1,6 @@ package cmc.mellyserver.domain.scrap.dto; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.place.Position; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MyMemoryDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MyMemoryDto.java index 49622812..31782681 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MyMemoryDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/MyMemoryDto.java @@ -1,13 +1,13 @@ package cmc.mellyserver.domain.scrap.dto; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import java.util.List; + +import cmc.mellyserver.dbcore.group.GroupType; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; - @Data @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/OtherMemoryDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/OtherMemoryDto.java index 057b10a6..5a84308a 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/OtherMemoryDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/OtherMemoryDto.java @@ -1,11 +1,11 @@ package cmc.mellyserver.domain.scrap.dto; -import cmc.mellyserver.dbcore.group.enums.GroupType; +import java.util.List; + +import cmc.mellyserver.dbcore.group.GroupType; import lombok.AllArgsConstructor; import lombok.Data; -import java.util.List; - @Data @AllArgsConstructor public class OtherMemoryDto { diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/request/CreatePlaceScrapRequestDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/request/CreatePlaceScrapRequestDto.java index ece64fc4..fec1ae54 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/request/CreatePlaceScrapRequestDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/dto/request/CreatePlaceScrapRequestDto.java @@ -2,7 +2,7 @@ import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.Position; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import lombok.Builder; import lombok.Data; @@ -11,7 +11,7 @@ public class CreatePlaceScrapRequestDto { private Long id; - private Position position; + private Position position; private ScrapType scrapType; @@ -21,9 +21,9 @@ public class CreatePlaceScrapRequestDto { @Builder public CreatePlaceScrapRequestDto(Long id, Double lat, Double lng, ScrapType scrapType, String placeName, - String placeCategory) { + String placeCategory) { this.id = id; - this.position = new Position(lat, lng); + this.position = new Position(lat, lng); this.scrapType = scrapType; this.placeName = placeName; this.placeCategory = placeCategory; diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/PlaceScrapQueryRepository.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/PlaceScrapQueryRepository.java index 81c1195a..cf85997a 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/PlaceScrapQueryRepository.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/PlaceScrapQueryRepository.java @@ -1,23 +1,26 @@ package cmc.mellyserver.domain.scrap.query; -import static cmc.mellyserver.dbcore.place.QPlace.place; -import static cmc.mellyserver.dbcore.scrap.QPlaceScrap.placeScrap; -import static cmc.mellyserver.dbcore.user.QUser.user; +import static cmc.mellyserver.dbcore.place.QPlace.*; +import static cmc.mellyserver.dbcore.scrap.QPlaceScrap.*; +import static cmc.mellyserver.dbcore.user.QUser.*; -import cmc.mellyserver.dbcore.place.Position; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; -import cmc.mellyserver.domain.scrap.query.dto.PlaceScrapCountResponseDto; -import cmc.mellyserver.domain.scrap.query.dto.ScrapedPlaceResponseDto; -import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; -import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import cmc.mellyserver.dbcore.place.Position; +import cmc.mellyserver.dbcore.scrap.ScrapType; +import cmc.mellyserver.domain.scrap.query.dto.PlaceScrapCountResponseDto; +import cmc.mellyserver.domain.scrap.query.dto.ScrapedPlaceResponseDto; +import lombok.RequiredArgsConstructor; + @Repository @RequiredArgsConstructor public class PlaceScrapQueryRepository { @@ -60,7 +63,7 @@ public List getScrapedPlaceGrouping(Long id) { return query .select(Projections.fields(PlaceScrapCountResponseDto.class, placeScrap.scrapType, - placeScrap.count().as("scrapCount"))) + placeScrap.count().as("scrapCount"))) .from(placeScrap) .innerJoin(user) .on(placeScrap.user.id.eq(user.id)) @@ -71,10 +74,11 @@ public List getScrapedPlaceGrouping(Long id) { } public Slice getUserScrapedPlace(Long lastId, Pageable pageable, Long userId, - ScrapType scrapType) { + ScrapType scrapType) { List results = query - .select(Projections.fields(ScrapedPlaceResponseDto.class, place.id, place.position, place.placeCategory, place.placeName, place.placeImage)) + .select(Projections.fields(ScrapedPlaceResponseDto.class, place.id, place.position, place.placeCategory, + place.placeName, place.placeImage)) .from(placeScrap) .innerJoin(placeScrap.place, place) .innerJoin(placeScrap.user, user) diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/dto/PlaceScrapCountResponseDto.java b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/dto/PlaceScrapCountResponseDto.java index d5c2d3e5..95941841 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/dto/PlaceScrapCountResponseDto.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/scrap/query/dto/PlaceScrapCountResponseDto.java @@ -1,12 +1,12 @@ package cmc.mellyserver.domain.scrap.query.dto; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import java.io.Serializable; + +import cmc.mellyserver.dbcore.scrap.ScrapType; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.io.Serializable; - @Data @AllArgsConstructor @NoArgsConstructor diff --git a/core/core-api/src/main/java/cmc/mellyserver/domain/user/UserWriter.java b/core/core-api/src/main/java/cmc/mellyserver/domain/user/UserWriter.java index 2fda9843..d79b8f71 100644 --- a/core/core-api/src/main/java/cmc/mellyserver/domain/user/UserWriter.java +++ b/core/core-api/src/main/java/cmc/mellyserver/domain/user/UserWriter.java @@ -1,9 +1,10 @@ package cmc.mellyserver.domain.user; +import org.springframework.stereotype.Component; + import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor diff --git a/core/core-api/src/test/java/cmc/mellyserver/common/db/RedisTestContainers.java b/core/core-api/src/test/java/cmc/mellyserver/common/db/RedisTestContainers.java index 9b6dfe97..65ec93b3 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/common/db/RedisTestContainers.java +++ b/core/core-api/src/test/java/cmc/mellyserver/common/db/RedisTestContainers.java @@ -13,7 +13,6 @@ public class RedisTestContainers { private static final String REDIS_DOCKER_IMAGE = "redis:5.0.3-alpine"; - static { GenericContainer REDIS_CONTAINER = new GenericContainer<>(DockerImageName.parse(REDIS_DOCKER_IMAGE)) .withExposedPorts(6379) @@ -21,8 +20,18 @@ public class RedisTestContainers { REDIS_CONTAINER.start(); + GenericContainer REDIS_CONTAINER_CACHE = new GenericContainer<>(DockerImageName.parse(REDIS_DOCKER_IMAGE)) + .withExposedPorts(6379) + .withReuse(true); + + REDIS_CONTAINER_CACHE.start(); + + System.setProperty("spring.redis.token.host", REDIS_CONTAINER.getHost()); + System.setProperty("spring.redis.token.port", REDIS_CONTAINER.getMappedPort(6379).toString()); + System.setProperty("spring.redis.cache.host", REDIS_CONTAINER.getHost()); + System.setProperty("spring.redis.cache.port", REDIS_CONTAINER_CACHE.getMappedPort(6379).toString()); System.setProperty("spring.data.redis.host", REDIS_CONTAINER.getHost()); - System.setProperty("spring.data.redis.port", REDIS_CONTAINER.getMappedPort(6379).toString()); + System.setProperty("spring.data.redis.port", REDIS_CONTAINER_CACHE.getMappedPort(6379).toString()); } } \ No newline at end of file diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/group/integration/UserGroupServiceTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/group/integration/UserGroupServiceTest.java index 05f944e9..c166cff0 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/group/integration/UserGroupServiceTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/group/integration/UserGroupServiceTest.java @@ -12,8 +12,8 @@ import cmc.mellyserver.dbcore.group.GroupAndUserRepository; import cmc.mellyserver.dbcore.group.GroupRepository; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.group.UserGroup; -import cmc.mellyserver.dbcore.group.enums.GroupType; import cmc.mellyserver.dbcore.user.GroupMemberResponseDto; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; @@ -145,7 +145,7 @@ public class UserGroupServiceTest extends IntegrationTestSupport { // then UserGroup userGroup = groupRepository.findById(친구들.getId()).get(); - Assertions.assertThat(userGroup.getIsDeleted()).isTrue(); + Assertions.assertThat(userGroup.getDeletedAt()).isNotNull(); } @DisplayName("그룹에 참여한다") diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryReadServiceTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryReadServiceTest.java index 501e1498..e969bb96 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryReadServiceTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryReadServiceTest.java @@ -19,7 +19,7 @@ import cmc.mellyserver.dbcore.group.UserGroup; import cmc.mellyserver.dbcore.memory.Memory; import cmc.mellyserver.dbcore.memory.MemoryRepository; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import cmc.mellyserver.dbcore.memory.OpenType; import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.PlaceRepository; import cmc.mellyserver.dbcore.user.User; diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryServiceTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryServiceTest.java index 7c6be157..adbfb13e 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryServiceTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/memory/integration/MemoryServiceTest.java @@ -12,7 +12,7 @@ import cmc.mellyserver.dbcore.memory.Memory; import cmc.mellyserver.dbcore.memory.MemoryRepository; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import cmc.mellyserver.dbcore.memory.OpenType; import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.place.PlaceRepository; import cmc.mellyserver.dbcore.user.User; @@ -55,7 +55,7 @@ class When_remove_memory { // then Memory memory = memoryRepository.findById(메모리.getId()).get(); - assertThat(memory.getIs_deleted()).isTrue(); + assertThat(memory.getDeletedAt()).isNotNull(); } @DisplayName("메모리가 없으면 예외를 발생시킨다.") diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/place/integration/PlaceServiceTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/place/integration/PlaceServiceTest.java index 4f02599c..05c6f304 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/place/integration/PlaceServiceTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/place/integration/PlaceServiceTest.java @@ -18,7 +18,7 @@ import cmc.mellyserver.dbcore.place.Position; import cmc.mellyserver.dbcore.scrap.PlaceScrap; import cmc.mellyserver.dbcore.scrap.PlaceScrapRepository; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; import cmc.mellyserver.domain.memory.query.dto.FindPlaceByMemoryTitleResponseDto; diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapServiceTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapServiceTest.java index d431dce5..c7aa183e 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapServiceTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapServiceTest.java @@ -15,7 +15,7 @@ import cmc.mellyserver.dbcore.place.PlaceRepository; import cmc.mellyserver.dbcore.scrap.PlaceScrap; import cmc.mellyserver.dbcore.scrap.PlaceScrapRepository; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; import cmc.mellyserver.domain.scrap.PlaceScrapService; diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapValidatorTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapValidatorTest.java index 03d4c331..b094f796 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapValidatorTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/integration/PlaceScrapValidatorTest.java @@ -10,7 +10,7 @@ import cmc.mellyserver.dbcore.place.PlaceRepository; import cmc.mellyserver.dbcore.scrap.PlaceScrap; import cmc.mellyserver.dbcore.scrap.PlaceScrapRepository; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; import cmc.mellyserver.domain.scrap.PlaceScrapValidator; diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapQueryRepositoryTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapQueryRepositoryTest.java index 6283b4b5..4f12529b 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapQueryRepositoryTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapQueryRepositoryTest.java @@ -10,7 +10,7 @@ import cmc.mellyserver.dbcore.place.Position; import cmc.mellyserver.dbcore.scrap.PlaceScrap; import cmc.mellyserver.dbcore.scrap.PlaceScrapRepository; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; import cmc.mellyserver.dbcore.user.enums.Provider; diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapRepositoryTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapRepositoryTest.java index 1a1ffa5e..0a6d2710 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapRepositoryTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/repository/ScrapRepositoryTest.java @@ -12,7 +12,7 @@ import cmc.mellyserver.dbcore.place.PlaceRepository; import cmc.mellyserver.dbcore.scrap.PlaceScrap; import cmc.mellyserver.dbcore.scrap.PlaceScrapRepository; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; import cmc.mellyserver.dbcore.user.UserRepository; import cmc.mellyserver.support.RepositoryTestSupport; diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/unit/ScrapTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/unit/ScrapTest.java index 489c6a40..96084254 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/unit/ScrapTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/scrap/unit/ScrapTest.java @@ -8,7 +8,7 @@ import cmc.mellyserver.dbcore.place.Place; import cmc.mellyserver.dbcore.scrap.PlaceScrap; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; +import cmc.mellyserver.dbcore.scrap.ScrapType; import cmc.mellyserver.dbcore.user.User; public class ScrapTest { diff --git a/core/core-api/src/test/java/cmc/mellyserver/domain/user/unit/UserTest.java b/core/core-api/src/test/java/cmc/mellyserver/domain/user/unit/UserTest.java index e4e3d5e3..13322235 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/domain/user/unit/UserTest.java +++ b/core/core-api/src/test/java/cmc/mellyserver/domain/user/unit/UserTest.java @@ -8,11 +8,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import cmc.mellyserver.dbcore.user.Recommend; import cmc.mellyserver.dbcore.user.User; -import cmc.mellyserver.dbcore.user.enums.RecommendActivity; -import cmc.mellyserver.dbcore.user.enums.RecommendGroup; -import cmc.mellyserver.dbcore.user.enums.RecommendPlace; public class UserTest { @@ -45,20 +41,4 @@ public class UserTest { Assertions.assertThat(user.getGender()).isEqualTo(FEMALE); Assertions.assertThat(user.getAgeGroup()).isEqualTo(TWO); } - - @DisplayName("유저가 최초 회원가입할때 진행한 설문 조사 결과를 저장한다.") - @Test - void 회원가입시_진행한_설문조사결과를_저장한다() { - - // given - User user = 모카(); - - // when - user.addSurveyData(RecommendGroup.FRIEND, RecommendPlace.PLACE1, RecommendActivity.CAFE); - - // then - Assertions.assertThat(user.getRecommend()) - .usingRecursiveComparison() - .isEqualTo(new Recommend(RecommendGroup.FRIEND, RecommendPlace.PLACE1, RecommendActivity.CAFE)); - } } diff --git a/core/core-api/src/test/java/cmc/mellyserver/fixtures/GroupFixtures.java b/core/core-api/src/test/java/cmc/mellyserver/fixtures/GroupFixtures.java index 47e364f6..4fec0249 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/fixtures/GroupFixtures.java +++ b/core/core-api/src/test/java/cmc/mellyserver/fixtures/GroupFixtures.java @@ -1,7 +1,7 @@ package cmc.mellyserver.fixtures; +import cmc.mellyserver.dbcore.group.GroupType; import cmc.mellyserver.dbcore.group.UserGroup; -import cmc.mellyserver.dbcore.group.enums.GroupType; public abstract class GroupFixtures { diff --git a/core/core-api/src/test/java/cmc/mellyserver/fixtures/MemoryFixtures.java b/core/core-api/src/test/java/cmc/mellyserver/fixtures/MemoryFixtures.java index 13721a58..b9b48275 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/fixtures/MemoryFixtures.java +++ b/core/core-api/src/test/java/cmc/mellyserver/fixtures/MemoryFixtures.java @@ -1,15 +1,12 @@ package cmc.mellyserver.fixtures; import java.time.LocalDate; -import java.util.List; import cmc.mellyserver.dbcore.memory.Memory; -import cmc.mellyserver.dbcore.memory.enums.OpenType; +import cmc.mellyserver.dbcore.memory.OpenType; public abstract class MemoryFixtures { - - private final static List keywords = List.of("기뻐요", "슬퍼요"); - + public static Memory 메모리(Long placeId, Long userId, Long groupId, String title, OpenType openType) { return Memory.builder() @@ -18,7 +15,6 @@ public abstract class MemoryFixtures { .title(title) .groupId(groupId) .openType(openType) - .keyword(keywords) .visitedDate(LocalDate.now()) .build(); } diff --git a/core/core-api/src/test/java/cmc/mellyserver/fixtures/PlaceFixtures.java b/core/core-api/src/test/java/cmc/mellyserver/fixtures/PlaceFixtures.java index 1f777a17..1908e788 100644 --- a/core/core-api/src/test/java/cmc/mellyserver/fixtures/PlaceFixtures.java +++ b/core/core-api/src/test/java/cmc/mellyserver/fixtures/PlaceFixtures.java @@ -29,7 +29,6 @@ public abstract class PlaceFixtures { .placeName(스타벅스_이름) .placeCategory(스타벅스_카테고리) .position(스타벅스_좌표) - .isDeleted(Boolean.FALSE) .placeImage(스타벅스_이미지_URL) .build(); } @@ -40,7 +39,6 @@ public abstract class PlaceFixtures { .placeName(이디야_이름) .placeCategory(이디야_카테고리) .position(이디야_좌표) - .isDeleted(Boolean.FALSE) .placeImage(이디야_이미지_URL) .build(); } diff --git a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/group/QUserGroup.java b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/group/QUserGroup.java index d4d9ca9d..2177d40e 100644 --- a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/group/QUserGroup.java +++ b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/group/QUserGroup.java @@ -24,18 +24,18 @@ public class QUserGroup extends EntityPathBase { //inherited public final DateTimePath createdDate = _super.createdDate; + public final DateTimePath deletedAt = createDateTime("deletedAt", java.time.LocalDateTime.class); + public final NumberPath groupIcon = createNumber("groupIcon", Integer.class); public final StringPath groupName = createString("groupName"); - public final EnumPath groupType = createEnum("groupType", cmc.mellyserver.dbcore.group.enums.GroupType.class); + public final EnumPath groupType = createEnum("groupType", GroupType.class); public final NumberPath id = createNumber("id", Long.class); public final StringPath inviteLink = createString("inviteLink"); - public final BooleanPath isDeleted = createBoolean("isDeleted"); - //inherited public final DateTimePath lastModifiedDate = _super.lastModifiedDate; diff --git a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/memory/QMemory.java b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/memory/QMemory.java index 02cb8045..be9f7f84 100644 --- a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/memory/QMemory.java +++ b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/memory/QMemory.java @@ -27,20 +27,18 @@ public class QMemory extends EntityPathBase { //inherited public final DateTimePath createdDate = _super.createdDate; + public final DateTimePath deletedAt = createDateTime("deletedAt", java.time.LocalDateTime.class); + public final NumberPath groupId = createNumber("groupId", Long.class); public final NumberPath id = createNumber("id", Long.class); - public final BooleanPath is_deleted = createBoolean("is_deleted"); - - public final ListPath keywords = this.createList("keywords", Keyword.class, QKeyword.class, PathInits.DIRECT2); - //inherited public final DateTimePath lastModifiedDate = _super.lastModifiedDate; public final ListPath memoryImages = this.createList("memoryImages", MemoryImage.class, QMemoryImage.class, PathInits.DIRECT2); - public final EnumPath openType = createEnum("openType", cmc.mellyserver.dbcore.memory.enums.OpenType.class); + public final EnumPath openType = createEnum("openType", OpenType.class); public final NumberPath placeId = createNumber("placeId", Long.class); diff --git a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/place/QPlace.java b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/place/QPlace.java index 2f7f6eaf..60c13564 100644 --- a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/place/QPlace.java +++ b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/place/QPlace.java @@ -29,8 +29,6 @@ public class QPlace extends EntityPathBase { public final NumberPath id = createNumber("id", Long.class); - public final BooleanPath isDeleted = createBoolean("isDeleted"); - //inherited public final DateTimePath lastModifiedDate = _super.lastModifiedDate; diff --git a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/scrap/QPlaceScrap.java b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/scrap/QPlaceScrap.java index 883f479a..97f0babf 100644 --- a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/scrap/QPlaceScrap.java +++ b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/scrap/QPlaceScrap.java @@ -34,7 +34,7 @@ public class QPlaceScrap extends EntityPathBase { public final cmc.mellyserver.dbcore.place.QPlace place; - public final EnumPath scrapType = createEnum("scrapType", cmc.mellyserver.dbcore.scrap.enums.ScrapType.class); + public final EnumPath scrapType = createEnum("scrapType", ScrapType.class); public final cmc.mellyserver.dbcore.user.QUser user; diff --git a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/user/QUser.java b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/user/QUser.java index a761fa3c..1612337d 100644 --- a/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/user/QUser.java +++ b/storage/db-core/src/main/generated/cmc/mellyserver/dbcore/user/QUser.java @@ -7,7 +7,6 @@ import com.querydsl.core.types.PathMetadata; import javax.annotation.processing.Generated; import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; /** @@ -18,8 +17,6 @@ public class QUser extends EntityPathBase { private static final long serialVersionUID = 1807216892L; - private static final PathInits INITS = PathInits.DIRECT2; - public static final QUser user = new QUser("user"); public final cmc.mellyserver.dbcore.config.jpa.QJpaBaseEntity _super = new cmc.mellyserver.dbcore.config.jpa.QJpaBaseEntity(this); @@ -37,6 +34,8 @@ public class QUser extends EntityPathBase { public final BooleanPath enableCommentPush = createBoolean("enableCommentPush"); + public final StringPath fcmToken = createString("fcmToken"); + public final EnumPath gender = createEnum("gender", cmc.mellyserver.dbcore.user.enums.Gender.class); public final NumberPath id = createNumber("id", Long.class); @@ -52,8 +51,6 @@ public class QUser extends EntityPathBase { public final EnumPath provider = createEnum("provider", cmc.mellyserver.dbcore.user.enums.Provider.class); - public final QRecommend recommend; - public final EnumPath roleType = createEnum("roleType", cmc.mellyserver.dbcore.user.enums.RoleType.class); public final StringPath socialId = createString("socialId"); @@ -61,24 +58,15 @@ public class QUser extends EntityPathBase { public final EnumPath userStatus = createEnum("userStatus", cmc.mellyserver.dbcore.user.enums.UserStatus.class); public QUser(String variable) { - this(User.class, forVariable(variable), INITS); + super(User.class, forVariable(variable)); } public QUser(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + super(path.getType(), path.getMetadata()); } public QUser(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QUser(PathMetadata metadata, PathInits inits) { - this(User.class, metadata, inits); - } - - public QUser(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.recommend = inits.isInitialized("recommend") ? new QRecommend(forProperty("recommend")) : null; + super(User.class, metadata); } } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/config/datasource/DataSourceConfig.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/config/datasource/DataSourceConfig.java index b03bb93b..d69dbdc4 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/config/datasource/DataSourceConfig.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/config/datasource/DataSourceConfig.java @@ -1,5 +1,11 @@ package cmc.mellyserver.dbcore.config.datasource; +import static cmc.mellyserver.dbcore.config.datasource.DatabaseType.*; + +import java.util.HashMap; + +import javax.sql.DataSource; + import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; @@ -9,13 +15,8 @@ import org.springframework.context.annotation.Profile; import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy; -import javax.sql.DataSource; -import java.util.HashMap; - -import static cmc.mellyserver.dbcore.config.datasource.DatabaseType.SOURCE; - @Configuration -@Profile({ "local", "prod" }) +@Profile({"local", "prod"}) public class DataSourceConfig { @Bean @@ -25,13 +26,14 @@ public DataSource sourceDataSource() { return DataSourceBuilder.create().build(); } - // @Bean - // @Qualifier(REPLICA) - // @ConfigurationProperties(prefix = "spring.datasource.replica1") - // public DataSource replica1DataSource() { - // return DataSourceBuilder.create() - // .build(); - // } +/* + @Bean + @Qualifier(REPLICA) + @ConfigurationProperties(prefix = "spring.datasource.replica") + public DataSource replicaDataSource() { + return DataSourceBuilder.create().build(); + } +*/ @Bean public DataSource routingDataSource(@Qualifier(SOURCE) DataSource sourceDataSource) { @@ -40,7 +42,7 @@ public DataSource routingDataSource(@Qualifier(SOURCE) DataSource sourceDataSour HashMap dataSourceMap = new HashMap<>(); dataSourceMap.put(SOURCE, sourceDataSource); - // dataSourceMap.put(REPLICA, replica1DataSource); + // dataSourceMap.put(REPLICA, replicaDataSource); routingDataSource.setTargetDataSources(dataSourceMap); routingDataSource.setDefaultTargetDataSource(sourceDataSource); diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupAndUser.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupAndUser.java index 0769aaeb..a6022820 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupAndUser.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupAndUser.java @@ -2,7 +2,15 @@ import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; import cmc.mellyserver.dbcore.user.User; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -10,8 +18,8 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity @Table(name = "tb_group_and_user") +@Entity public class GroupAndUser extends JpaBaseEntity { @Id diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupRepository.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupRepository.java index e8e4cf7c..d423ee18 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupRepository.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupRepository.java @@ -2,11 +2,6 @@ import org.springframework.data.jpa.repository.JpaRepository; -import java.util.List; -import java.util.Set; - public interface GroupRepository extends JpaRepository { - List findByIdIn(Set groupIds); - } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupType.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupType.java new file mode 100644 index 00000000..69a06c71 --- /dev/null +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/GroupType.java @@ -0,0 +1,6 @@ +package cmc.mellyserver.dbcore.group; + +public enum GroupType { + + FAMILY, COMPANY, COUPLE, FRIEND; +} diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/UserGroup.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/UserGroup.java index 7f375571..32225cd4 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/UserGroup.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/UserGroup.java @@ -1,40 +1,51 @@ package cmc.mellyserver.dbcore.group; +import java.time.LocalDateTime; + import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; -import cmc.mellyserver.dbcore.group.enums.GroupType; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; -@Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "tb_user_group") -@AllArgsConstructor +@Entity public class UserGroup extends JpaBaseEntity { @Id - @Column(name = "group_id", nullable = false) + @Column(name = "group_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "group_name", nullable = false) + @Column(name = "group_name") private String groupName; - @Column(name = "group_icon", nullable = false) - private Integer groupIcon; + @Column(name = "group_icon") + private int groupIcon; @Column(name = "invite_link") private String inviteLink; - @Version - private Long version; - @Enumerated(EnumType.STRING) - @Column(name = "group_type", nullable = false) + @Column(name = "group_type") private GroupType groupType; - @Column(name = "is_deleted", nullable = false) - private Boolean isDeleted; + @Column(name = "deleted_at") + private LocalDateTime deletedAt; + + @Version + private Long version; @Builder public UserGroup(String groupName, String inviteLink, GroupType groupType, int groupIcon) { @@ -45,20 +56,12 @@ public UserGroup(String groupName, String inviteLink, GroupType groupType, int g } public void remove() { - - this.isDeleted = Boolean.TRUE; + this.deletedAt = LocalDateTime.now(); } public void update(String groupName, GroupType groupType, Integer groupIcon) { - this.groupName = groupName; this.groupType = groupType; this.groupIcon = groupIcon; } - - @PrePersist - private void init() { - this.isDeleted = Boolean.FALSE; - } - } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/enums/GroupType.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/enums/GroupType.java deleted file mode 100644 index 0d88dc29..00000000 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/group/enums/GroupType.java +++ /dev/null @@ -1,22 +0,0 @@ -package cmc.mellyserver.dbcore.group.enums; - -import java.util.Objects; - -public enum GroupType { - - FAMILY, COMPANY, COUPLE, FRIEND; - - public static GroupType from(final String groupType) { - if (Objects.isNull(groupType)) { - return null; - } - - try { - return GroupType.valueOf(groupType.toUpperCase()); - } - catch (final IllegalArgumentException e) { - throw new IllegalArgumentException(); - } - } - -} diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Keyword.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Keyword.java index 1f1d8a60..b62affec 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Keyword.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Keyword.java @@ -1,7 +1,13 @@ package cmc.mellyserver.dbcore.memory; import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; -import jakarta.persistence.*; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -25,5 +31,4 @@ public class Keyword extends JpaBaseEntity { public void setMemory(Memory memory) { this.memory = memory; } - } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Memory.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Memory.java index 340d58e1..3d53e531 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Memory.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/Memory.java @@ -1,19 +1,30 @@ package cmc.mellyserver.dbcore.memory; -import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; -import cmc.mellyserver.dbcore.memory.enums.OpenType; -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Lob; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity @@ -23,49 +34,42 @@ public class Memory extends JpaBaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "memory_id") - private Long id; // 메모리 ID + private Long id; @Column(name = "stars") - private Long stars; // 별점 (정렬 기준) + private Long stars; @Column(name = "user_id") - private Long userId; // 메모리 작성자 + private Long userId; @Column(name = "place_id") - private Long placeId; // 연관 장소 ID + private Long placeId; - /* - * 그룹 이름과 그룹 타입은 실시간으로 변경될 필요성이 있다. 따라서 메모리 엔티티 내부에 groupName과 groupType을 배치하기 보다는 - * join을 통해 가져오기로 결정 그룹과 엔티티가 도메인 관계 상으로는 독립적이기 때문에 연관관계로 묶는건 배제함 - */ @Column(name = "group_id") private Long groupId; @Column(name = "title") - private String title; // 메모리 제목 + private String title; - @Column(name = "content") @Lob - private String content; // 메모리 컨텐츠 + @Column(name = "content") + private String content; @Enumerated(EnumType.STRING) @Column(name = "open_type") - private OpenType openType; // 공개 타입 + private OpenType openType; - @Column(name = "is_deleted") - private Boolean is_deleted; // 삭제 여부 + @Column(name = "deleted_at") + private LocalDateTime deletedAt; - private LocalDate visitedDate; // 장소 방문 날짜 + private LocalDate visitedDate; @OneToMany(mappedBy = "memory", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private List memoryImages = new ArrayList<>(); - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) - private List keywords = new ArrayList<>(); // 키워드 목록 - @Builder public Memory(Long stars, Long groupId, Long userId, Long placeId, String title, String content, OpenType openType, - LocalDate visitedDate, List keyword) { + LocalDate visitedDate) { this.stars = stars; this.title = title; @@ -77,13 +81,8 @@ public Memory(Long stars, Long groupId, Long userId, Long placeId, String title, this.visitedDate = visitedDate; } - @PrePersist - public void init() { - this.is_deleted = Boolean.FALSE; - } - public void delete() { - this.is_deleted = Boolean.TRUE; + this.deletedAt = LocalDateTime.now(); } public void setUserId(Long userId) { @@ -94,8 +93,8 @@ public void setPlaceId(Long placeId) { this.placeId = placeId; } - public void updateMemory(String title, String content, List keywordList, Long groupId, OpenType openType, - LocalDate visitedDate, Long star, List deleteImageList, List multipartNames) { + public void update(String title, String content, List keywordList, Long groupId, OpenType openType, + LocalDate visitedDate, Long star, List deleteImageList, List multipartNames) { this.title = title; this.content = content; @@ -104,21 +103,13 @@ public void updateMemory(String title, String content, List keywordList, L this.visitedDate = visitedDate; this.stars = star; updateMemoryImage(deleteImageList, multipartNames); - updateKeyword(keywordList); } public void setMemoryImages(List memoryImages) { this.memoryImages = memoryImages; for (MemoryImage memoryImage : memoryImages) { - memoryImage.setMemory(this); - } - } - - public void setKeywords(List keywords) { - this.keywords = keywords; - for (Keyword keyword : keywords) { - keyword.setMemory(this); + memoryImage.addMemory(this); } } @@ -134,14 +125,4 @@ private void updateMemoryImage(List deleteImageList, List multipar setMemoryImages(multipartFileNames.stream().map(MemoryImage::new).collect(Collectors.toList())); } } - - private void updateKeyword(List deleteKeywordList) { - - if (!Objects.isNull(deleteKeywordList)) { - for (Long deleteId : deleteKeywordList) { - this.keywords.removeIf(memoryImage -> memoryImage.getId().equals(deleteId)); - } - } - } - } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/MemoryImage.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/MemoryImage.java index a9b59561..e958d3da 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/MemoryImage.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/MemoryImage.java @@ -1,17 +1,24 @@ package cmc.mellyserver.dbcore.memory; +import java.util.Objects; + import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import java.util.Objects; - @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity @Table(name = "tb_memory_image") +@Entity public class MemoryImage extends JpaBaseEntity { @Id @@ -30,7 +37,7 @@ public MemoryImage(String imagePath) { this.imagePath = imagePath; } - public void setMemory(Memory memory) { + public void addMemory(Memory memory) { this.memory = memory; } @@ -40,7 +47,7 @@ public boolean equals(Object o) { return true; if (o == null || getClass() != o.getClass()) return false; - MemoryImage that = (MemoryImage) o; + MemoryImage that = (MemoryImage)o; return Objects.equals(id, that.id); } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/OpenType.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/OpenType.java new file mode 100644 index 00000000..9f28c895 --- /dev/null +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/OpenType.java @@ -0,0 +1,16 @@ +package cmc.mellyserver.dbcore.memory; + +public enum OpenType { + + ALL("전체 공개"), + + GROUP("그룹 공개"), + + PRIVATE("비공개"); + + private String name; + + OpenType(String name) { + this.name = name; + } +} diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/enums/OpenType.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/enums/OpenType.java deleted file mode 100644 index ea9606ff..00000000 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/memory/enums/OpenType.java +++ /dev/null @@ -1,7 +0,0 @@ -package cmc.mellyserver.dbcore.memory.enums; - -public enum OpenType { - - ALL, GROUP, PRIVATE - -} diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/Place.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/Place.java index 6d04cb3c..e36ac3b5 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/Place.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/Place.java @@ -1,7 +1,13 @@ package cmc.mellyserver.dbcore.place; import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -9,8 +15,8 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity @Table(name = "tb_place") +@Entity public class Place extends JpaBaseEntity { @Id @@ -31,23 +37,12 @@ public class Place extends JpaBaseEntity { @Column(name = "place_category") private String placeCategory; - @Column(name = "is_deleted") - private Boolean isDeleted; - @Builder - public Place(Long id, Position position, String placeImage, String placeCategory, String placeName, - Boolean isDeleted) { + public Place(Long id, Position position, String placeImage, String placeCategory, String placeName) { this.id = id; this.position = position; this.placeName = placeName; this.placeImage = placeImage; this.placeCategory = placeCategory; - this.isDeleted = isDeleted; } - - @PrePersist - public void init() { - this.isDeleted = Boolean.FALSE; - } - } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/PlaceRepository.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/PlaceRepository.java index 8f56a194..7436e721 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/PlaceRepository.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/place/PlaceRepository.java @@ -1,9 +1,9 @@ package cmc.mellyserver.dbcore.place; -import org.springframework.data.jpa.repository.JpaRepository; - import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; + public interface PlaceRepository extends JpaRepository { Optional findByPosition(Position position); diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/PlaceScrap.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/PlaceScrap.java index 8f5f1559..d12508a7 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/PlaceScrap.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/PlaceScrap.java @@ -2,9 +2,18 @@ import cmc.mellyserver.dbcore.config.jpa.JpaBaseEntity; import cmc.mellyserver.dbcore.place.Place; -import cmc.mellyserver.dbcore.scrap.enums.ScrapType; import cmc.mellyserver.dbcore.user.User; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -12,8 +21,8 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity @Table(name = "tb_place_scrap") +@Entity public class PlaceScrap extends JpaBaseEntity { @Id @@ -30,7 +39,7 @@ public class PlaceScrap extends JpaBaseEntity { private Place place; @Enumerated(EnumType.STRING) - @Column(name = "scrap_type", nullable = false) + @Column(name = "scrap_type") private ScrapType scrapType; @Builder @@ -41,7 +50,6 @@ public PlaceScrap(User user, Place place, ScrapType scrapType) { } public static PlaceScrap createScrap(User user, Place place, ScrapType scrapType) { - return new PlaceScrap(user, place, scrapType); + return PlaceScrap.builder().user(user).place(place).scrapType(scrapType).build(); } - } diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/ScrapType.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/ScrapType.java new file mode 100644 index 00000000..034267b8 --- /dev/null +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/ScrapType.java @@ -0,0 +1,7 @@ +package cmc.mellyserver.dbcore.scrap; + +public enum ScrapType { + + FRIEND, FAMILY, COUPLE, COMPANY; + +} diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/enums/ScrapType.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/enums/ScrapType.java deleted file mode 100644 index 827a0fe6..00000000 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/scrap/enums/ScrapType.java +++ /dev/null @@ -1,22 +0,0 @@ -package cmc.mellyserver.dbcore.scrap.enums; - -import java.util.Objects; - -public enum ScrapType { - - FRIEND, FAMILY, COUPLE, COMPANY; - - public static ScrapType from(final String scrapType) { - if (Objects.isNull(scrapType)) { - return null; - } - - try { - return ScrapType.valueOf(scrapType.toUpperCase()); - } - catch (final IllegalArgumentException e) { - throw new IllegalArgumentException(); - } - } - -} diff --git a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/user/User.java b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/user/User.java index 4f972387..dab104b0 100644 --- a/storage/db-core/src/main/java/cmc/mellyserver/dbcore/user/User.java +++ b/storage/db-core/src/main/java/cmc/mellyserver/dbcore/user/User.java @@ -6,13 +6,9 @@ import cmc.mellyserver.dbcore.user.enums.AgeGroup; import cmc.mellyserver.dbcore.user.enums.Gender; import cmc.mellyserver.dbcore.user.enums.Provider; -import cmc.mellyserver.dbcore.user.enums.RecommendActivity; -import cmc.mellyserver.dbcore.user.enums.RecommendGroup; -import cmc.mellyserver.dbcore.user.enums.RecommendPlace; import cmc.mellyserver.dbcore.user.enums.RoleType; import cmc.mellyserver.dbcore.user.enums.UserStatus; import jakarta.persistence.Column; -import jakarta.persistence.Embedded; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; @@ -28,8 +24,8 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity @Table(name = "tb_user") +@Entity public class User extends JpaBaseEntity { private static String NO_PASSWORD = "NO_PASSWORD"; @@ -43,7 +39,7 @@ public class User extends JpaBaseEntity { private String socialId; @Enumerated(EnumType.STRING) - @Column(name = "provider") + @Column(name = "provider", nullable = false) private Provider provider; @Column(name = "email") @@ -52,15 +48,12 @@ public class User extends JpaBaseEntity { @Column(name = "password") private String password; - @Column(name = "nickname") + @Column(name = "nickname", nullable = false) private String nickname; @Column(name = "profile_image") private String profileImage; - @Embedded - private Recommend recommend; - @Enumerated(EnumType.STRING) @Column(name = "gender") private Gender gender; @@ -74,22 +67,20 @@ public class User extends JpaBaseEntity { private RoleType roleType; @Column(name = "enable_app_push") - private Boolean enableAppPush; + private boolean enableAppPush; @Column(name = "enable_comment_like_push") - private Boolean enableCommentLikePush; + private boolean enableCommentLikePush; @Column(name = "enable_comment_push") - private Boolean enableCommentPush; + private boolean enableCommentPush; @Enumerated(EnumType.STRING) @Column(name = "user_status") private UserStatus userStatus; - public void addSurveyData(final RecommendGroup recommendGroup, final RecommendPlace recommendPlace, - final RecommendActivity recommendActivity) { - this.recommend = new Recommend(recommendGroup, recommendPlace, recommendActivity); - } + @Column(name = "fcm_token") + private String fcmToken; public void updateProfile(final String nickname, final Gender gender, final AgeGroup ageGroup) { this.nickname = nickname; @@ -113,10 +104,6 @@ public void remove() { this.userStatus = UserStatus.DELETE; } - public void inActive() { - this.userStatus = UserStatus.INACTIVE; - } - public void changeAppPushStatus(boolean enableAppPush) { this.enableAppPush = enableAppPush; } diff --git a/storage/db-core/src/main/resources/db-core.yml b/storage/db-core/src/main/resources/db-core.yml index 441ecbf6..c8515efe 100644 --- a/storage/db-core/src/main/resources/db-core.yml +++ b/storage/db-core/src/main/resources/db-core.yml @@ -14,8 +14,8 @@ spring: username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver - replica1: - jdbc-url: jdbc:mysql://localhost:3306/melly_db + replica: + jdbc-url: jdbc:mysql://192.168.0.8:3307/melly_db username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/storage/db-redis/build.gradle b/storage/db-redis/build.gradle index e77ccf8f..6a6dc3b7 100644 --- a/storage/db-redis/build.gradle +++ b/storage/db-redis/build.gradle @@ -1,4 +1,5 @@ dependencies { - api 'org.redisson:redisson-spring-boot-starter:3.23.1' + api 'org.redisson:redisson-spring-boot-starter:3.21.0' + implementation 'org.springframework.boot:spring-boot-starter-data-redis' } diff --git a/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/config/RedisConfig.java b/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/config/RedisConfig.java index 9c2bc469..8d1d0e20 100644 --- a/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/config/RedisConfig.java +++ b/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/config/RedisConfig.java @@ -13,14 +13,15 @@ @Configuration public class RedisConfig { - @Value("${spring.data.redis.host}") + @Value("${spring.redis.token.host}") private String host; - @Value("${spring.data.redis.port}") + @Value("${spring.redis.token.port}") private int port; /* Redis를 Cluster mode가 아닌 single node 모드로 사용하기에 RedisStandaloneConfiguration을 사용했습니다. + Lettuce : Netty 기반의 비동기 클라이언트이므로 다른 Client보다 고성능입니다. */ @Bean public RedisConnectionFactory redisConnectionFactory() { diff --git a/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/repository/FcmTokenRepository.java b/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/repository/FcmTokenRepository.java index ddb53e07..d6d6f9e6 100644 --- a/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/repository/FcmTokenRepository.java +++ b/storage/db-redis/src/main/java/cmc/mellyserver/dbredis/repository/FcmTokenRepository.java @@ -1,9 +1,10 @@ package cmc.mellyserver.dbredis.repository; -import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Repository; +import lombok.RequiredArgsConstructor; + @Repository @RequiredArgsConstructor public class FcmTokenRepository { diff --git a/storage/db-redis/src/main/resources/db-redis.yml b/storage/db-redis/src/main/resources/db-redis.yml index 49ef6165..4ef344c3 100644 --- a/storage/db-redis/src/main/resources/db-redis.yml +++ b/storage/db-redis/src/main/resources/db-redis.yml @@ -1,12 +1,10 @@ spring: - data: - redis: - host: 127.0.0.1 - port: 6379 - connect-timeout: 1000 - timeout: 3000 - lettuce: - pool: - enabled: true - max-active: 10 - min-idle: 10 + redis: + token: + host: 192.168.0.8 + port: 6380 + cache: + host: 192.168.0.8 + port: 6381 + + diff --git a/support/logging/src/main/resources/logback/logback-local.xml b/support/logging/src/main/resources/logback/logback-local.xml index 08488b3f..198836ba 100644 --- a/support/logging/src/main/resources/logback/logback-local.xml +++ b/support/logging/src/main/resources/logback/logback-local.xml @@ -5,7 +5,7 @@ - [%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %red([%thread]) %highlight(%-5level) cyan%([%C.%M:%yellow(%L)]) - + [%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %red([%thread]) %highlight(%-5level) %cyan([%C.%M:%yellow(%L)]) - %msg%n" utf8