diff --git a/docs/ddd-test-refactoring-roadmap.md b/docs/ddd-test-refactoring-roadmap.md index 6d4acf2..3a4ae22 100644 --- a/docs/ddd-test-refactoring-roadmap.md +++ b/docs/ddd-test-refactoring-roadmap.md @@ -302,7 +302,7 @@ keyKeywords / PostKeyword // 서로 다른 도 2026-04-28 현재 상태: -- `domain/useraccount`와 `domain/personalization` 패키지는 이미 분리되어 있다. +- `useraccount`와 `domain/personalization` 패키지는 이미 분리되어 있다. - `PersonalizationProfileServiceTest` 일반 테스트 lane이 존재한다. - 다만 `InterestCommandService`가 `PersonalizationProfileService`를 직접 호출하는 결합은 남아 있다. diff --git a/docs/domain-strategy.md b/docs/domain-strategy.md index 8879cf6..7efc2e0 100644 --- a/docs/domain-strategy.md +++ b/docs/domain-strategy.md @@ -139,7 +139,7 @@ TechFork의 비즈니스 도메인은 다음으로 정의할 수 있다. 현재 문서 기준 결론은 다음과 같다. - **전략 문서와 glossary에서는 `User Account`와 `Personalization Profile`을 별도 컨텍스트로 본다.** -- 현재 구현은 `domain/useraccount`와 `domain/personalization`으로 물리 분리되어 있다. +- 현재 구현은 `useraccount`와 `domain/personalization`으로 물리 분리되어 있다. 의미: diff --git a/docs/test-gap-analysis.md b/docs/test-gap-analysis.md index e777ffc..2804fe5 100644 --- a/docs/test-gap-analysis.md +++ b/docs/test-gap-analysis.md @@ -77,7 +77,7 @@ | domain/post | 4 | 72 | tracked 기준 controller/repository/query service 중심. batch 테스트 3개는 아직 untracked | | domain/recommendation | 3 | 8 | 조회/컨버터 중심, 생성 로직 부족 | | domain/source | 10 | 38 | RSS/배치/스케줄러/락/웹훅 커버 좋음 | -| domain/useraccount + domain/personalization | 8 | 61 | User Account service/controller/repository 커버 + Personalization Profile 기본 unit 안전망 확보 | +| useraccount + domain/personalization | 8 | 61 | User Account service/controller/repository 커버 + Personalization Profile 기본 unit 안전망 확보 | | global | 6 | 32 | Security, cache, util, integration base | | evaluation | 28 | 16 | 검색/추천 품질 평가 및 fixture setup | diff --git a/docs/ubiquitous-language/README.md b/docs/ubiquitous-language/README.md index 955ed55..2cbbb74 100644 --- a/docs/ubiquitous-language/README.md +++ b/docs/ubiquitous-language/README.md @@ -9,7 +9,7 @@ - **기준 단위는 패키지가 아니라 바운디드 컨텍스트다.** 다만 각 문서에 현재 owning package를 함께 적어 코드 탐색 경로를 명확히 한다. - **유비쿼터스 언어 문서는 도메인 전략과 왕복한다.** 새 용어가 나오면 먼저 이 문서를 고치고, 경계가 바뀌면 `domain-strategy.md`를 함께 조정한다. -- **전략 문서에서는 `User Account`와 `Personalization Profile`을 별도 컨텍스트로 본다.** 현재 구현도 `domain/useraccount`와 `domain/personalization`으로 물리 분리되어 있다. +- **전략 문서에서는 `User Account`와 `Personalization Profile`을 별도 컨텍스트로 본다.** 현재 구현도 `useraccount`와 `domain/personalization`으로 물리 분리되어 있다. - 레거시 코드명(`ScrabPost`, `searchWord`, `markAsisClicked`)은 허용하되, 문서/PR/API에서는 표준 용어를 우선 사용한다. - 각 컨텍스트 문서는 가능하면 아래 다섯 블록을 유지한다. 1. 표준 용어 @@ -26,7 +26,7 @@ |---|---|---|---| | Source / Ingestion | [`source-ingestion.md`](./source-ingestion.md) | `src/main/java/com/techfork/domain/source` | RSS 수집, 소스 블로그, 파이프라인 시작점 | | Post / Content | [`post-content.md`](./post-content.md) | `src/main/java/com/techfork/post` | 기술 게시글 본문, 요약, 키워드, 검색 projection | -| User Account | [`user-account.md`](./user-account.md) | `src/main/java/com/techfork/domain/useraccount` | 계정, 온보딩, 관심사, 계정 프로필 | +| User Account | [`user-account.md`](./user-account.md) | `src/main/java/com/techfork/useraccount` | 계정, 온보딩, 관심사, 계정 프로필 | | Personalization Profile | [`personalization-profile.md`](./personalization-profile.md) | `src/main/java/com/techfork/domain/personalization` | 개인화 프로필 생성, 벡터, 핵심 키워드, 재생성 | | Activity | [`activity.md`](./activity.md) | `src/main/java/com/techfork/activity` | 읽기/검색/북마크 행동 기록 | | Search | [`search.md`](./search.md) | `src/main/java/com/techfork/domain/search` | query service / read model 중심 컨텍스트 | diff --git a/docs/ubiquitous-language/activity.md b/docs/ubiquitous-language/activity.md index d9e2a16..1c511bb 100644 --- a/docs/ubiquitous-language/activity.md +++ b/docs/ubiquitous-language/activity.md @@ -89,7 +89,7 @@ - `src/main/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepository.java` - `src/main/java/com/techfork/activity/bookmark/presentation/BookmarkConverter.java` - `src/main/java/com/techfork/activity/bookmark/presentation/BookmarkController.java` -- `src/main/java/com/techfork/domain/useraccount/service/UserLookupService.java` +- `src/main/java/com/techfork/useraccount/application/query/lookup/UserLookupService.java` - `src/main/java/com/techfork/post/application/query/lookup/PostLookupService.java` - `src/main/java/com/techfork/post/application/command/PostViewCountCommandService.java` - `src/main/java/com/techfork/post/application/query/lookup/PostKeywordLookupService.java` diff --git a/docs/ubiquitous-language/user-account.md b/docs/ubiquitous-language/user-account.md index b318d40..f44f73a 100644 --- a/docs/ubiquitous-language/user-account.md +++ b/docs/ubiquitous-language/user-account.md @@ -1,11 +1,11 @@ # User Account > 사용자 계정, 온보딩, 관심사, 계정 프로필을 다루는 개념적 바운디드 컨텍스트입니다. -> 현재 구현은 `domain/useraccount`로 분리되어 있으며, `Personalization Profile`과 물리적으로도 구분됩니다. +> 현재 구현은 `useraccount`로 분리되어 있으며, `Personalization Profile`과 물리적으로도 구분됩니다. ## Owning packages -- `src/main/java/com/techfork/domain/useraccount` +- `src/main/java/com/techfork/useraccount` ## 표준 용어 @@ -50,11 +50,11 @@ ## 주요 근거 파일 -- `src/main/java/com/techfork/domain/useraccount/entity/User.java` -- `src/main/java/com/techfork/domain/useraccount/enums/UserStatus.java` -- `src/main/java/com/techfork/domain/useraccount/enums/EInterestCategory.java` -- `src/main/java/com/techfork/domain/useraccount/enums/EInterestKeyword.java` -- `src/main/java/com/techfork/domain/useraccount/service/UserCommandService.java` -- `src/main/java/com/techfork/domain/useraccount/service/InterestCommandService.java` -- `src/main/java/com/techfork/domain/useraccount/controller/OnboardingController.java` -- `src/main/java/com/techfork/domain/useraccount/controller/UserController.java` +- `src/main/java/com/techfork/useraccount/domain/User.java` +- `src/main/java/com/techfork/useraccount/domain/enums/UserStatus.java` +- `src/main/java/com/techfork/useraccount/domain/enums/EInterestCategory.java` +- `src/main/java/com/techfork/useraccount/domain/enums/EInterestKeyword.java` +- `src/main/java/com/techfork/useraccount/application/command/UserCommandService.java` +- `src/main/java/com/techfork/useraccount/application/command/InterestCommandService.java` +- `src/main/java/com/techfork/useraccount/presentation/OnboardingController.java` +- `src/main/java/com/techfork/useraccount/presentation/UserController.java` diff --git a/docs/ubiquitous-language/user-profile.md b/docs/ubiquitous-language/user-profile.md index dcc65f2..04bfe91 100644 --- a/docs/ubiquitous-language/user-profile.md +++ b/docs/ubiquitous-language/user-profile.md @@ -6,5 +6,5 @@ - [User Account](./user-account.md) - [Personalization Profile](./personalization-profile.md) -현재 구현은 `src/main/java/com/techfork/domain/useraccount`와 +현재 구현은 `src/main/java/com/techfork/useraccount`와 `src/main/java/com/techfork/domain/personalization`로 분리되어 있습니다. diff --git a/src/main/java/com/techfork/activity/bookmark/application/command/BookmarkCommandService.java b/src/main/java/com/techfork/activity/bookmark/application/command/BookmarkCommandService.java index f4a154e..41c360f 100644 --- a/src/main/java/com/techfork/activity/bookmark/application/command/BookmarkCommandService.java +++ b/src/main/java/com/techfork/activity/bookmark/application/command/BookmarkCommandService.java @@ -5,8 +5,8 @@ import com.techfork.activity.bookmark.infrastructure.BookmarkRepository; import com.techfork.post.domain.Post; import com.techfork.post.application.query.lookup.PostLookupService; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.exception.GeneralException; import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/activity/bookmark/application/query/BookmarkQueryService.java b/src/main/java/com/techfork/activity/bookmark/application/query/BookmarkQueryService.java index 6fb89b1..b9b6ce8 100644 --- a/src/main/java/com/techfork/activity/bookmark/application/query/BookmarkQueryService.java +++ b/src/main/java/com/techfork/activity/bookmark/application/query/BookmarkQueryService.java @@ -3,8 +3,8 @@ import com.techfork.activity.bookmark.infrastructure.BookmarkQueryRow; import com.techfork.activity.bookmark.infrastructure.BookmarkRepository; import com.techfork.post.application.query.lookup.PostKeywordLookupService; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.util.CloudflareThirdPartyThumbnailOptimizer; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/techfork/activity/bookmark/domain/Bookmark.java b/src/main/java/com/techfork/activity/bookmark/domain/Bookmark.java index cbaaac0..3c1c20a 100644 --- a/src/main/java/com/techfork/activity/bookmark/domain/Bookmark.java +++ b/src/main/java/com/techfork/activity/bookmark/domain/Bookmark.java @@ -1,7 +1,7 @@ package com.techfork.activity.bookmark.domain; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepository.java b/src/main/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepository.java index f6588ee..870aa41 100644 --- a/src/main/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepository.java +++ b/src/main/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepository.java @@ -2,7 +2,7 @@ import com.techfork.activity.bookmark.domain.Bookmark; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandService.java b/src/main/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandService.java index f13a4ae..67308d8 100644 --- a/src/main/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandService.java +++ b/src/main/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandService.java @@ -2,8 +2,8 @@ import com.techfork.activity.readhistory.domain.SearchHistory; import com.techfork.activity.readhistory.infrastructure.SearchHistoryRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/techfork/activity/readhistory/domain/SearchHistory.java b/src/main/java/com/techfork/activity/readhistory/domain/SearchHistory.java index 9c83c80..c250406 100644 --- a/src/main/java/com/techfork/activity/readhistory/domain/SearchHistory.java +++ b/src/main/java/com/techfork/activity/readhistory/domain/SearchHistory.java @@ -1,6 +1,6 @@ package com.techfork.activity.readhistory.domain; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseEntity; import java.time.LocalDateTime; import jakarta.persistence.Column; diff --git a/src/main/java/com/techfork/activity/readpost/application/command/ReadPostCommandService.java b/src/main/java/com/techfork/activity/readpost/application/command/ReadPostCommandService.java index d3b2c99..a029e8c 100644 --- a/src/main/java/com/techfork/activity/readpost/application/command/ReadPostCommandService.java +++ b/src/main/java/com/techfork/activity/readpost/application/command/ReadPostCommandService.java @@ -7,8 +7,8 @@ import com.techfork.post.domain.Post; import com.techfork.post.application.command.PostViewCountCommandService; import com.techfork.post.application.query.lookup.PostLookupService; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.exception.GeneralException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/techfork/activity/readpost/domain/FirstReadPost.java b/src/main/java/com/techfork/activity/readpost/domain/FirstReadPost.java index afa12d5..fba405d 100644 --- a/src/main/java/com/techfork/activity/readpost/domain/FirstReadPost.java +++ b/src/main/java/com/techfork/activity/readpost/domain/FirstReadPost.java @@ -1,7 +1,7 @@ package com.techfork.activity.readpost.domain; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/com/techfork/activity/readpost/domain/ReadPost.java b/src/main/java/com/techfork/activity/readpost/domain/ReadPost.java index 36ebe38..8babc80 100644 --- a/src/main/java/com/techfork/activity/readpost/domain/ReadPost.java +++ b/src/main/java/com/techfork/activity/readpost/domain/ReadPost.java @@ -1,7 +1,7 @@ package com.techfork.activity.readpost.domain; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicy.java b/src/main/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicy.java index ceed556..636c3a8 100644 --- a/src/main/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicy.java +++ b/src/main/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicy.java @@ -2,7 +2,7 @@ import com.techfork.activity.readpost.infrastructure.FirstReadPostRepository; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/techfork/domain/auth/converter/AuthConverter.java b/src/main/java/com/techfork/domain/auth/converter/AuthConverter.java index 9128836..77dece1 100644 --- a/src/main/java/com/techfork/domain/auth/converter/AuthConverter.java +++ b/src/main/java/com/techfork/domain/auth/converter/AuthConverter.java @@ -2,7 +2,7 @@ import com.techfork.domain.auth.dto.DeveloperTokenResponse; import com.techfork.domain.auth.dto.KakaoLoginResponse; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import org.springframework.stereotype.Component; @Component diff --git a/src/main/java/com/techfork/domain/auth/service/AuthService.java b/src/main/java/com/techfork/domain/auth/service/AuthService.java index 1c3c3ec..610d2d9 100644 --- a/src/main/java/com/techfork/domain/auth/service/AuthService.java +++ b/src/main/java/com/techfork/domain/auth/service/AuthService.java @@ -6,10 +6,10 @@ import com.techfork.domain.auth.dto.TokenRefreshResponse; import com.techfork.domain.auth.dto.kakao.KakaoUserInfoResponse; import com.techfork.domain.auth.exception.AuthErrorCode; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import com.techfork.global.security.auth.service.RefreshTokenService; import com.techfork.global.security.auth.service.UserAuthCacheService; diff --git a/src/main/java/com/techfork/domain/notification/entity/NotificationToken.java b/src/main/java/com/techfork/domain/notification/entity/NotificationToken.java index 7b70033..bfa0842 100644 --- a/src/main/java/com/techfork/domain/notification/entity/NotificationToken.java +++ b/src/main/java/com/techfork/domain/notification/entity/NotificationToken.java @@ -1,6 +1,6 @@ package com.techfork.domain.notification.entity; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseTimeEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/domain/personalization/scheduler/PersonalizationProfileScheduler.java b/src/main/java/com/techfork/domain/personalization/scheduler/PersonalizationProfileScheduler.java index d75486c..a21598e 100644 --- a/src/main/java/com/techfork/domain/personalization/scheduler/PersonalizationProfileScheduler.java +++ b/src/main/java/com/techfork/domain/personalization/scheduler/PersonalizationProfileScheduler.java @@ -1,7 +1,7 @@ package com.techfork.domain.personalization.scheduler; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.domain.personalization.service.PersonalizationProfileService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/techfork/domain/personalization/service/PersonalizationProfileService.java b/src/main/java/com/techfork/domain/personalization/service/PersonalizationProfileService.java index a756cf0..a162c73 100644 --- a/src/main/java/com/techfork/domain/personalization/service/PersonalizationProfileService.java +++ b/src/main/java/com/techfork/domain/personalization/service/PersonalizationProfileService.java @@ -9,12 +9,12 @@ import com.techfork.post.domain.PostKeyword; import com.techfork.domain.recommendation.service.RecommendationService; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserInterestCategoryRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserInterestCategoryRepository; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import com.techfork.global.llm.EmbeddingClient; import com.techfork.global.llm.LlmClient; diff --git a/src/main/java/com/techfork/domain/recommendation/entity/RecommendationHistory.java b/src/main/java/com/techfork/domain/recommendation/entity/RecommendationHistory.java index a681071..eacaeda 100644 --- a/src/main/java/com/techfork/domain/recommendation/entity/RecommendationHistory.java +++ b/src/main/java/com/techfork/domain/recommendation/entity/RecommendationHistory.java @@ -1,7 +1,7 @@ package com.techfork.domain.recommendation.entity; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/domain/recommendation/entity/RecommendedPost.java b/src/main/java/com/techfork/domain/recommendation/entity/RecommendedPost.java index 4e092b7..d301980 100644 --- a/src/main/java/com/techfork/domain/recommendation/entity/RecommendedPost.java +++ b/src/main/java/com/techfork/domain/recommendation/entity/RecommendedPost.java @@ -1,7 +1,7 @@ package com.techfork.domain.recommendation.entity; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/domain/recommendation/repository/RecommendedPostRepository.java b/src/main/java/com/techfork/domain/recommendation/repository/RecommendedPostRepository.java index 92ca652..ef17949 100644 --- a/src/main/java/com/techfork/domain/recommendation/repository/RecommendedPostRepository.java +++ b/src/main/java/com/techfork/domain/recommendation/repository/RecommendedPostRepository.java @@ -1,7 +1,7 @@ package com.techfork.domain.recommendation.repository; import com.techfork.domain.recommendation.entity.RecommendedPost; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/techfork/domain/recommendation/scheduler/RecommendationScheduler.java b/src/main/java/com/techfork/domain/recommendation/scheduler/RecommendationScheduler.java index 738c957..d3d300b 100644 --- a/src/main/java/com/techfork/domain/recommendation/scheduler/RecommendationScheduler.java +++ b/src/main/java/com/techfork/domain/recommendation/scheduler/RecommendationScheduler.java @@ -2,8 +2,8 @@ import com.techfork.domain.recommendation.config.RecommendationProperties; import com.techfork.domain.recommendation.service.RecommendationService; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; diff --git a/src/main/java/com/techfork/domain/recommendation/service/LlmRecommendationService.java b/src/main/java/com/techfork/domain/recommendation/service/LlmRecommendationService.java index 3d228d0..ef14687 100644 --- a/src/main/java/com/techfork/domain/recommendation/service/LlmRecommendationService.java +++ b/src/main/java/com/techfork/domain/recommendation/service/LlmRecommendationService.java @@ -18,7 +18,7 @@ import com.techfork.domain.recommendation.service.MmrService.MmrCandidate; import com.techfork.domain.recommendation.service.MmrService.MmrResult; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; import com.techfork.global.util.RrfScorer; import com.techfork.global.util.TimeDecayStrategy; diff --git a/src/main/java/com/techfork/domain/recommendation/service/RecommendationCommandService.java b/src/main/java/com/techfork/domain/recommendation/service/RecommendationCommandService.java index 7765243..978533b 100644 --- a/src/main/java/com/techfork/domain/recommendation/service/RecommendationCommandService.java +++ b/src/main/java/com/techfork/domain/recommendation/service/RecommendationCommandService.java @@ -1,7 +1,7 @@ package com.techfork.domain.recommendation.service; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/techfork/domain/recommendation/service/RecommendationQueryService.java b/src/main/java/com/techfork/domain/recommendation/service/RecommendationQueryService.java index ea87320..c061600 100644 --- a/src/main/java/com/techfork/domain/recommendation/service/RecommendationQueryService.java +++ b/src/main/java/com/techfork/domain/recommendation/service/RecommendationQueryService.java @@ -6,8 +6,8 @@ import com.techfork.domain.recommendation.dto.RecommendedPostDto; import com.techfork.domain.recommendation.entity.RecommendedPost; import com.techfork.domain.recommendation.repository.RecommendedPostRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/techfork/domain/recommendation/service/RecommendationService.java b/src/main/java/com/techfork/domain/recommendation/service/RecommendationService.java index ebb5fb4..9aafe4f 100644 --- a/src/main/java/com/techfork/domain/recommendation/service/RecommendationService.java +++ b/src/main/java/com/techfork/domain/recommendation/service/RecommendationService.java @@ -1,6 +1,6 @@ package com.techfork.domain.recommendation.service; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; /** * 추천 전략 인터페이스 diff --git a/src/main/java/com/techfork/domain/useraccount/converter/InterestConverter.java b/src/main/java/com/techfork/domain/useraccount/converter/InterestConverter.java deleted file mode 100644 index 9f346eb..0000000 --- a/src/main/java/com/techfork/domain/useraccount/converter/InterestConverter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.techfork.domain.useraccount.converter; - -import com.techfork.domain.useraccount.dto.InterestListResponse; -import com.techfork.domain.useraccount.dto.UserInterestDto; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestKeyword; -import org.springframework.stereotype.Component; - -import java.util.Arrays; -import java.util.List; - -@Component -public class InterestConverter { - - public List toInterestCategoryDtoList() { - return Arrays.stream(EInterestCategory.values()) - .map(category -> { - List keywords = EInterestKeyword.getKeywordsByCategory(category) - .stream() - .map(keyword -> new InterestListResponse.Keyword(keyword.name(), keyword.getDisplayName())) - .toList(); - - return InterestListResponse.Category.builder() - .category(category.name()) - .displayName(category.getDisplayName()) - .keywords(keywords) - .build(); - }) - .toList(); - } - - public List toUserInterestDtoList(List categories) { - return categories.stream() - .map(category -> { - List keywords = category.getKeywords().stream() - .map(keyword -> keyword.getKeyword().name()) - .toList(); - - return UserInterestDto.builder() - .category(category.getCategory().name()) - .keywords(keywords) - .build(); - }) - .toList(); - } -} diff --git a/src/main/java/com/techfork/domain/useraccount/converter/UserConverter.java b/src/main/java/com/techfork/domain/useraccount/converter/UserConverter.java deleted file mode 100644 index 75d4f3e..0000000 --- a/src/main/java/com/techfork/domain/useraccount/converter/UserConverter.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.techfork.domain.useraccount.converter; - -import com.techfork.domain.useraccount.dto.AccountProfileResponse; -import com.techfork.domain.useraccount.entity.User; -import org.springframework.stereotype.Component; - -@Component -public class UserConverter { - - public AccountProfileResponse toAccountProfileResponse(User user) { - return AccountProfileResponse.builder() - .profileImage(user.getProfileImage()) - .nickName(user.getNickName()) - .email(user.getEmail()) - .description(user.getDescription()) - .build(); - } -} diff --git a/src/main/java/com/techfork/domain/useraccount/dto/UserInterestResponse.java b/src/main/java/com/techfork/domain/useraccount/dto/UserInterestResponse.java deleted file mode 100644 index c0d8408..0000000 --- a/src/main/java/com/techfork/domain/useraccount/dto/UserInterestResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.techfork.domain.useraccount.dto; - -import lombok.Builder; - -import java.util.List; - -@Builder -public record UserInterestResponse( - List interests -) { -} diff --git a/src/main/java/com/techfork/domain/useraccount/service/InterestQueryService.java b/src/main/java/com/techfork/domain/useraccount/service/InterestQueryService.java deleted file mode 100644 index 8237df5..0000000 --- a/src/main/java/com/techfork/domain/useraccount/service/InterestQueryService.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.techfork.domain.useraccount.service; - -import com.techfork.domain.useraccount.converter.InterestConverter; -import com.techfork.domain.useraccount.dto.InterestListResponse; -import com.techfork.domain.useraccount.dto.UserInterestDto; -import com.techfork.domain.useraccount.dto.UserInterestResponse; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserInterestCategoryRepository; -import com.techfork.domain.useraccount.repository.UserRepository; -import com.techfork.global.exception.GeneralException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Slf4j -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class InterestQueryService { - - private final UserRepository userRepository; - private final UserInterestCategoryRepository userInterestCategoryRepository; - private final InterestConverter interestConverter; - - public InterestListResponse getAllInterests() { - return InterestListResponse.builder() - .categories(interestConverter.toInterestCategoryDtoList()) - .build(); - } - - public UserInterestResponse getUserInterests(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); - - List categories = userInterestCategoryRepository.findByUserIdWithKeywords(user.getId()); - List userInterestDtos = interestConverter.toUserInterestDtoList(categories); - - return UserInterestResponse.builder() - .interests(userInterestDtos) - .build(); - } -} diff --git a/src/main/java/com/techfork/domain/useraccount/service/UserQueryService.java b/src/main/java/com/techfork/domain/useraccount/service/UserQueryService.java deleted file mode 100644 index 5549a8a..0000000 --- a/src/main/java/com/techfork/domain/useraccount/service/UserQueryService.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.techfork.domain.useraccount.service; - -import com.techfork.domain.useraccount.converter.UserConverter; -import com.techfork.domain.useraccount.dto.AccountProfileResponse; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; -import com.techfork.global.exception.GeneralException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Transactional(readOnly = true) -@Slf4j -@Service -@RequiredArgsConstructor -public class UserQueryService { - - private final UserRepository userRepository; - private final UserConverter userConverter; - - public AccountProfileResponse getAccountProfile(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); - - log.info("Account profile retrieved for userId: {}", userId); - - return userConverter.toAccountProfileResponse(user); - } -} diff --git a/src/main/java/com/techfork/global/security/auth/service/UserAuthCacheService.java b/src/main/java/com/techfork/global/security/auth/service/UserAuthCacheService.java index 3bb171f..fd39cb4 100644 --- a/src/main/java/com/techfork/global/security/auth/service/UserAuthCacheService.java +++ b/src/main/java/com/techfork/global/security/auth/service/UserAuthCacheService.java @@ -1,8 +1,8 @@ package com.techfork.global.security.auth.service; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.UserStatus; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.UserStatus; import com.techfork.global.constant.RedisKey; import com.techfork.global.security.oauth.UserPrincipal; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/global/security/filter/JwtAuthenticationFilter.java b/src/main/java/com/techfork/global/security/filter/JwtAuthenticationFilter.java index a0e3be9..3ac99f8 100644 --- a/src/main/java/com/techfork/global/security/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/techfork/global/security/filter/JwtAuthenticationFilter.java @@ -1,9 +1,9 @@ package com.techfork.global.security.filter; import com.techfork.domain.auth.exception.AuthErrorCode; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.UserStatus; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.UserStatus; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.constant.Constants; import com.techfork.global.constant.MdcKey; import com.techfork.global.exception.GeneralException; diff --git a/src/main/java/com/techfork/global/security/handler/login/OAuth2AuthenticationSuccessHandler.java b/src/main/java/com/techfork/global/security/handler/login/OAuth2AuthenticationSuccessHandler.java index a78331e..97089f0 100644 --- a/src/main/java/com/techfork/global/security/handler/login/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/com/techfork/global/security/handler/login/OAuth2AuthenticationSuccessHandler.java @@ -1,6 +1,6 @@ package com.techfork.global.security.handler.login; -import com.techfork.domain.useraccount.enums.UserStatus; +import com.techfork.useraccount.domain.enums.UserStatus; import com.techfork.global.security.auth.service.RefreshTokenService; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtProperties; diff --git a/src/main/java/com/techfork/global/security/jwt/JwtUtil.java b/src/main/java/com/techfork/global/security/jwt/JwtUtil.java index b417a37..55eaa69 100644 --- a/src/main/java/com/techfork/global/security/jwt/JwtUtil.java +++ b/src/main/java/com/techfork/global/security/jwt/JwtUtil.java @@ -1,7 +1,7 @@ package com.techfork.global.security.jwt; import com.techfork.domain.auth.exception.AuthErrorCode; -import com.techfork.domain.useraccount.enums.Role; +import com.techfork.useraccount.domain.enums.Role; import com.techfork.global.exception.GeneralException; import io.jsonwebtoken.*; import io.jsonwebtoken.security.Keys; diff --git a/src/main/java/com/techfork/global/security/oauth/CustomOidcUserService.java b/src/main/java/com/techfork/global/security/oauth/CustomOidcUserService.java index 9a2a968..cfec70c 100644 --- a/src/main/java/com/techfork/global/security/oauth/CustomOidcUserService.java +++ b/src/main/java/com/techfork/global/security/oauth/CustomOidcUserService.java @@ -1,8 +1,8 @@ package com.techfork.global.security.oauth; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; diff --git a/src/main/java/com/techfork/global/security/oauth/UserPrincipal.java b/src/main/java/com/techfork/global/security/oauth/UserPrincipal.java index a9e2a28..dfda781 100644 --- a/src/main/java/com/techfork/global/security/oauth/UserPrincipal.java +++ b/src/main/java/com/techfork/global/security/oauth/UserPrincipal.java @@ -1,8 +1,8 @@ package com.techfork.global.security.oauth; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.UserStatus; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.UserStatus; import lombok.Builder; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; diff --git a/src/main/java/com/techfork/useraccount/application/command/CompleteOnboardingCommand.java b/src/main/java/com/techfork/useraccount/application/command/CompleteOnboardingCommand.java new file mode 100644 index 0000000..27a1e15 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/command/CompleteOnboardingCommand.java @@ -0,0 +1,12 @@ +package com.techfork.useraccount.application.command; + +import java.util.List; + +public record CompleteOnboardingCommand( + Long userId, + String nickname, + String email, + String description, + List interests +) { +} diff --git a/src/main/java/com/techfork/domain/useraccount/service/InterestCommandService.java b/src/main/java/com/techfork/useraccount/application/command/InterestCommandService.java similarity index 64% rename from src/main/java/com/techfork/domain/useraccount/service/InterestCommandService.java rename to src/main/java/com/techfork/useraccount/application/command/InterestCommandService.java index fb18071..f3cfc5a 100644 --- a/src/main/java/com/techfork/domain/useraccount/service/InterestCommandService.java +++ b/src/main/java/com/techfork/useraccount/application/command/InterestCommandService.java @@ -1,14 +1,12 @@ -package com.techfork.domain.useraccount.service; +package com.techfork.useraccount.application.command; -import com.techfork.domain.useraccount.dto.SaveInterestRequest; -import com.techfork.domain.useraccount.dto.UserInterestDto; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.entity.UserInterestKeyword; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestKeyword; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.UserInterestKeyword; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestKeyword; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.domain.personalization.service.PersonalizationProfileService; import com.techfork.global.exception.GeneralException; import lombok.RequiredArgsConstructor; @@ -27,16 +25,16 @@ public class InterestCommandService { private final UserRepository userRepository; private final PersonalizationProfileService personalizationProfileService; - public void updateUserInterests(Long userId, SaveInterestRequest request) { - User user = userRepository.findByIdWithInterestCategories(userId) + public void updateUserInterests(UpdateUserInterestsCommand command) { + User user = userRepository.findByIdWithInterestCategories(command.userId()) .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); - saveUserInterests(user, request); + saveUserInterests(user, command.interests()); } - void saveUserInterests(User user, SaveInterestRequest request) { + void saveUserInterests(User user, List interests) { user.getInterestCategories().clear(); - List categories = createCategoriesFromRequest(user, request); + List categories = createCategoriesFromRequest(user, interests); user.getInterestCategories().addAll(categories); log.info("Saved {} interest categories for user {}", categories.size(), user.getId()); @@ -44,18 +42,18 @@ void saveUserInterests(User user, SaveInterestRequest request) { personalizationProfileService.generatePersonalizationProfile(user.getId()); } - private List createCategoriesFromRequest(User user, SaveInterestRequest request) { - return request.interests().stream() + private List createCategoriesFromRequest(User user, List interests) { + return interests.stream() .map(dto -> createCategoryWithKeywords(user, dto)) .toList(); } - private UserInterestCategory createCategoryWithKeywords(User user, UserInterestDto dto) { - EInterestCategory category = EInterestCategory.valueOf(dto.category()); + private UserInterestCategory createCategoryWithKeywords(User user, UserInterestCommand command) { + EInterestCategory category = EInterestCategory.valueOf(command.category()); UserInterestCategory userCategory = UserInterestCategory.create(user, category); - if (dto.keywords() != null && !dto.keywords().isEmpty()) { - addKeywordsToCategory(userCategory, category, dto.keywords()); + if (command.keywords() != null && !command.keywords().isEmpty()) { + addKeywordsToCategory(userCategory, category, command.keywords()); } return userCategory; diff --git a/src/main/java/com/techfork/useraccount/application/command/UpdateAccountProfileCommand.java b/src/main/java/com/techfork/useraccount/application/command/UpdateAccountProfileCommand.java new file mode 100644 index 0000000..f29ea11 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/command/UpdateAccountProfileCommand.java @@ -0,0 +1,8 @@ +package com.techfork.useraccount.application.command; + +public record UpdateAccountProfileCommand( + Long userId, + String nickName, + String description +) { +} diff --git a/src/main/java/com/techfork/useraccount/application/command/UpdateUserInterestsCommand.java b/src/main/java/com/techfork/useraccount/application/command/UpdateUserInterestsCommand.java new file mode 100644 index 0000000..dc1afe2 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/command/UpdateUserInterestsCommand.java @@ -0,0 +1,9 @@ +package com.techfork.useraccount.application.command; + +import java.util.List; + +public record UpdateUserInterestsCommand( + Long userId, + List interests +) { +} diff --git a/src/main/java/com/techfork/domain/useraccount/service/UserCommandService.java b/src/main/java/com/techfork/useraccount/application/command/UserCommandService.java similarity index 50% rename from src/main/java/com/techfork/domain/useraccount/service/UserCommandService.java rename to src/main/java/com/techfork/useraccount/application/command/UserCommandService.java index 598cf85..f5e9401 100644 --- a/src/main/java/com/techfork/domain/useraccount/service/UserCommandService.java +++ b/src/main/java/com/techfork/useraccount/application/command/UserCommandService.java @@ -1,14 +1,10 @@ -package com.techfork.domain.useraccount.service; - -import com.techfork.domain.useraccount.dto.OnboardingRequest; -import com.techfork.domain.useraccount.dto.SaveInterestRequest; -import com.techfork.domain.useraccount.dto.UpdateAccountProfileRequest; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +package com.techfork.useraccount.application.command; + +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import com.techfork.global.security.auth.service.UserAuthCacheService; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -24,31 +20,31 @@ public class UserCommandService { private final UserRepository userRepository; private final UserAuthCacheService userAuthCacheService; - public void completeOnboarding(Long userId, @Valid OnboardingRequest request) { - User user = userRepository.findByIdWithInterestCategories(userId) + public void completeOnboarding(CompleteOnboardingCommand command) { + User user = userRepository.findByIdWithInterestCategories(command.userId()) .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); - user.updateUser(request.nickname(), request.email(), request.description()); + user.updateUser(command.nickname(), command.email(), command.description()); - interestCommandService.saveUserInterests(user, new SaveInterestRequest(request.interests())); + interestCommandService.saveUserInterests(user, command.interests()); - userAuthCacheService.evict(userId); + userAuthCacheService.evict(command.userId()); } - public void updateAccountProfile(Long userId, UpdateAccountProfileRequest request) { - User user = userRepository.findById(userId) + public void updateAccountProfile(UpdateAccountProfileCommand command) { + User user = userRepository.findById(command.userId()) .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); - user.updateProfile(request.nickName(), request.description()); + user.updateProfile(command.nickName(), command.description()); log.info("Account profile updated for userId: {} - nickName: {}, description: {}", - userId, - request.nickName() != null ? "updated" : "unchanged", - request.description() != null ? "updated" : "unchanged"); + command.userId(), + command.nickName() != null ? "updated" : "unchanged", + command.description() != null ? "updated" : "unchanged"); } - public void withdrawUser(Long userId) { - User user = userRepository.findById(userId) + public void withdrawUser(WithdrawUserCommand command) { + User user = userRepository.findById(command.userId()) .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); if (user.isWithdrawn()) { @@ -56,7 +52,7 @@ public void withdrawUser(Long userId) { } user.withdraw(); - userAuthCacheService.evict(userId); + userAuthCacheService.evict(command.userId()); log.info("User withdrawn - status changed to WITHDRAWN and personal data anonymized"); } diff --git a/src/main/java/com/techfork/domain/useraccount/dto/UserInterestDto.java b/src/main/java/com/techfork/useraccount/application/command/UserInterestCommand.java similarity index 57% rename from src/main/java/com/techfork/domain/useraccount/dto/UserInterestDto.java rename to src/main/java/com/techfork/useraccount/application/command/UserInterestCommand.java index 9ce4789..5a27d3c 100644 --- a/src/main/java/com/techfork/domain/useraccount/dto/UserInterestDto.java +++ b/src/main/java/com/techfork/useraccount/application/command/UserInterestCommand.java @@ -1,11 +1,11 @@ -package com.techfork.domain.useraccount.dto; +package com.techfork.useraccount.application.command; import lombok.Builder; import java.util.List; @Builder -public record UserInterestDto( +public record UserInterestCommand( String category, List keywords ) { diff --git a/src/main/java/com/techfork/useraccount/application/command/WithdrawUserCommand.java b/src/main/java/com/techfork/useraccount/application/command/WithdrawUserCommand.java new file mode 100644 index 0000000..80d3161 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/command/WithdrawUserCommand.java @@ -0,0 +1,6 @@ +package com.techfork.useraccount.application.command; + +public record WithdrawUserCommand( + Long userId +) { +} diff --git a/src/main/java/com/techfork/useraccount/application/query/GetAccountProfileQuery.java b/src/main/java/com/techfork/useraccount/application/query/GetAccountProfileQuery.java new file mode 100644 index 0000000..c18d04a --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/GetAccountProfileQuery.java @@ -0,0 +1,6 @@ +package com.techfork.useraccount.application.query; + +public record GetAccountProfileQuery( + Long userId +) { +} diff --git a/src/main/java/com/techfork/useraccount/application/query/GetUserInterestsQuery.java b/src/main/java/com/techfork/useraccount/application/query/GetUserInterestsQuery.java new file mode 100644 index 0000000..4f8257d --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/GetUserInterestsQuery.java @@ -0,0 +1,6 @@ +package com.techfork.useraccount.application.query; + +public record GetUserInterestsQuery( + Long userId +) { +} diff --git a/src/main/java/com/techfork/useraccount/application/query/InterestQueryService.java b/src/main/java/com/techfork/useraccount/application/query/InterestQueryService.java new file mode 100644 index 0000000..f8279b6 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/InterestQueryService.java @@ -0,0 +1,62 @@ +package com.techfork.useraccount.application.query; + +import com.techfork.useraccount.application.query.result.GetInterestListResult; +import com.techfork.useraccount.application.query.result.GetUserInterestsResult; +import com.techfork.useraccount.application.query.result.UserInterestResult; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestKeyword; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserInterestCategoryRepository; +import com.techfork.useraccount.infrastructure.UserRepository; +import com.techfork.global.exception.GeneralException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class InterestQueryService { + + private final UserRepository userRepository; + private final UserInterestCategoryRepository userInterestCategoryRepository; + + public GetInterestListResult getAllInterests() { + return GetInterestListResult.builder() + .categories(Arrays.stream(EInterestCategory.values()) + .map(category -> GetInterestListResult.CategoryResult.builder() + .category(category.name()) + .displayName(category.getDisplayName()) + .keywords(EInterestKeyword.getKeywordsByCategory(category) + .stream() + .map(keyword -> new GetInterestListResult.KeywordResult(keyword.name(), keyword.getDisplayName())) + .toList()) + .build()) + .toList()) + .build(); + } + + public GetUserInterestsResult getUserInterests(GetUserInterestsQuery query) { + User user = userRepository.findById(query.userId()) + .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); + + List categories = userInterestCategoryRepository.findByUserIdWithKeywords(user.getId()); + List interests = categories.stream() + .map(category -> UserInterestResult.builder() + .category(category.getCategory().name()) + .keywords(category.getKeywords().stream() + .map(keyword -> keyword.getKeyword().name()) + .toList()) + .build()) + .toList(); + + return GetUserInterestsResult.builder() + .interests(interests) + .build(); + } +} diff --git a/src/main/java/com/techfork/useraccount/application/query/UserQueryService.java b/src/main/java/com/techfork/useraccount/application/query/UserQueryService.java new file mode 100644 index 0000000..ee82732 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/UserQueryService.java @@ -0,0 +1,34 @@ +package com.techfork.useraccount.application.query; + +import com.techfork.useraccount.application.query.result.GetAccountProfileResult; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; +import com.techfork.global.exception.GeneralException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Transactional(readOnly = true) +@Slf4j +@Service +@RequiredArgsConstructor +public class UserQueryService { + + private final UserRepository userRepository; + + public GetAccountProfileResult getAccountProfile(GetAccountProfileQuery query) { + User user = userRepository.findById(query.userId()) + .orElseThrow(() -> new GeneralException(UserErrorCode.USER_NOT_FOUND)); + + log.info("Account profile retrieved for userId: {}", query.userId()); + + return GetAccountProfileResult.builder() + .profileImage(user.getProfileImage()) + .nickName(user.getNickName()) + .email(user.getEmail()) + .description(user.getDescription()) + .build(); + } +} diff --git a/src/main/java/com/techfork/domain/useraccount/service/UserLookupService.java b/src/main/java/com/techfork/useraccount/application/query/lookup/UserLookupService.java similarity index 70% rename from src/main/java/com/techfork/domain/useraccount/service/UserLookupService.java rename to src/main/java/com/techfork/useraccount/application/query/lookup/UserLookupService.java index 5a6e25a..8650e40 100644 --- a/src/main/java/com/techfork/domain/useraccount/service/UserLookupService.java +++ b/src/main/java/com/techfork/useraccount/application/query/lookup/UserLookupService.java @@ -1,8 +1,8 @@ -package com.techfork.domain.useraccount.service; +package com.techfork.useraccount.application.query.lookup; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/techfork/useraccount/application/query/result/GetAccountProfileResult.java b/src/main/java/com/techfork/useraccount/application/query/result/GetAccountProfileResult.java new file mode 100644 index 0000000..f85aa1b --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/result/GetAccountProfileResult.java @@ -0,0 +1,12 @@ +package com.techfork.useraccount.application.query.result; + +import lombok.Builder; + +@Builder +public record GetAccountProfileResult( + String profileImage, + String nickName, + String email, + String description +) { +} diff --git a/src/main/java/com/techfork/useraccount/application/query/result/GetInterestListResult.java b/src/main/java/com/techfork/useraccount/application/query/result/GetInterestListResult.java new file mode 100644 index 0000000..c788497 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/result/GetInterestListResult.java @@ -0,0 +1,24 @@ +package com.techfork.useraccount.application.query.result; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record GetInterestListResult( + List categories +) { + @Builder + public record CategoryResult( + String category, + String displayName, + List keywords + ) { + } + + public record KeywordResult( + String keyword, + String displayName + ) { + } +} diff --git a/src/main/java/com/techfork/useraccount/application/query/result/GetUserInterestsResult.java b/src/main/java/com/techfork/useraccount/application/query/result/GetUserInterestsResult.java new file mode 100644 index 0000000..272060e --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/result/GetUserInterestsResult.java @@ -0,0 +1,11 @@ +package com.techfork.useraccount.application.query.result; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record GetUserInterestsResult( + List interests +) { +} diff --git a/src/main/java/com/techfork/useraccount/application/query/result/UserInterestResult.java b/src/main/java/com/techfork/useraccount/application/query/result/UserInterestResult.java new file mode 100644 index 0000000..1948f73 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/application/query/result/UserInterestResult.java @@ -0,0 +1,12 @@ +package com.techfork.useraccount.application.query.result; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record UserInterestResult( + String category, + List keywords +) { +} diff --git a/src/main/java/com/techfork/domain/useraccount/entity/User.java b/src/main/java/com/techfork/useraccount/domain/User.java similarity index 93% rename from src/main/java/com/techfork/domain/useraccount/entity/User.java rename to src/main/java/com/techfork/useraccount/domain/User.java index 086526f..482d8f0 100644 --- a/src/main/java/com/techfork/domain/useraccount/entity/User.java +++ b/src/main/java/com/techfork/useraccount/domain/User.java @@ -1,8 +1,8 @@ -package com.techfork.domain.useraccount.entity; +package com.techfork.useraccount.domain; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; import com.techfork.global.common.BaseTimeEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/domain/useraccount/entity/UserInterestCategory.java b/src/main/java/com/techfork/useraccount/domain/UserInterestCategory.java similarity index 92% rename from src/main/java/com/techfork/domain/useraccount/entity/UserInterestCategory.java rename to src/main/java/com/techfork/useraccount/domain/UserInterestCategory.java index bf7b08b..2130e72 100644 --- a/src/main/java/com/techfork/domain/useraccount/entity/UserInterestCategory.java +++ b/src/main/java/com/techfork/useraccount/domain/UserInterestCategory.java @@ -1,6 +1,6 @@ -package com.techfork.domain.useraccount.entity; +package com.techfork.useraccount.domain; -import com.techfork.domain.useraccount.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestCategory; import com.techfork.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/domain/useraccount/entity/UserInterestKeyword.java b/src/main/java/com/techfork/useraccount/domain/UserInterestKeyword.java similarity index 92% rename from src/main/java/com/techfork/domain/useraccount/entity/UserInterestKeyword.java rename to src/main/java/com/techfork/useraccount/domain/UserInterestKeyword.java index 3274e31..c3af7a5 100644 --- a/src/main/java/com/techfork/domain/useraccount/entity/UserInterestKeyword.java +++ b/src/main/java/com/techfork/useraccount/domain/UserInterestKeyword.java @@ -1,6 +1,6 @@ -package com.techfork.domain.useraccount.entity; +package com.techfork.useraccount.domain; -import com.techfork.domain.useraccount.enums.EInterestKeyword; +import com.techfork.useraccount.domain.enums.EInterestKeyword; import com.techfork.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/com/techfork/domain/useraccount/enums/EInterestCategory.java b/src/main/java/com/techfork/useraccount/domain/enums/EInterestCategory.java similarity index 93% rename from src/main/java/com/techfork/domain/useraccount/enums/EInterestCategory.java rename to src/main/java/com/techfork/useraccount/domain/enums/EInterestCategory.java index 80d8245..3bd9ade 100644 --- a/src/main/java/com/techfork/domain/useraccount/enums/EInterestCategory.java +++ b/src/main/java/com/techfork/useraccount/domain/enums/EInterestCategory.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.enums; +package com.techfork.useraccount.domain.enums; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/domain/useraccount/enums/EInterestKeyword.java b/src/main/java/com/techfork/useraccount/domain/enums/EInterestKeyword.java similarity index 99% rename from src/main/java/com/techfork/domain/useraccount/enums/EInterestKeyword.java rename to src/main/java/com/techfork/useraccount/domain/enums/EInterestKeyword.java index 65a92cc..6781503 100644 --- a/src/main/java/com/techfork/domain/useraccount/enums/EInterestKeyword.java +++ b/src/main/java/com/techfork/useraccount/domain/enums/EInterestKeyword.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.enums; +package com.techfork.useraccount.domain.enums; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/domain/useraccount/enums/Role.java b/src/main/java/com/techfork/useraccount/domain/enums/Role.java similarity index 80% rename from src/main/java/com/techfork/domain/useraccount/enums/Role.java rename to src/main/java/com/techfork/useraccount/domain/enums/Role.java index c9cc787..85fc78a 100644 --- a/src/main/java/com/techfork/domain/useraccount/enums/Role.java +++ b/src/main/java/com/techfork/useraccount/domain/enums/Role.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.enums; +package com.techfork.useraccount.domain.enums; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/domain/useraccount/enums/SocialType.java b/src/main/java/com/techfork/useraccount/domain/enums/SocialType.java similarity index 91% rename from src/main/java/com/techfork/domain/useraccount/enums/SocialType.java rename to src/main/java/com/techfork/useraccount/domain/enums/SocialType.java index 81e15d6..1199813 100644 --- a/src/main/java/com/techfork/domain/useraccount/enums/SocialType.java +++ b/src/main/java/com/techfork/useraccount/domain/enums/SocialType.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.enums; +package com.techfork.useraccount.domain.enums; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/domain/useraccount/enums/UserStatus.java b/src/main/java/com/techfork/useraccount/domain/enums/UserStatus.java similarity index 87% rename from src/main/java/com/techfork/domain/useraccount/enums/UserStatus.java rename to src/main/java/com/techfork/useraccount/domain/enums/UserStatus.java index 7fd3039..4e96d5e 100644 --- a/src/main/java/com/techfork/domain/useraccount/enums/UserStatus.java +++ b/src/main/java/com/techfork/useraccount/domain/enums/UserStatus.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.enums; +package com.techfork.useraccount.domain.enums; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/techfork/domain/useraccount/exception/UserErrorCode.java b/src/main/java/com/techfork/useraccount/domain/exception/UserErrorCode.java similarity index 94% rename from src/main/java/com/techfork/domain/useraccount/exception/UserErrorCode.java rename to src/main/java/com/techfork/useraccount/domain/exception/UserErrorCode.java index 0f380d0..794126d 100644 --- a/src/main/java/com/techfork/domain/useraccount/exception/UserErrorCode.java +++ b/src/main/java/com/techfork/useraccount/domain/exception/UserErrorCode.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.exception; +package com.techfork.useraccount.domain.exception; import com.techfork.global.common.code.BaseCode; import com.techfork.global.response.ReasonDTO; diff --git a/src/main/java/com/techfork/domain/useraccount/repository/UserInterestCategoryRepository.java b/src/main/java/com/techfork/useraccount/infrastructure/UserInterestCategoryRepository.java similarity index 82% rename from src/main/java/com/techfork/domain/useraccount/repository/UserInterestCategoryRepository.java rename to src/main/java/com/techfork/useraccount/infrastructure/UserInterestCategoryRepository.java index 8edc4df..5fc16c5 100644 --- a/src/main/java/com/techfork/domain/useraccount/repository/UserInterestCategoryRepository.java +++ b/src/main/java/com/techfork/useraccount/infrastructure/UserInterestCategoryRepository.java @@ -1,6 +1,6 @@ -package com.techfork.domain.useraccount.repository; +package com.techfork.useraccount.infrastructure; -import com.techfork.domain.useraccount.entity.UserInterestCategory; +import com.techfork.useraccount.domain.UserInterestCategory; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/com/techfork/domain/useraccount/repository/UserRepository.java b/src/main/java/com/techfork/useraccount/infrastructure/UserRepository.java similarity index 91% rename from src/main/java/com/techfork/domain/useraccount/repository/UserRepository.java rename to src/main/java/com/techfork/useraccount/infrastructure/UserRepository.java index 781fb6d..1a29a4d 100644 --- a/src/main/java/com/techfork/domain/useraccount/repository/UserRepository.java +++ b/src/main/java/com/techfork/useraccount/infrastructure/UserRepository.java @@ -1,7 +1,7 @@ -package com.techfork.domain.useraccount.repository; +package com.techfork.useraccount.infrastructure; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/com/techfork/useraccount/presentation/InterestConverter.java b/src/main/java/com/techfork/useraccount/presentation/InterestConverter.java new file mode 100644 index 0000000..f824f20 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/presentation/InterestConverter.java @@ -0,0 +1,55 @@ +package com.techfork.useraccount.presentation; + +import com.techfork.useraccount.application.command.UpdateUserInterestsCommand; +import com.techfork.useraccount.application.command.UserInterestCommand; +import com.techfork.useraccount.application.query.result.GetInterestListResult; +import com.techfork.useraccount.application.query.result.GetUserInterestsResult; +import com.techfork.useraccount.presentation.request.SaveInterestRequest; +import com.techfork.useraccount.presentation.request.UserInterestRequest; +import com.techfork.useraccount.presentation.response.InterestListResponse; +import com.techfork.useraccount.presentation.response.UserInterestResponse; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class InterestConverter { + + public List toUserInterestCommands(List interests) { + return interests.stream() + .map(interest -> UserInterestCommand.builder() + .category(interest.category()) + .keywords(interest.keywords()) + .build()) + .toList(); + } + + public UpdateUserInterestsCommand toUpdateUserInterestsCommand(Long userId, SaveInterestRequest request) { + return new UpdateUserInterestsCommand(userId, toUserInterestCommands(request.interests())); + } + + public InterestListResponse toInterestListResponse(GetInterestListResult result) { + return InterestListResponse.builder() + .categories(result.categories().stream() + .map(category -> InterestListResponse.Category.builder() + .category(category.category()) + .displayName(category.displayName()) + .keywords(category.keywords().stream() + .map(keyword -> new InterestListResponse.Keyword(keyword.keyword(), keyword.displayName())) + .toList()) + .build()) + .toList()) + .build(); + } + + public UserInterestResponse toUserInterestResponse(GetUserInterestsResult result) { + return UserInterestResponse.builder() + .interests(result.interests().stream() + .map(interest -> UserInterestResponse.Interest.builder() + .category(interest.category()) + .keywords(interest.keywords()) + .build()) + .toList()) + .build(); + } +} diff --git a/src/main/java/com/techfork/domain/useraccount/controller/OnboardingController.java b/src/main/java/com/techfork/useraccount/presentation/OnboardingController.java similarity index 56% rename from src/main/java/com/techfork/domain/useraccount/controller/OnboardingController.java rename to src/main/java/com/techfork/useraccount/presentation/OnboardingController.java index a201d54..bfc56e3 100644 --- a/src/main/java/com/techfork/domain/useraccount/controller/OnboardingController.java +++ b/src/main/java/com/techfork/useraccount/presentation/OnboardingController.java @@ -1,9 +1,10 @@ -package com.techfork.domain.useraccount.controller; +package com.techfork.useraccount.presentation; -import com.techfork.domain.useraccount.dto.InterestListResponse; -import com.techfork.domain.useraccount.dto.OnboardingRequest; -import com.techfork.domain.useraccount.service.InterestQueryService; -import com.techfork.domain.useraccount.service.UserCommandService; +import com.techfork.useraccount.application.command.UserCommandService; +import com.techfork.useraccount.application.query.InterestQueryService; +import com.techfork.useraccount.application.query.result.GetInterestListResult; +import com.techfork.useraccount.presentation.request.OnboardingRequest; +import com.techfork.useraccount.presentation.response.InterestListResponse; import com.techfork.global.common.code.SuccessCode; import com.techfork.global.response.BaseResponse; import com.techfork.global.security.oauth.UserPrincipal; @@ -14,7 +15,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "Onboarding", description = "온보딩 API") @Slf4j @@ -25,6 +30,8 @@ public class OnboardingController { private final InterestQueryService interestQueryService; private final UserCommandService userCommandService; + private final InterestConverter interestConverter; + private final UserConverter userConverter; @Operation( summary = "관심사 목록 조회", @@ -32,7 +39,8 @@ public class OnboardingController { ) @GetMapping("/interests") public ResponseEntity> getInterests() { - InterestListResponse response = interestQueryService.getAllInterests(); + GetInterestListResult result = interestQueryService.getAllInterests(); + InterestListResponse response = interestConverter.toInterestListResponse(result); return BaseResponse.of(SuccessCode.OK, response); } @@ -45,7 +53,13 @@ public ResponseEntity> completeOnboarding( @AuthenticationPrincipal UserPrincipal userPrincipal, @Valid @RequestBody OnboardingRequest request ) { - userCommandService.completeOnboarding(userPrincipal.getId(), request); + userCommandService.completeOnboarding( + userConverter.toCompleteOnboardingCommand( + userPrincipal.getId(), + request, + interestConverter.toUserInterestCommands(request.interests()) + ) + ); return BaseResponse.of(SuccessCode.CREATED); } } diff --git a/src/main/java/com/techfork/domain/useraccount/controller/UserController.java b/src/main/java/com/techfork/useraccount/presentation/UserController.java similarity index 59% rename from src/main/java/com/techfork/domain/useraccount/controller/UserController.java rename to src/main/java/com/techfork/useraccount/presentation/UserController.java index 83e2764..451082f 100644 --- a/src/main/java/com/techfork/domain/useraccount/controller/UserController.java +++ b/src/main/java/com/techfork/useraccount/presentation/UserController.java @@ -1,13 +1,18 @@ -package com.techfork.domain.useraccount.controller; +package com.techfork.useraccount.presentation; -import com.techfork.domain.useraccount.dto.SaveInterestRequest; -import com.techfork.domain.useraccount.dto.UpdateAccountProfileRequest; -import com.techfork.domain.useraccount.dto.UserInterestResponse; -import com.techfork.domain.useraccount.dto.AccountProfileResponse; -import com.techfork.domain.useraccount.service.InterestCommandService; -import com.techfork.domain.useraccount.service.InterestQueryService; -import com.techfork.domain.useraccount.service.UserCommandService; -import com.techfork.domain.useraccount.service.UserQueryService; +import com.techfork.useraccount.application.command.InterestCommandService; +import com.techfork.useraccount.application.command.UserCommandService; +import com.techfork.useraccount.application.command.WithdrawUserCommand; +import com.techfork.useraccount.application.query.GetAccountProfileQuery; +import com.techfork.useraccount.application.query.GetUserInterestsQuery; +import com.techfork.useraccount.application.query.InterestQueryService; +import com.techfork.useraccount.application.query.UserQueryService; +import com.techfork.useraccount.application.query.result.GetAccountProfileResult; +import com.techfork.useraccount.application.query.result.GetUserInterestsResult; +import com.techfork.useraccount.presentation.request.SaveInterestRequest; +import com.techfork.useraccount.presentation.request.UpdateAccountProfileRequest; +import com.techfork.useraccount.presentation.response.AccountProfileResponse; +import com.techfork.useraccount.presentation.response.UserInterestResponse; import com.techfork.global.common.code.SuccessCode; import com.techfork.global.response.BaseResponse; import com.techfork.global.security.oauth.UserPrincipal; @@ -18,7 +23,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "User", description = "사용자 API") @Slf4j @@ -31,6 +41,8 @@ public class UserController { private final InterestQueryService interestQueryService; private final UserCommandService userCommandService; private final UserQueryService userQueryService; + private final InterestConverter interestConverter; + private final UserConverter userConverter; @Operation( summary = "내 관심사 수정", @@ -41,7 +53,9 @@ public ResponseEntity> updateMyInterests( @AuthenticationPrincipal UserPrincipal userPrincipal, @Valid @RequestBody SaveInterestRequest request ) { - interestCommandService.updateUserInterests(userPrincipal.getId(), request); + interestCommandService.updateUserInterests( + interestConverter.toUpdateUserInterestsCommand(userPrincipal.getId(), request) + ); return BaseResponse.of(SuccessCode.OK); } @@ -53,7 +67,8 @@ public ResponseEntity> updateMyInterests( public ResponseEntity> getMyInterests( @AuthenticationPrincipal UserPrincipal userPrincipal ) { - UserInterestResponse response = interestQueryService.getUserInterests(userPrincipal.getId()); + GetUserInterestsResult result = interestQueryService.getUserInterests(new GetUserInterestsQuery(userPrincipal.getId())); + UserInterestResponse response = interestConverter.toUserInterestResponse(result); return BaseResponse.of(SuccessCode.OK, response); } @@ -66,7 +81,9 @@ public ResponseEntity> updateMyAccountProfile( @AuthenticationPrincipal UserPrincipal userPrincipal, @RequestBody UpdateAccountProfileRequest request ) { - userCommandService.updateAccountProfile(userPrincipal.getId(), request); + userCommandService.updateAccountProfile( + userConverter.toUpdateAccountProfileCommand(userPrincipal.getId(), request) + ); return BaseResponse.of(SuccessCode.OK); } @@ -78,7 +95,8 @@ public ResponseEntity> updateMyAccountProfile( public ResponseEntity> getMyAccountProfile( @AuthenticationPrincipal UserPrincipal userPrincipal ) { - AccountProfileResponse response = userQueryService.getAccountProfile(userPrincipal.getId()); + GetAccountProfileResult result = userQueryService.getAccountProfile(new GetAccountProfileQuery(userPrincipal.getId())); + AccountProfileResponse response = userConverter.toAccountProfileResponse(result); return BaseResponse.of(SuccessCode.OK, response); } @@ -90,7 +108,7 @@ public ResponseEntity> getMyAccountProfile( public ResponseEntity> withdrawUser( @AuthenticationPrincipal UserPrincipal userPrincipal ) { - userCommandService.withdrawUser(userPrincipal.getId()); + userCommandService.withdrawUser(new WithdrawUserCommand(userPrincipal.getId())); return BaseResponse.of(SuccessCode.OK); } } diff --git a/src/main/java/com/techfork/useraccount/presentation/UserConverter.java b/src/main/java/com/techfork/useraccount/presentation/UserConverter.java new file mode 100644 index 0000000..9a76bc9 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/presentation/UserConverter.java @@ -0,0 +1,43 @@ +package com.techfork.useraccount.presentation; + +import com.techfork.useraccount.application.command.CompleteOnboardingCommand; +import com.techfork.useraccount.application.command.UpdateAccountProfileCommand; +import com.techfork.useraccount.application.command.UserInterestCommand; +import com.techfork.useraccount.application.query.result.GetAccountProfileResult; +import com.techfork.useraccount.presentation.request.OnboardingRequest; +import com.techfork.useraccount.presentation.request.UpdateAccountProfileRequest; +import com.techfork.useraccount.presentation.response.AccountProfileResponse; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class UserConverter { + + public CompleteOnboardingCommand toCompleteOnboardingCommand( + Long userId, + OnboardingRequest request, + List interests + ) { + return new CompleteOnboardingCommand( + userId, + request.nickname(), + request.email(), + request.description(), + interests + ); + } + + public UpdateAccountProfileCommand toUpdateAccountProfileCommand(Long userId, UpdateAccountProfileRequest request) { + return new UpdateAccountProfileCommand(userId, request.nickName(), request.description()); + } + + public AccountProfileResponse toAccountProfileResponse(GetAccountProfileResult result) { + return AccountProfileResponse.builder() + .profileImage(result.profileImage()) + .nickName(result.nickName()) + .email(result.email()) + .description(result.description()) + .build(); + } +} diff --git a/src/main/java/com/techfork/domain/useraccount/dto/OnboardingRequest.java b/src/main/java/com/techfork/useraccount/presentation/request/OnboardingRequest.java similarity index 66% rename from src/main/java/com/techfork/domain/useraccount/dto/OnboardingRequest.java rename to src/main/java/com/techfork/useraccount/presentation/request/OnboardingRequest.java index 24aadf5..5e90899 100644 --- a/src/main/java/com/techfork/domain/useraccount/dto/OnboardingRequest.java +++ b/src/main/java/com/techfork/useraccount/presentation/request/OnboardingRequest.java @@ -1,6 +1,10 @@ -package com.techfork.domain.useraccount.dto; +package com.techfork.useraccount.presentation.request; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.List; @@ -18,6 +22,6 @@ public record OnboardingRequest( @NotNull(message = "관심사 목록은 필수입니다.") @NotEmpty(message = "관심사를 최소 1개 이상 선택해주세요.") - List interests + List interests ) { } diff --git a/src/main/java/com/techfork/domain/useraccount/dto/SaveInterestRequest.java b/src/main/java/com/techfork/useraccount/presentation/request/SaveInterestRequest.java similarity index 75% rename from src/main/java/com/techfork/domain/useraccount/dto/SaveInterestRequest.java rename to src/main/java/com/techfork/useraccount/presentation/request/SaveInterestRequest.java index 6555a57..18ccf06 100644 --- a/src/main/java/com/techfork/domain/useraccount/dto/SaveInterestRequest.java +++ b/src/main/java/com/techfork/useraccount/presentation/request/SaveInterestRequest.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.dto; +package com.techfork.useraccount.presentation.request; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -8,6 +8,6 @@ public record SaveInterestRequest( @NotNull(message = "관심사 목록은 필수입니다.") @NotEmpty(message = "관심사를 최소 1개 이상 선택해주세요.") - List interests + List interests ) { } diff --git a/src/main/java/com/techfork/domain/useraccount/dto/UpdateAccountProfileRequest.java b/src/main/java/com/techfork/useraccount/presentation/request/UpdateAccountProfileRequest.java similarity index 87% rename from src/main/java/com/techfork/domain/useraccount/dto/UpdateAccountProfileRequest.java rename to src/main/java/com/techfork/useraccount/presentation/request/UpdateAccountProfileRequest.java index bbcf409..59e61e0 100644 --- a/src/main/java/com/techfork/domain/useraccount/dto/UpdateAccountProfileRequest.java +++ b/src/main/java/com/techfork/useraccount/presentation/request/UpdateAccountProfileRequest.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.dto; +package com.techfork.useraccount.presentation.request; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/techfork/useraccount/presentation/request/UserInterestRequest.java b/src/main/java/com/techfork/useraccount/presentation/request/UserInterestRequest.java new file mode 100644 index 0000000..cd24b38 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/presentation/request/UserInterestRequest.java @@ -0,0 +1,12 @@ +package com.techfork.useraccount.presentation.request; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record UserInterestRequest( + String category, + List keywords +) { +} diff --git a/src/main/java/com/techfork/domain/useraccount/dto/AccountProfileResponse.java b/src/main/java/com/techfork/useraccount/presentation/response/AccountProfileResponse.java similarity index 76% rename from src/main/java/com/techfork/domain/useraccount/dto/AccountProfileResponse.java rename to src/main/java/com/techfork/useraccount/presentation/response/AccountProfileResponse.java index 6fd4e59..b23788d 100644 --- a/src/main/java/com/techfork/domain/useraccount/dto/AccountProfileResponse.java +++ b/src/main/java/com/techfork/useraccount/presentation/response/AccountProfileResponse.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.dto; +package com.techfork.useraccount.presentation.response; import lombok.Builder; diff --git a/src/main/java/com/techfork/domain/useraccount/dto/InterestListResponse.java b/src/main/java/com/techfork/useraccount/presentation/response/InterestListResponse.java similarity index 80% rename from src/main/java/com/techfork/domain/useraccount/dto/InterestListResponse.java rename to src/main/java/com/techfork/useraccount/presentation/response/InterestListResponse.java index 80dedb2..1eab85f 100644 --- a/src/main/java/com/techfork/domain/useraccount/dto/InterestListResponse.java +++ b/src/main/java/com/techfork/useraccount/presentation/response/InterestListResponse.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.dto; +package com.techfork.useraccount.presentation.response; import lombok.Builder; @@ -13,10 +13,12 @@ public record Category( String category, String displayName, List keywords - ) {} + ) { + } public record Keyword( String keyword, String displayName - ) {} + ) { + } } diff --git a/src/main/java/com/techfork/useraccount/presentation/response/UserInterestResponse.java b/src/main/java/com/techfork/useraccount/presentation/response/UserInterestResponse.java new file mode 100644 index 0000000..e02d127 --- /dev/null +++ b/src/main/java/com/techfork/useraccount/presentation/response/UserInterestResponse.java @@ -0,0 +1,17 @@ +package com.techfork.useraccount.presentation.response; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record UserInterestResponse( + List interests +) { + @Builder + public record Interest( + String category, + List keywords + ) { + } +} diff --git a/src/test/java/com/techfork/activity/bookmark/application/command/BookmarkCommandServiceTest.java b/src/test/java/com/techfork/activity/bookmark/application/command/BookmarkCommandServiceTest.java index 9bb9b33..74b9c0f 100644 --- a/src/test/java/com/techfork/activity/bookmark/application/command/BookmarkCommandServiceTest.java +++ b/src/test/java/com/techfork/activity/bookmark/application/command/BookmarkCommandServiceTest.java @@ -7,9 +7,9 @@ import com.techfork.post.domain.exception.PostErrorCode; import com.techfork.post.application.query.lookup.PostLookupService; import com.techfork.domain.source.entity.TechBlog; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.exception.GeneralException; import java.time.LocalDateTime; import java.util.Optional; diff --git a/src/test/java/com/techfork/activity/bookmark/application/query/BookmarkQueryServiceTest.java b/src/test/java/com/techfork/activity/bookmark/application/query/BookmarkQueryServiceTest.java index c8cd0c8..7c62539 100644 --- a/src/test/java/com/techfork/activity/bookmark/application/query/BookmarkQueryServiceTest.java +++ b/src/test/java/com/techfork/activity/bookmark/application/query/BookmarkQueryServiceTest.java @@ -3,9 +3,9 @@ import com.techfork.activity.bookmark.infrastructure.BookmarkQueryRow; import com.techfork.activity.bookmark.infrastructure.BookmarkRepository; import com.techfork.post.application.query.lookup.PostKeywordLookupService; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.exception.GeneralException; import com.techfork.global.util.CloudflareThirdPartyThumbnailOptimizer; import java.time.LocalDateTime; diff --git a/src/test/java/com/techfork/activity/bookmark/domain/BookmarkTest.java b/src/test/java/com/techfork/activity/bookmark/domain/BookmarkTest.java index db0da07..1909ae2 100644 --- a/src/test/java/com/techfork/activity/bookmark/domain/BookmarkTest.java +++ b/src/test/java/com/techfork/activity/bookmark/domain/BookmarkTest.java @@ -1,7 +1,7 @@ package com.techfork.activity.bookmark.domain; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepositoryTest.java b/src/test/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepositoryTest.java index 16b736e..35f1972 100644 --- a/src/test/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepositoryTest.java +++ b/src/test/java/com/techfork/activity/bookmark/infrastructure/BookmarkRepositoryTest.java @@ -5,9 +5,9 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/techfork/activity/bookmark/integration/BookmarkIntegrationTest.java b/src/test/java/com/techfork/activity/bookmark/integration/BookmarkIntegrationTest.java index a81158f..770e930 100644 --- a/src/test/java/com/techfork/activity/bookmark/integration/BookmarkIntegrationTest.java +++ b/src/test/java/com/techfork/activity/bookmark/integration/BookmarkIntegrationTest.java @@ -8,10 +8,10 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtUtil; diff --git a/src/test/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandServiceTest.java b/src/test/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandServiceTest.java index 04e20b7..b96f2a6 100644 --- a/src/test/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandServiceTest.java +++ b/src/test/java/com/techfork/activity/readhistory/application/command/ReadHistoryCommandServiceTest.java @@ -2,9 +2,9 @@ import com.techfork.activity.readhistory.domain.SearchHistory; import com.techfork.activity.readhistory.infrastructure.SearchHistoryRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.exception.GeneralException; import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/techfork/activity/readhistory/infrastructure/SearchHistoryRepositoryTest.java b/src/test/java/com/techfork/activity/readhistory/infrastructure/SearchHistoryRepositoryTest.java index 5551995..9564cfd 100644 --- a/src/test/java/com/techfork/activity/readhistory/infrastructure/SearchHistoryRepositoryTest.java +++ b/src/test/java/com/techfork/activity/readhistory/infrastructure/SearchHistoryRepositoryTest.java @@ -1,9 +1,9 @@ package com.techfork.activity.readhistory.infrastructure; import com.techfork.activity.readhistory.domain.SearchHistory; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import java.time.LocalDateTime; import java.util.List; import org.junit.jupiter.api.AfterEach; diff --git a/src/test/java/com/techfork/activity/readhistory/integration/SearchHistoryIntegrationTest.java b/src/test/java/com/techfork/activity/readhistory/integration/SearchHistoryIntegrationTest.java index 6851ea2..f377425 100644 --- a/src/test/java/com/techfork/activity/readhistory/integration/SearchHistoryIntegrationTest.java +++ b/src/test/java/com/techfork/activity/readhistory/integration/SearchHistoryIntegrationTest.java @@ -4,10 +4,10 @@ import com.techfork.activity.readhistory.domain.SearchHistory; import com.techfork.activity.readhistory.infrastructure.SearchHistoryRepository; import com.techfork.activity.readhistory.presentation.SearchHistoryRequest; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtUtil; diff --git a/src/test/java/com/techfork/activity/readpost/application/command/ReadPostCommandServiceTest.java b/src/test/java/com/techfork/activity/readpost/application/command/ReadPostCommandServiceTest.java index 7f55238..fe1d95e 100644 --- a/src/test/java/com/techfork/activity/readpost/application/command/ReadPostCommandServiceTest.java +++ b/src/test/java/com/techfork/activity/readpost/application/command/ReadPostCommandServiceTest.java @@ -9,9 +9,9 @@ import com.techfork.post.domain.exception.PostErrorCode; import com.techfork.post.application.query.lookup.PostLookupService; import com.techfork.domain.source.entity.TechBlog; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.service.UserLookupService; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.application.query.lookup.UserLookupService; import com.techfork.global.exception.GeneralException; import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicyTest.java b/src/test/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicyTest.java index 8b607d2..1301533 100644 --- a/src/test/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicyTest.java +++ b/src/test/java/com/techfork/activity/readpost/domain/ReadPostFirstReadPolicyTest.java @@ -2,7 +2,7 @@ import com.techfork.activity.readpost.infrastructure.FirstReadPostRepository; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; diff --git a/src/test/java/com/techfork/activity/readpost/domain/ReadPostTest.java b/src/test/java/com/techfork/activity/readpost/domain/ReadPostTest.java index 74300b8..0d5308c 100644 --- a/src/test/java/com/techfork/activity/readpost/domain/ReadPostTest.java +++ b/src/test/java/com/techfork/activity/readpost/domain/ReadPostTest.java @@ -1,7 +1,7 @@ package com.techfork.activity.readpost.domain; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/activity/readpost/infrastructure/FirstReadPostRepositoryTest.java b/src/test/java/com/techfork/activity/readpost/infrastructure/FirstReadPostRepositoryTest.java index 0849235..44a0ee6 100644 --- a/src/test/java/com/techfork/activity/readpost/infrastructure/FirstReadPostRepositoryTest.java +++ b/src/test/java/com/techfork/activity/readpost/infrastructure/FirstReadPostRepositoryTest.java @@ -4,9 +4,9 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import java.time.LocalDateTime; import java.util.List; import org.junit.jupiter.api.AfterEach; diff --git a/src/test/java/com/techfork/activity/readpost/infrastructure/ReadPostRepositoryTest.java b/src/test/java/com/techfork/activity/readpost/infrastructure/ReadPostRepositoryTest.java index eb0539b..96492ec 100644 --- a/src/test/java/com/techfork/activity/readpost/infrastructure/ReadPostRepositoryTest.java +++ b/src/test/java/com/techfork/activity/readpost/infrastructure/ReadPostRepositoryTest.java @@ -5,9 +5,9 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/techfork/activity/readpost/integration/ReadPostCommandServiceConcurrencyIntegrationTest.java b/src/test/java/com/techfork/activity/readpost/integration/ReadPostCommandServiceConcurrencyIntegrationTest.java index c7ae245..755fd2a 100644 --- a/src/test/java/com/techfork/activity/readpost/integration/ReadPostCommandServiceConcurrencyIntegrationTest.java +++ b/src/test/java/com/techfork/activity/readpost/integration/ReadPostCommandServiceConcurrencyIntegrationTest.java @@ -8,9 +8,9 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import java.time.LocalDateTime; import java.util.Queue; diff --git a/src/test/java/com/techfork/activity/readpost/integration/ReadPostIntegrationTest.java b/src/test/java/com/techfork/activity/readpost/integration/ReadPostIntegrationTest.java index da56061..ef5d67e 100644 --- a/src/test/java/com/techfork/activity/readpost/integration/ReadPostIntegrationTest.java +++ b/src/test/java/com/techfork/activity/readpost/integration/ReadPostIntegrationTest.java @@ -12,10 +12,10 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtUtil; diff --git a/src/test/java/com/techfork/domain/admin/controller/AdminControllerIntegrationTest.java b/src/test/java/com/techfork/domain/admin/controller/AdminControllerIntegrationTest.java index 15f0e38..ae0b2d4 100644 --- a/src/test/java/com/techfork/domain/admin/controller/AdminControllerIntegrationTest.java +++ b/src/test/java/com/techfork/domain/admin/controller/AdminControllerIntegrationTest.java @@ -2,10 +2,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.techfork.domain.auth.exception.AuthErrorCode; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtUtil; diff --git a/src/test/java/com/techfork/domain/auth/controller/AuthControllerIntegrationTest.java b/src/test/java/com/techfork/domain/auth/controller/AuthControllerIntegrationTest.java index a9264f2..2750179 100644 --- a/src/test/java/com/techfork/domain/auth/controller/AuthControllerIntegrationTest.java +++ b/src/test/java/com/techfork/domain/auth/controller/AuthControllerIntegrationTest.java @@ -5,11 +5,11 @@ import com.github.tomakehurst.wiremock.client.WireMock; import com.techfork.domain.auth.dto.KakaoLoginRequest; import com.techfork.domain.auth.exception.AuthErrorCode; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.auth.service.RefreshTokenService; import com.techfork.global.security.jwt.JwtDTO; diff --git a/src/test/java/com/techfork/domain/auth/service/AuthServiceTest.java b/src/test/java/com/techfork/domain/auth/service/AuthServiceTest.java index 5fdef67..c77fd61 100644 --- a/src/test/java/com/techfork/domain/auth/service/AuthServiceTest.java +++ b/src/test/java/com/techfork/domain/auth/service/AuthServiceTest.java @@ -6,11 +6,11 @@ import com.techfork.domain.auth.dto.TokenRefreshResponse; import com.techfork.domain.auth.dto.kakao.KakaoUserInfoResponse; import com.techfork.domain.auth.exception.AuthErrorCode; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import com.techfork.global.security.auth.service.RefreshTokenService; import com.techfork.global.security.auth.service.UserAuthCacheService; diff --git a/src/test/java/com/techfork/domain/personalization/service/PersonalizationProfileServiceTest.java b/src/test/java/com/techfork/domain/personalization/service/PersonalizationProfileServiceTest.java index 2fed549..28762be 100644 --- a/src/test/java/com/techfork/domain/personalization/service/PersonalizationProfileServiceTest.java +++ b/src/test/java/com/techfork/domain/personalization/service/PersonalizationProfileServiceTest.java @@ -10,15 +10,15 @@ import com.techfork.post.domain.PostKeyword; import com.techfork.domain.recommendation.service.RecommendationService; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.entity.UserInterestKeyword; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestKeyword; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserInterestCategoryRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.UserInterestKeyword; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestKeyword; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserInterestCategoryRepository; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.llm.EmbeddingClient; import com.techfork.global.llm.LlmClient; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/techfork/domain/recommendation/controller/RecommendationControllerIntegrationTest.java b/src/test/java/com/techfork/domain/recommendation/controller/RecommendationControllerIntegrationTest.java index 9d0e47f..ffe14f7 100644 --- a/src/test/java/com/techfork/domain/recommendation/controller/RecommendationControllerIntegrationTest.java +++ b/src/test/java/com/techfork/domain/recommendation/controller/RecommendationControllerIntegrationTest.java @@ -9,10 +9,10 @@ import com.techfork.domain.recommendation.repository.RecommendedPostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtUtil; diff --git a/src/test/java/com/techfork/domain/recommendation/converter/RecommendationConverterTest.java b/src/test/java/com/techfork/domain/recommendation/converter/RecommendationConverterTest.java index cf52f9e..05df9d2 100644 --- a/src/test/java/com/techfork/domain/recommendation/converter/RecommendationConverterTest.java +++ b/src/test/java/com/techfork/domain/recommendation/converter/RecommendationConverterTest.java @@ -4,8 +4,8 @@ import com.techfork.domain.recommendation.dto.RecommendedPostDto; import com.techfork.domain.recommendation.entity.RecommendedPost; import com.techfork.domain.source.entity.TechBlog; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; import com.techfork.global.util.CloudflareThirdPartyThumbnailOptimizer; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/domain/recommendation/service/RecommendationQueryServiceTest.java b/src/test/java/com/techfork/domain/recommendation/service/RecommendationQueryServiceTest.java index 7883716..840b606 100644 --- a/src/test/java/com/techfork/domain/recommendation/service/RecommendationQueryServiceTest.java +++ b/src/test/java/com/techfork/domain/recommendation/service/RecommendationQueryServiceTest.java @@ -8,9 +8,9 @@ import com.techfork.domain.recommendation.entity.RecommendedPost; import com.techfork.domain.recommendation.repository.RecommendedPostRepository; import com.techfork.domain.source.entity.TechBlog; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/evaluation/recommendation/KValueComparisonTest.java b/src/test/java/com/techfork/evaluation/recommendation/KValueComparisonTest.java index 2b047ee..cb82b66 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/KValueComparisonTest.java +++ b/src/test/java/com/techfork/evaluation/recommendation/KValueComparisonTest.java @@ -1,7 +1,7 @@ package com.techfork.evaluation.recommendation; import com.techfork.domain.recommendation.config.RecommendationProperties; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import lombok.Builder; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/src/test/java/com/techfork/evaluation/recommendation/LambdaOptimizationTest.java b/src/test/java/com/techfork/evaluation/recommendation/LambdaOptimizationTest.java index 1287ba1..f40d1f5 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/LambdaOptimizationTest.java +++ b/src/test/java/com/techfork/evaluation/recommendation/LambdaOptimizationTest.java @@ -1,7 +1,7 @@ package com.techfork.evaluation.recommendation; import com.techfork.domain.recommendation.config.RecommendationProperties; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/com/techfork/evaluation/recommendation/MmrCandidateSizeComparisonTest.java b/src/test/java/com/techfork/evaluation/recommendation/MmrCandidateSizeComparisonTest.java index 0022ecf..0195e36 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/MmrCandidateSizeComparisonTest.java +++ b/src/test/java/com/techfork/evaluation/recommendation/MmrCandidateSizeComparisonTest.java @@ -1,7 +1,7 @@ package com.techfork.evaluation.recommendation; import com.techfork.domain.recommendation.config.RecommendationProperties; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import lombok.Builder; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/src/test/java/com/techfork/evaluation/recommendation/RecommendationConfigComparisonTest.java b/src/test/java/com/techfork/evaluation/recommendation/RecommendationConfigComparisonTest.java index 044313b..9570656 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/RecommendationConfigComparisonTest.java +++ b/src/test/java/com/techfork/evaluation/recommendation/RecommendationConfigComparisonTest.java @@ -1,6 +1,6 @@ package com.techfork.evaluation.recommendation; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/com/techfork/evaluation/recommendation/RecommendationEvaluationService.java b/src/test/java/com/techfork/evaluation/recommendation/RecommendationEvaluationService.java index 61bc274..a07723d 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/RecommendationEvaluationService.java +++ b/src/test/java/com/techfork/evaluation/recommendation/RecommendationEvaluationService.java @@ -18,7 +18,7 @@ import com.techfork.domain.recommendation.service.MmrService.MmrResult; import com.techfork.global.util.RrfScorer; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; import com.techfork.global.elasticsearch.query.VectorQueryBuilder; import com.techfork.global.util.TimeDecayStrategy; diff --git a/src/test/java/com/techfork/evaluation/recommendation/RecommendationTestBase.java b/src/test/java/com/techfork/evaluation/recommendation/RecommendationTestBase.java index e83fac5..2b2b98e 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/RecommendationTestBase.java +++ b/src/test/java/com/techfork/evaluation/recommendation/RecommendationTestBase.java @@ -5,7 +5,7 @@ import com.techfork.post.infrastructure.PostDocumentRepository; import com.techfork.domain.recommendation.config.RecommendationProperties; import com.techfork.evaluation.recommendation.util.EvaluationFixtureLoader; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.config.ElasticsearchCacheManager; import com.techfork.global.util.VectorUtil; @@ -51,7 +51,7 @@ public abstract class RecommendationTestBase extends IntegrationTestBase { @Autowired protected RecommendationEvaluationService evaluationService; @Autowired protected PostDocumentRepository postDocumentRepository; @Autowired protected ReadPostRepository readPostRepository; - @Autowired protected com.techfork.domain.useraccount.repository.UserRepository userRepository; + @Autowired protected com.techfork.useraccount.infrastructure.UserRepository userRepository; @Autowired protected ElasticsearchClient elasticsearchClient; @Autowired protected ElasticsearchCacheManager elasticsearchCacheManager; diff --git a/src/test/java/com/techfork/evaluation/recommendation/TitleSummaryRatioOptimizationTest.java b/src/test/java/com/techfork/evaluation/recommendation/TitleSummaryRatioOptimizationTest.java index 22a03e5..0d54c64 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/TitleSummaryRatioOptimizationTest.java +++ b/src/test/java/com/techfork/evaluation/recommendation/TitleSummaryRatioOptimizationTest.java @@ -1,6 +1,6 @@ package com.techfork.evaluation.recommendation; -import com.techfork.domain.useraccount.entity.User; +import com.techfork.useraccount.domain.User; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/com/techfork/evaluation/recommendation/setup/UserDataSetupAndExporter.java b/src/test/java/com/techfork/evaluation/recommendation/setup/UserDataSetupAndExporter.java index 4b65ec8..019b447 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/setup/UserDataSetupAndExporter.java +++ b/src/test/java/com/techfork/evaluation/recommendation/setup/UserDataSetupAndExporter.java @@ -8,10 +8,10 @@ import com.techfork.evaluation.recommendation.setup.components.TestDataGenerator.UserCreationResult; import com.techfork.evaluation.recommendation.util.EvaluationFixtureLoader; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.EInterestCategory; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.EInterestCategory; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.*; diff --git a/src/test/java/com/techfork/evaluation/recommendation/setup/components/GroundTruthValidator.java b/src/test/java/com/techfork/evaluation/recommendation/setup/components/GroundTruthValidator.java index fa7682d..4a2e5e7 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/setup/components/GroundTruthValidator.java +++ b/src/test/java/com/techfork/evaluation/recommendation/setup/components/GroundTruthValidator.java @@ -1,6 +1,6 @@ package com.techfork.evaluation.recommendation.setup.components; -import com.techfork.domain.useraccount.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestCategory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/test/java/com/techfork/evaluation/recommendation/setup/components/PostMatcher.java b/src/test/java/com/techfork/evaluation/recommendation/setup/components/PostMatcher.java index 302b76b..110d9e8 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/setup/components/PostMatcher.java +++ b/src/test/java/com/techfork/evaluation/recommendation/setup/components/PostMatcher.java @@ -2,7 +2,7 @@ import com.techfork.post.domain.Post; import com.techfork.post.infrastructure.PostRepository; -import com.techfork.domain.useraccount.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestCategory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/test/java/com/techfork/evaluation/recommendation/setup/components/TestDataGenerator.java b/src/test/java/com/techfork/evaluation/recommendation/setup/components/TestDataGenerator.java index 843b225..81e4a5e 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/setup/components/TestDataGenerator.java +++ b/src/test/java/com/techfork/evaluation/recommendation/setup/components/TestDataGenerator.java @@ -3,8 +3,8 @@ import com.techfork.post.domain.Post; import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.EInterestCategory; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.EInterestCategory; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; import com.techfork.domain.personalization.service.PersonalizationProfileService; import lombok.RequiredArgsConstructor; diff --git a/src/test/java/com/techfork/evaluation/recommendation/setup/components/UserTestDataBuilder.java b/src/test/java/com/techfork/evaluation/recommendation/setup/components/UserTestDataBuilder.java index 803c026..10c4b72 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/setup/components/UserTestDataBuilder.java +++ b/src/test/java/com/techfork/evaluation/recommendation/setup/components/UserTestDataBuilder.java @@ -7,14 +7,14 @@ import com.techfork.activity.bookmark.infrastructure.BookmarkRepository; import com.techfork.activity.readhistory.infrastructure.SearchHistoryRepository; import com.techfork.post.domain.Post; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.entity.UserInterestKeyword; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestKeyword; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserInterestCategoryRepository; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.UserInterestKeyword; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestKeyword; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserInterestCategoryRepository; +import com.techfork.useraccount.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/test/java/com/techfork/evaluation/recommendation/util/EvaluationFixtureLoader.java b/src/test/java/com/techfork/evaluation/recommendation/util/EvaluationFixtureLoader.java index 90281ff..19f8b17 100644 --- a/src/test/java/com/techfork/evaluation/recommendation/util/EvaluationFixtureLoader.java +++ b/src/test/java/com/techfork/evaluation/recommendation/util/EvaluationFixtureLoader.java @@ -13,15 +13,15 @@ import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; import com.techfork.domain.personalization.document.PersonalizationProfileDocument; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.entity.UserInterestKeyword; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestKeyword; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.UserInterestKeyword; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestKeyword; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; import com.techfork.domain.personalization.repository.PersonalizationProfileDocumentRepository; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource; diff --git a/src/test/java/com/techfork/evaluation/search/setup/PersonalizationProfileServiceTest.java b/src/test/java/com/techfork/evaluation/search/setup/PersonalizationProfileServiceTest.java index 9ece5d1..6ed4518 100644 --- a/src/test/java/com/techfork/evaluation/search/setup/PersonalizationProfileServiceTest.java +++ b/src/test/java/com/techfork/evaluation/search/setup/PersonalizationProfileServiceTest.java @@ -1,11 +1,11 @@ package com.techfork.evaluation.search.setup; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserInterestCategoryRepository; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserInterestCategoryRepository; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.domain.personalization.service.PersonalizationProfileService; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; @@ -20,7 +20,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import static com.techfork.domain.useraccount.enums.EInterestCategory.*; +import static com.techfork.useraccount.domain.enums.EInterestCategory.*; @Tag("evaluation-setup") @Disabled("데이터 셋업용 - CI 제외") diff --git a/src/test/java/com/techfork/global/security/SecurityIntegrationTest.java b/src/test/java/com/techfork/global/security/SecurityIntegrationTest.java index 4cd61cd..4a3d476 100644 --- a/src/test/java/com/techfork/global/security/SecurityIntegrationTest.java +++ b/src/test/java/com/techfork/global/security/SecurityIntegrationTest.java @@ -1,9 +1,9 @@ package com.techfork.global.security; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.llm.EmbeddingClient; import com.techfork.global.llm.LlmClient; diff --git a/src/test/java/com/techfork/global/security/auth/service/UserAuthCacheServiceTest.java b/src/test/java/com/techfork/global/security/auth/service/UserAuthCacheServiceTest.java index 566366b..4b84525 100644 --- a/src/test/java/com/techfork/global/security/auth/service/UserAuthCacheServiceTest.java +++ b/src/test/java/com/techfork/global/security/auth/service/UserAuthCacheServiceTest.java @@ -1,9 +1,9 @@ package com.techfork.global.security.auth.service; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; import com.techfork.global.security.oauth.UserPrincipal; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/global/security/filter/JwtAuthenticationFilterTest.java b/src/test/java/com/techfork/global/security/filter/JwtAuthenticationFilterTest.java index 375148d..4b4f00b 100644 --- a/src/test/java/com/techfork/global/security/filter/JwtAuthenticationFilterTest.java +++ b/src/test/java/com/techfork/global/security/filter/JwtAuthenticationFilterTest.java @@ -1,10 +1,10 @@ package com.techfork.global.security.filter; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.security.auth.service.UserAuthCacheService; import com.techfork.global.security.jwt.JwtProperties; import com.techfork.global.security.jwt.JwtUtil; diff --git a/src/test/java/com/techfork/post/integration/PostControllerIntegrationTest.java b/src/test/java/com/techfork/post/integration/PostControllerIntegrationTest.java index d78b61b..d947373 100644 --- a/src/test/java/com/techfork/post/integration/PostControllerIntegrationTest.java +++ b/src/test/java/com/techfork/post/integration/PostControllerIntegrationTest.java @@ -4,10 +4,10 @@ import com.techfork.activity.bookmark.infrastructure.BookmarkRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtUtil; import com.techfork.post.domain.Post; diff --git a/src/test/java/com/techfork/post/integration/PostControllerV2IntegrationTest.java b/src/test/java/com/techfork/post/integration/PostControllerV2IntegrationTest.java index 788a652..16af385 100644 --- a/src/test/java/com/techfork/post/integration/PostControllerV2IntegrationTest.java +++ b/src/test/java/com/techfork/post/integration/PostControllerV2IntegrationTest.java @@ -4,10 +4,10 @@ import com.techfork.activity.bookmark.infrastructure.BookmarkRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtUtil; import com.techfork.post.domain.Post; diff --git a/src/test/java/com/techfork/domain/useraccount/service/InterestCommandServiceTest.java b/src/test/java/com/techfork/useraccount/application/command/InterestCommandServiceTest.java similarity index 52% rename from src/test/java/com/techfork/domain/useraccount/service/InterestCommandServiceTest.java rename to src/test/java/com/techfork/useraccount/application/command/InterestCommandServiceTest.java index 9399c71..d9b9209 100644 --- a/src/test/java/com/techfork/domain/useraccount/service/InterestCommandServiceTest.java +++ b/src/test/java/com/techfork/useraccount/application/command/InterestCommandServiceTest.java @@ -1,12 +1,10 @@ -package com.techfork.domain.useraccount.service; - -import com.techfork.domain.useraccount.dto.SaveInterestRequest; -import com.techfork.domain.useraccount.dto.UserInterestDto; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +package com.techfork.useraccount.application.command; + +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.domain.personalization.service.PersonalizationProfileService; import com.techfork.global.exception.GeneralException; import org.junit.jupiter.api.DisplayName; @@ -25,9 +23,6 @@ import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.*; -/** - * InterestCommandService 단위 테스트 - */ @ExtendWith(MockitoExtension.class) class InterestCommandServiceTest { @@ -43,135 +38,89 @@ class InterestCommandServiceTest { @Test @DisplayName("관심사 저장 - 정상 케이스") void saveUserInterests_Success() { - // Given User user = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - List interests = List.of( - UserInterestDto.builder() + List interests = List.of( + UserInterestCommand.builder() .category("BACKEND") .keywords(List.of("JAVA", "SPRING")) .build() ); - SaveInterestRequest request = new SaveInterestRequest(interests); - - // When - interestCommandService.saveUserInterests(user, request); + interestCommandService.saveUserInterests(user, interests); - // Then assertThat(user.getInterestCategories()).hasSize(1); assertThat(user.getInterestCategories().get(0).getKeywords()).hasSize(2); - - verify(personalizationProfileService, times(1)).generatePersonalizationProfile(user.getId()); + verify(personalizationProfileService).generatePersonalizationProfile(user.getId()); } @Test @DisplayName("관심사 저장 - 키워드 없이 카테고리만 저장") void saveUserInterests_CategoryOnly_Success() { - // Given User user = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - List interests = List.of( - UserInterestDto.builder() + List interests = List.of( + UserInterestCommand.builder() .category("AI_ML") .keywords(null) .build() ); - SaveInterestRequest request = new SaveInterestRequest(interests); + interestCommandService.saveUserInterests(user, interests); - // When - interestCommandService.saveUserInterests(user, request); - - // Then assertThat(user.getInterestCategories()).hasSize(1); assertThat(user.getInterestCategories().get(0).getKeywords()).isEmpty(); - - verify(personalizationProfileService, times(1)).generatePersonalizationProfile(user.getId()); + verify(personalizationProfileService).generatePersonalizationProfile(user.getId()); } @Test @DisplayName("관심사 저장 - 여러 카테고리와 키워드") void saveUserInterests_MultipleCategories_Success() { - // Given User user = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - List interests = List.of( - UserInterestDto.builder() - .category("BACKEND") - .keywords(List.of("JAVA", "SPRING", "PYTHON")) - .build(), - UserInterestDto.builder() - .category("DATABASE") - .keywords(List.of("MYSQL", "REDIS")) - .build(), - UserInterestDto.builder() - .category("DEVOPS") - .keywords(List.of("DOCKER", "KUBERNETES", "CI_CD")) - .build() + List interests = List.of( + UserInterestCommand.builder().category("BACKEND").keywords(List.of("JAVA", "SPRING", "PYTHON")).build(), + UserInterestCommand.builder().category("DATABASE").keywords(List.of("MYSQL", "REDIS")).build(), + UserInterestCommand.builder().category("DEVOPS").keywords(List.of("DOCKER", "KUBERNETES", "CI_CD")).build() ); - SaveInterestRequest request = new SaveInterestRequest(interests); - - // When - interestCommandService.saveUserInterests(user, request); + interestCommandService.saveUserInterests(user, interests); - // Then assertThat(user.getInterestCategories()).hasSize(3); assertThat(user.getInterestCategories().get(0).getKeywords()).hasSize(3); assertThat(user.getInterestCategories().get(1).getKeywords()).hasSize(2); assertThat(user.getInterestCategories().get(2).getKeywords()).hasSize(3); - - verify(personalizationProfileService, times(1)).generatePersonalizationProfile(user.getId()); + verify(personalizationProfileService).generatePersonalizationProfile(user.getId()); } @Test @DisplayName("관심사 저장 - 기존 관심사를 clear하고 새로 저장") void saveUserInterests_ClearExistingInterests_Success() { - // Given User user = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - - // 기존 관심사 추가 user.getInterestCategories().add(mock(UserInterestCategory.class)); user.getInterestCategories().add(mock(UserInterestCategory.class)); assertThat(user.getInterestCategories()).hasSize(2); - List interests = List.of( - UserInterestDto.builder() - .category("FRONTEND") - .keywords(List.of("REACT")) - .build() + List interests = List.of( + UserInterestCommand.builder().category("FRONTEND").keywords(List.of("REACT")).build() ); - SaveInterestRequest request = new SaveInterestRequest(interests); - - // When - interestCommandService.saveUserInterests(user, request); + interestCommandService.saveUserInterests(user, interests); - // Then assertThat(user.getInterestCategories()).hasSize(1); - - verify(personalizationProfileService, times(1)).generatePersonalizationProfile(user.getId()); + verify(personalizationProfileService).generatePersonalizationProfile(user.getId()); } @Test @DisplayName("관심사 저장 - 잘못된 카테고리와 키워드 조합이면 예외 발생") void saveUserInterests_InvalidKeywordCategory_ThrowsException() { - // Given User user = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - // BACKEND 카테고리에 FRONTEND 키워드를 넣으려고 시도 - List interests = List.of( - UserInterestDto.builder() - .category("BACKEND") - .keywords(List.of("REACT")) // REACT는 FRONTEND 키워드 - .build() + List interests = List.of( + UserInterestCommand.builder().category("BACKEND").keywords(List.of("REACT")).build() ); - SaveInterestRequest request = new SaveInterestRequest(interests); - - // When & Then - assertThatThrownBy(() -> interestCommandService.saveUserInterests(user, request)) + assertThatThrownBy(() -> interestCommandService.saveUserInterests(user, interests)) .isInstanceOf(GeneralException.class) .hasFieldOrPropertyWithValue("code", UserErrorCode.INVALID_INTEREST_KEYWORD); @@ -181,52 +130,34 @@ void saveUserInterests_InvalidKeywordCategory_ThrowsException() { @Test @DisplayName("관심사 업데이트 - 정상 케이스") void updateUserInterests_Success() { - // Given Long userId = 1L; User mockUser = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); ReflectionTestUtils.setField(mockUser, "id", userId); - List interests = List.of( - UserInterestDto.builder() - .category("AI_ML") - .keywords(List.of("TENSORFLOW", "PYTORCH")) - .build() + List interests = List.of( + UserInterestCommand.builder().category("AI_ML").keywords(List.of("TENSORFLOW", "PYTORCH")).build() ); - SaveInterestRequest request = new SaveInterestRequest(interests); + given(userRepository.findByIdWithInterestCategories(userId)).willReturn(Optional.of(mockUser)); - given(userRepository.findByIdWithInterestCategories(userId)) - .willReturn(Optional.of(mockUser)); + interestCommandService.updateUserInterests(new UpdateUserInterestsCommand(userId, interests)); - // When - interestCommandService.updateUserInterests(userId, request); - - // Then assertThat(mockUser.getInterestCategories()).hasSize(1); - - verify(userRepository, times(1)).findByIdWithInterestCategories(userId); - verify(personalizationProfileService, times(1)).generatePersonalizationProfile(userId); + verify(userRepository).findByIdWithInterestCategories(userId); + verify(personalizationProfileService).generatePersonalizationProfile(userId); } @Test @DisplayName("관심사 업데이트 - 사용자가 존재하지 않으면 예외 발생") void updateUserInterests_UserNotFound_ThrowsException() { - // Given Long userId = 999L; - SaveInterestRequest request = new SaveInterestRequest( - List.of( - UserInterestDto.builder() - .category("BACKEND") - .keywords(List.of("JAVA")) - .build() - ) + List interests = List.of( + UserInterestCommand.builder().category("BACKEND").keywords(List.of("JAVA")).build() ); - given(userRepository.findByIdWithInterestCategories(userId)) - .willReturn(Optional.empty()); + given(userRepository.findByIdWithInterestCategories(userId)).willReturn(Optional.empty()); - // When & Then - assertThatThrownBy(() -> interestCommandService.updateUserInterests(userId, request)) + assertThatThrownBy(() -> interestCommandService.updateUserInterests(new UpdateUserInterestsCommand(userId, interests))) .isInstanceOf(GeneralException.class) .hasFieldOrPropertyWithValue("code", UserErrorCode.USER_NOT_FOUND); diff --git a/src/test/java/com/techfork/domain/useraccount/service/UserCommandServiceTest.java b/src/test/java/com/techfork/useraccount/application/command/UserCommandServiceTest.java similarity index 57% rename from src/test/java/com/techfork/domain/useraccount/service/UserCommandServiceTest.java rename to src/test/java/com/techfork/useraccount/application/command/UserCommandServiceTest.java index 1624091..9a9f9d3 100644 --- a/src/test/java/com/techfork/domain/useraccount/service/UserCommandServiceTest.java +++ b/src/test/java/com/techfork/useraccount/application/command/UserCommandServiceTest.java @@ -1,13 +1,10 @@ -package com.techfork.domain.useraccount.service; - -import com.techfork.domain.useraccount.dto.OnboardingRequest; -import com.techfork.domain.useraccount.dto.SaveInterestRequest; -import com.techfork.domain.useraccount.dto.UpdateAccountProfileRequest; -import com.techfork.domain.useraccount.dto.UserInterestDto; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +package com.techfork.useraccount.application.command; + +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import com.techfork.global.security.auth.service.UserAuthCacheService; import org.junit.jupiter.api.BeforeEach; @@ -29,9 +26,6 @@ import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.*; -/** - * UserCommandService 단위 테스트 - */ @ExtendWith(MockitoExtension.class) class UserCommandServiceTest { @@ -47,69 +41,52 @@ class UserCommandServiceTest { @InjectMocks private UserCommandService userCommandService; + private User testUser; + private Long userId; + + @BeforeEach + void setUp() { + userId = 1L; + testUser = User.createSocialUser(SocialType.KAKAO, "socialId123", "test@example.com", "profile.jpg"); + testUser.updateUser("테스트유저", "test@example.com", "백엔드 개발자입니다."); + ReflectionTestUtils.setField(testUser, "id", userId); + } + @Test @DisplayName("온보딩 완료 - 정상 케이스") void completeOnboarding_Success() { - // Given - Long userId = 1L; User mockUser = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - - List interests = List.of( - UserInterestDto.builder() - .category("BACKEND") - .keywords(List.of("JAVA", "SPRING")) - .build(), - UserInterestDto.builder() - .category("DATABASE") - .keywords(List.of("MYSQL", "REDIS")) - .build() + List interests = List.of( + UserInterestCommand.builder().category("BACKEND").keywords(List.of("JAVA", "SPRING")).build(), + UserInterestCommand.builder().category("DATABASE").keywords(List.of("MYSQL", "REDIS")).build() ); + CompleteOnboardingCommand command = new CompleteOnboardingCommand(userId, "테크포크유저", "user@techfork.com", "백엔드 개발자입니다", interests); - OnboardingRequest request = new OnboardingRequest( - "테크포크유저", - "user@techfork.com", - "백엔드 개발자입니다", - interests - ); + given(userRepository.findByIdWithInterestCategories(userId)).willReturn(Optional.of(mockUser)); - given(userRepository.findByIdWithInterestCategories(userId)) - .willReturn(Optional.of(mockUser)); + userCommandService.completeOnboarding(command); - // When - userCommandService.completeOnboarding(userId, request); - - // Then assertThat(mockUser.getNickName()).isEqualTo("테크포크유저"); assertThat(mockUser.getEmail()).isEqualTo("user@techfork.com"); assertThat(mockUser.getDescription()).isEqualTo("백엔드 개발자입니다"); - - verify(userRepository, times(1)).findByIdWithInterestCategories(userId); - verify(interestCommandService, times(1)).saveUserInterests(eq(mockUser), any(SaveInterestRequest.class)); + verify(userRepository).findByIdWithInterestCategories(userId); + verify(interestCommandService).saveUserInterests(eq(mockUser), any()); verify(userAuthCacheService).evict(userId); } @Test @DisplayName("온보딩 완료 - 사용자가 존재하지 않으면 예외 발생") void completeOnboarding_UserNotFound_ThrowsException() { - // Given - Long userId = 999L; - OnboardingRequest request = new OnboardingRequest( + CompleteOnboardingCommand command = new CompleteOnboardingCommand( + 999L, "테크포크유저", "user@techfork.com", null, - List.of( - UserInterestDto.builder() - .category("BACKEND") - .keywords(List.of("JAVA")) - .build() - ) + List.of(UserInterestCommand.builder().category("BACKEND").keywords(List.of("JAVA")).build()) ); + given(userRepository.findByIdWithInterestCategories(999L)).willReturn(Optional.empty()); - given(userRepository.findByIdWithInterestCategories(userId)) - .willReturn(Optional.empty()); - - // When & Then - assertThatThrownBy(() -> userCommandService.completeOnboarding(userId, request)) + assertThatThrownBy(() -> userCommandService.completeOnboarding(command)) .isInstanceOf(GeneralException.class) .hasFieldOrPropertyWithValue("code", UserErrorCode.USER_NOT_FOUND); @@ -119,201 +96,124 @@ void completeOnboarding_UserNotFound_ThrowsException() { @Test @DisplayName("온보딩 완료 - description이 null이어도 정상 처리") void completeOnboarding_NullDescription_Success() { - // Given - Long userId = 1L; User mockUser = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - - OnboardingRequest request = new OnboardingRequest( + CompleteOnboardingCommand command = new CompleteOnboardingCommand( + userId, "테크포크유저", "user@techfork.com", null, - List.of( - UserInterestDto.builder() - .category("FRONTEND") - .keywords(List.of("REACT", "TYPESCRIPT")) - .build() - ) + List.of(UserInterestCommand.builder().category("FRONTEND").keywords(List.of("REACT", "TYPESCRIPT")).build()) ); + given(userRepository.findByIdWithInterestCategories(userId)).willReturn(Optional.of(mockUser)); - given(userRepository.findByIdWithInterestCategories(userId)) - .willReturn(Optional.of(mockUser)); - - // When - userCommandService.completeOnboarding(userId, request); + userCommandService.completeOnboarding(command); - // Then assertThat(mockUser.getNickName()).isEqualTo("테크포크유저"); assertThat(mockUser.getEmail()).isEqualTo("user@techfork.com"); assertThat(mockUser.getDescription()).isNull(); - - verify(interestCommandService, times(1)).saveUserInterests(eq(mockUser), any(SaveInterestRequest.class)); + verify(interestCommandService).saveUserInterests(eq(mockUser), any()); verify(userAuthCacheService).evict(userId); } @Test @DisplayName("온보딩 완료 - 여러 카테고리와 키워드 조합") void completeOnboarding_MultipleCategories_Success() { - // Given - Long userId = 1L; User mockUser = User.createSocialUser(SocialType.KAKAO, "testSocialId", "test@example.com", null); - - List interests = List.of( - UserInterestDto.builder() - .category("BACKEND") - .keywords(List.of("JAVA", "SPRING", "PYTHON")) - .build(), - UserInterestDto.builder() - .category("DEVOPS") - .keywords(List.of("DOCKER", "KUBERNETES")) - .build(), - UserInterestDto.builder() - .category("DATABASE") - .keywords(List.of("MYSQL", "POSTGRESQL", "REDIS")) - .build() - ); - - OnboardingRequest request = new OnboardingRequest( - "풀스택개발자", - "fullstack@techfork.com", - "백엔드와 인프라를 다룹니다", - interests + List interests = List.of( + UserInterestCommand.builder().category("BACKEND").keywords(List.of("JAVA", "SPRING", "PYTHON")).build(), + UserInterestCommand.builder().category("DEVOPS").keywords(List.of("DOCKER", "KUBERNETES")).build(), + UserInterestCommand.builder().category("DATABASE").keywords(List.of("MYSQL", "POSTGRESQL", "REDIS")).build() ); + CompleteOnboardingCommand command = new CompleteOnboardingCommand(userId, "풀스택개발자", "fullstack@techfork.com", "백엔드와 인프라를 다룹니다", interests); + given(userRepository.findByIdWithInterestCategories(userId)).willReturn(Optional.of(mockUser)); - given(userRepository.findByIdWithInterestCategories(userId)) - .willReturn(Optional.of(mockUser)); + userCommandService.completeOnboarding(command); - // When - userCommandService.completeOnboarding(userId, request); - - // Then assertThat(mockUser.getNickName()).isEqualTo("풀스택개발자"); - verify(interestCommandService, times(1)).saveUserInterests(eq(mockUser), any(SaveInterestRequest.class)); + verify(interestCommandService).saveUserInterests(eq(mockUser), any()); verify(userAuthCacheService).evict(userId); } - // ===== 프로필 수정 테스트 ===== - - private User testUser; - private Long userId; - - @BeforeEach - void setUp() { - userId = 1L; - testUser = User.createSocialUser(SocialType.KAKAO, "socialId123", "test@example.com", "profile.jpg"); - testUser.updateUser("테스트유저", "test@example.com", "백엔드 개발자입니다."); - ReflectionTestUtils.setField(testUser, "id", userId); - } - @Test @DisplayName("계정 프로필 수정 성공 - 닉네임만 수정") void updateAccountProfile_Success_OnlyNickName() { - // Given - UpdateAccountProfileRequest request = new UpdateAccountProfileRequest("새로운닉네임", null); + UpdateAccountProfileCommand command = new UpdateAccountProfileCommand(userId, "새로운닉네임", null); given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - // When - userCommandService.updateAccountProfile(userId, request); + userCommandService.updateAccountProfile(command); - // Then assertThat(testUser.getNickName()).isEqualTo("새로운닉네임"); - assertThat(testUser.getDescription()).isEqualTo("백엔드 개발자입니다."); // 변경되지 않음 - + assertThat(testUser.getDescription()).isEqualTo("백엔드 개발자입니다."); verify(userRepository).findById(userId); } @Test @DisplayName("계정 프로필 수정 성공 - 자기소개만 수정") void updateAccountProfile_Success_OnlyDescription() { - // Given - UpdateAccountProfileRequest request = new UpdateAccountProfileRequest(null, "새로운 자기소개"); + UpdateAccountProfileCommand command = new UpdateAccountProfileCommand(userId, null, "새로운 자기소개"); given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - // When - userCommandService.updateAccountProfile(userId, request); + userCommandService.updateAccountProfile(command); - // Then - assertThat(testUser.getNickName()).isEqualTo("테스트유저"); // 변경되지 않음 + assertThat(testUser.getNickName()).isEqualTo("테스트유저"); assertThat(testUser.getDescription()).isEqualTo("새로운 자기소개"); - verify(userRepository).findById(userId); } @Test @DisplayName("계정 프로필 수정 성공 - 닉네임과 자기소개 모두 수정") void updateAccountProfile_Success_BothFields() { - // Given - UpdateAccountProfileRequest request = new UpdateAccountProfileRequest("새닉네임", "새 자기소개"); + UpdateAccountProfileCommand command = new UpdateAccountProfileCommand(userId, "새닉네임", "새 자기소개"); given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - // When - userCommandService.updateAccountProfile(userId, request); + userCommandService.updateAccountProfile(command); - // Then assertThat(testUser.getNickName()).isEqualTo("새닉네임"); assertThat(testUser.getDescription()).isEqualTo("새 자기소개"); - verify(userRepository).findById(userId); } @Test @DisplayName("계정 프로필 수정 성공 - 아무것도 수정하지 않음") void updateAccountProfile_Success_NoChanges() { - // Given - UpdateAccountProfileRequest request = new UpdateAccountProfileRequest(null, null); + UpdateAccountProfileCommand command = new UpdateAccountProfileCommand(userId, null, null); given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - // When - userCommandService.updateAccountProfile(userId, request); - - // Then - assertThat(testUser.getNickName()).isEqualTo("테스트유저"); // 변경되지 않음 - assertThat(testUser.getDescription()).isEqualTo("백엔드 개발자입니다."); // 변경되지 않음 + userCommandService.updateAccountProfile(command); + assertThat(testUser.getNickName()).isEqualTo("테스트유저"); + assertThat(testUser.getDescription()).isEqualTo("백엔드 개발자입니다."); verify(userRepository).findById(userId); } @Test @DisplayName("계정 프로필 수정 실패 - 사용자를 찾을 수 없음") void updateAccountProfile_Fail_UserNotFound() { - // Given - UpdateAccountProfileRequest request = new UpdateAccountProfileRequest("새닉네임", "새 자기소개"); + UpdateAccountProfileCommand command = new UpdateAccountProfileCommand(userId, "새닉네임", "새 자기소개"); given(userRepository.findById(userId)).willReturn(Optional.empty()); - // When & Then - assertThatThrownBy(() -> userCommandService.updateAccountProfile(userId, request)) + assertThatThrownBy(() -> userCommandService.updateAccountProfile(command)) .isInstanceOf(GeneralException.class) .extracting(ex -> ((GeneralException) ex).getCode()) .isEqualTo(UserErrorCode.USER_NOT_FOUND); - verify(userRepository).findById(userId); } - // ===== 회원 탈퇴 테스트 ===== - @Test @DisplayName("회원 탈퇴 성공 - 개인정보 익명화 확인") void withdrawUser_Success() { - // Given given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - String originalSocialId = testUser.getSocialId(); - // When - userCommandService.withdrawUser(userId); + userCommandService.withdrawUser(new WithdrawUserCommand(userId)); - // Then - assertThat(testUser.getStatus()).isEqualTo(com.techfork.domain.useraccount.enums.UserStatus.WITHDRAWN); + assertThat(testUser.getStatus()).isEqualTo(UserStatus.WITHDRAWN); assertThat(testUser.isWithdrawn()).isTrue(); - - // 개인정보 익명화 확인 assertThat(testUser.getNickName()).isNull(); assertThat(testUser.getEmail()).isNull(); assertThat(testUser.getProfileImage()).isNull(); assertThat(testUser.getDescription()).isNull(); - - // socialId는 유지 assertThat(testUser.getSocialId()).isEqualTo(originalSocialId); - verify(userRepository).findById(userId); verify(userAuthCacheService).evict(userId); } @@ -321,31 +221,25 @@ void withdrawUser_Success() { @Test @DisplayName("회원 탈퇴 실패 - 사용자를 찾을 수 없음") void withdrawUser_Fail_UserNotFound() { - // Given given(userRepository.findById(userId)).willReturn(Optional.empty()); - // When & Then - assertThatThrownBy(() -> userCommandService.withdrawUser(userId)) + assertThatThrownBy(() -> userCommandService.withdrawUser(new WithdrawUserCommand(userId))) .isInstanceOf(GeneralException.class) .extracting(ex -> ((GeneralException) ex).getCode()) .isEqualTo(UserErrorCode.USER_NOT_FOUND); - verify(userRepository).findById(userId); } @Test @DisplayName("회원 탈퇴 실패 - 이미 탈퇴한 회원") void withdrawUser_Fail_AlreadyWithdrawn() { - // Given - testUser.withdraw(); // 이미 탈퇴 처리 + testUser.withdraw(); given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - // When & Then - assertThatThrownBy(() -> userCommandService.withdrawUser(userId)) + assertThatThrownBy(() -> userCommandService.withdrawUser(new WithdrawUserCommand(userId))) .isInstanceOf(GeneralException.class) .extracting(ex -> ((GeneralException) ex).getCode()) .isEqualTo(UserErrorCode.ALREADY_WITHDRAWN); - verify(userRepository).findById(userId); } } diff --git a/src/test/java/com/techfork/domain/useraccount/service/UserQueryServiceTest.java b/src/test/java/com/techfork/useraccount/application/query/UserQueryServiceTest.java similarity index 67% rename from src/test/java/com/techfork/domain/useraccount/service/UserQueryServiceTest.java rename to src/test/java/com/techfork/useraccount/application/query/UserQueryServiceTest.java index 6ca35e7..c196c95 100644 --- a/src/test/java/com/techfork/domain/useraccount/service/UserQueryServiceTest.java +++ b/src/test/java/com/techfork/useraccount/application/query/UserQueryServiceTest.java @@ -1,11 +1,10 @@ -package com.techfork.domain.useraccount.service; +package com.techfork.useraccount.application.query; -import com.techfork.domain.useraccount.converter.UserConverter; -import com.techfork.domain.useraccount.dto.AccountProfileResponse; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.application.query.result.GetAccountProfileResult; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -29,9 +28,6 @@ class UserQueryServiceTest { @Mock private UserRepository userRepository; - @Mock - private UserConverter userConverter; - @InjectMocks private UserQueryService userQueryService; @@ -49,43 +45,27 @@ void setUp() { @Test @DisplayName("계정 프로필 조회 성공") void getAccountProfile_Success() { - // Given - AccountProfileResponse expectedResponse = AccountProfileResponse.builder() - .profileImage("profile.jpg") - .nickName("테스트유저") - .email("test@example.com") - .description("백엔드 개발자입니다.") - .build(); - given(userRepository.findById(userId)).willReturn(Optional.of(testUser)); - given(userConverter.toAccountProfileResponse(testUser)).willReturn(expectedResponse); - // When - AccountProfileResponse result = userQueryService.getAccountProfile(userId); + GetAccountProfileResult result = userQueryService.getAccountProfile(new GetAccountProfileQuery(userId)); - // Then assertThat(result).isNotNull(); assertThat(result.profileImage()).isEqualTo("profile.jpg"); assertThat(result.nickName()).isEqualTo("테스트유저"); assertThat(result.email()).isEqualTo("test@example.com"); assertThat(result.description()).isEqualTo("백엔드 개발자입니다."); - verify(userRepository).findById(userId); - verify(userConverter).toAccountProfileResponse(testUser); } @Test @DisplayName("계정 프로필 조회 실패 - 사용자를 찾을 수 없음") void getAccountProfile_Fail_UserNotFound() { - // Given given(userRepository.findById(userId)).willReturn(Optional.empty()); - // When & Then - assertThatThrownBy(() -> userQueryService.getAccountProfile(userId)) + assertThatThrownBy(() -> userQueryService.getAccountProfile(new GetAccountProfileQuery(userId))) .isInstanceOf(GeneralException.class) .extracting(ex -> ((GeneralException) ex).getCode()) .isEqualTo(UserErrorCode.USER_NOT_FOUND); - verify(userRepository).findById(userId); } } diff --git a/src/test/java/com/techfork/domain/useraccount/service/UserLookupServiceTest.java b/src/test/java/com/techfork/useraccount/application/query/lookup/UserLookupServiceTest.java similarity index 86% rename from src/test/java/com/techfork/domain/useraccount/service/UserLookupServiceTest.java rename to src/test/java/com/techfork/useraccount/application/query/lookup/UserLookupServiceTest.java index 0e5ecce..2e54e25 100644 --- a/src/test/java/com/techfork/domain/useraccount/service/UserLookupServiceTest.java +++ b/src/test/java/com/techfork/useraccount/application/query/lookup/UserLookupServiceTest.java @@ -1,10 +1,9 @@ -package com.techfork.domain.useraccount.service; +package com.techfork.useraccount.application.query.lookup; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.exception.UserErrorCode; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.exception.UserErrorCode; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.exception.GeneralException; -import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -12,6 +11,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.Optional; + import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.BDDMockito.given; diff --git a/src/test/java/com/techfork/domain/useraccount/entity/UserTest.java b/src/test/java/com/techfork/useraccount/domain/UserTest.java similarity index 96% rename from src/test/java/com/techfork/domain/useraccount/entity/UserTest.java rename to src/test/java/com/techfork/useraccount/domain/UserTest.java index 01e81a2..f473483 100644 --- a/src/test/java/com/techfork/domain/useraccount/entity/UserTest.java +++ b/src/test/java/com/techfork/useraccount/domain/UserTest.java @@ -1,8 +1,8 @@ -package com.techfork.domain.useraccount.entity; +package com.techfork.useraccount.domain; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/domain/useraccount/repository/UserInterestCategoryRepositoryTest.java b/src/test/java/com/techfork/useraccount/infrastructure/UserInterestCategoryRepositoryTest.java similarity index 95% rename from src/test/java/com/techfork/domain/useraccount/repository/UserInterestCategoryRepositoryTest.java rename to src/test/java/com/techfork/useraccount/infrastructure/UserInterestCategoryRepositoryTest.java index 6e3a5b7..d427732 100644 --- a/src/test/java/com/techfork/domain/useraccount/repository/UserInterestCategoryRepositoryTest.java +++ b/src/test/java/com/techfork/useraccount/infrastructure/UserInterestCategoryRepositoryTest.java @@ -1,11 +1,11 @@ -package com.techfork.domain.useraccount.repository; - -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.entity.UserInterestKeyword; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestKeyword; -import com.techfork.domain.useraccount.enums.SocialType; +package com.techfork.useraccount.infrastructure; + +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.UserInterestKeyword; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestKeyword; +import com.techfork.useraccount.domain.enums.SocialType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/domain/useraccount/repository/UserRepositoryTest.java b/src/test/java/com/techfork/useraccount/infrastructure/UserRepositoryTest.java similarity index 97% rename from src/test/java/com/techfork/domain/useraccount/repository/UserRepositoryTest.java rename to src/test/java/com/techfork/useraccount/infrastructure/UserRepositoryTest.java index 50c380a..180174a 100644 --- a/src/test/java/com/techfork/domain/useraccount/repository/UserRepositoryTest.java +++ b/src/test/java/com/techfork/useraccount/infrastructure/UserRepositoryTest.java @@ -1,4 +1,4 @@ -package com.techfork.domain.useraccount.repository; +package com.techfork.useraccount.infrastructure; import com.techfork.activity.readpost.domain.ReadPost; import com.techfork.activity.bookmark.domain.Bookmark; @@ -10,10 +10,10 @@ import com.techfork.post.infrastructure.PostRepository; import com.techfork.domain.source.entity.TechBlog; import com.techfork.domain.source.repository.TechBlogRepository; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.entity.UserInterestCategory; -import com.techfork.domain.useraccount.enums.EInterestCategory; -import com.techfork.domain.useraccount.enums.SocialType; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.UserInterestCategory; +import com.techfork.useraccount.domain.enums.EInterestCategory; +import com.techfork.useraccount.domain.enums.SocialType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/techfork/domain/useraccount/controller/OnboardingControllerIntegrationTest.java b/src/test/java/com/techfork/useraccount/integration/OnboardingControllerIntegrationTest.java similarity index 92% rename from src/test/java/com/techfork/domain/useraccount/controller/OnboardingControllerIntegrationTest.java rename to src/test/java/com/techfork/useraccount/integration/OnboardingControllerIntegrationTest.java index 7f714d7..a62a8a4 100644 --- a/src/test/java/com/techfork/domain/useraccount/controller/OnboardingControllerIntegrationTest.java +++ b/src/test/java/com/techfork/useraccount/integration/OnboardingControllerIntegrationTest.java @@ -1,12 +1,12 @@ -package com.techfork.domain.useraccount.controller; +package com.techfork.useraccount.integration; import com.fasterxml.jackson.databind.ObjectMapper; -import com.techfork.domain.useraccount.dto.OnboardingRequest; -import com.techfork.domain.useraccount.dto.UserInterestDto; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.presentation.request.OnboardingRequest; +import com.techfork.useraccount.presentation.request.UserInterestRequest; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.llm.EmbeddingClient; import com.techfork.global.llm.LlmClient; @@ -98,12 +98,12 @@ void getInterests_Success() throws Exception { @DisplayName("온보딩 완료 - 정상 케이스") void completeOnboarding_Success() throws Exception { // Given - List interests = List.of( - UserInterestDto.builder() + List interests = List.of( + UserInterestRequest.builder() .category("BACKEND") .keywords(List.of("JAVA", "SPRING")) .build(), - UserInterestDto.builder() + UserInterestRequest.builder() .category("DATABASE") .keywords(List.of("MYSQL", "REDIS")) .build() @@ -144,7 +144,7 @@ void completeOnboarding_NullDescription_Success() throws Exception { "user@techfork.com", null, List.of( - UserInterestDto.builder() + UserInterestRequest.builder() .category("FRONTEND") .keywords(List.of("REACT")) .build() @@ -175,7 +175,7 @@ void completeOnboarding_BlankNickname_BadRequest() throws Exception { "user@techfork.com", null, List.of( - UserInterestDto.builder() + UserInterestRequest.builder() .category("BACKEND") .keywords(List.of("JAVA")) .build() @@ -202,7 +202,7 @@ void completeOnboarding_NicknameTooShort_BadRequest() throws Exception { "user@techfork.com", null, List.of( - UserInterestDto.builder() + UserInterestRequest.builder() .category("BACKEND") .keywords(List.of("JAVA")) .build() @@ -229,7 +229,7 @@ void completeOnboarding_InvalidEmail_BadRequest() throws Exception { "invalid-email", // 잘못된 이메일 형식 null, List.of( - UserInterestDto.builder() + UserInterestRequest.builder() .category("BACKEND") .keywords(List.of("JAVA")) .build() @@ -280,7 +280,7 @@ void completeOnboarding_DescriptionTooLong_BadRequest() throws Exception { "user@techfork.com", longDescription, List.of( - UserInterestDto.builder() + UserInterestRequest.builder() .category("BACKEND") .keywords(List.of("JAVA")) .build() @@ -302,16 +302,16 @@ void completeOnboarding_DescriptionTooLong_BadRequest() throws Exception { @DisplayName("온보딩 완료 - 여러 카테고리와 키워드 조합") void completeOnboarding_MultipleCategories_Success() throws Exception { // Given - List interests = List.of( - UserInterestDto.builder() + List interests = List.of( + UserInterestRequest.builder() .category("BACKEND") .keywords(List.of("JAVA", "SPRING", "PYTHON")) .build(), - UserInterestDto.builder() + UserInterestRequest.builder() .category("DEVOPS") .keywords(List.of("DOCKER", "KUBERNETES")) .build(), - UserInterestDto.builder() + UserInterestRequest.builder() .category("DATABASE") .keywords(List.of("MYSQL", "POSTGRESQL", "REDIS")) .build() diff --git a/src/test/java/com/techfork/domain/useraccount/controller/UserControllerIntegrationTest.java b/src/test/java/com/techfork/useraccount/integration/UserControllerIntegrationTest.java similarity index 95% rename from src/test/java/com/techfork/domain/useraccount/controller/UserControllerIntegrationTest.java rename to src/test/java/com/techfork/useraccount/integration/UserControllerIntegrationTest.java index 4fc268a..8128b58 100644 --- a/src/test/java/com/techfork/domain/useraccount/controller/UserControllerIntegrationTest.java +++ b/src/test/java/com/techfork/useraccount/integration/UserControllerIntegrationTest.java @@ -1,12 +1,12 @@ -package com.techfork.domain.useraccount.controller; +package com.techfork.useraccount.integration; import com.fasterxml.jackson.databind.ObjectMapper; -import com.techfork.domain.useraccount.dto.UpdateAccountProfileRequest; -import com.techfork.domain.useraccount.entity.User; -import com.techfork.domain.useraccount.enums.Role; -import com.techfork.domain.useraccount.enums.SocialType; -import com.techfork.domain.useraccount.enums.UserStatus; -import com.techfork.domain.useraccount.repository.UserRepository; +import com.techfork.useraccount.presentation.request.UpdateAccountProfileRequest; +import com.techfork.useraccount.domain.User; +import com.techfork.useraccount.domain.enums.Role; +import com.techfork.useraccount.domain.enums.SocialType; +import com.techfork.useraccount.domain.enums.UserStatus; +import com.techfork.useraccount.infrastructure.UserRepository; import com.techfork.global.common.IntegrationTestBase; import com.techfork.global.security.jwt.JwtDTO; import com.techfork.global.security.jwt.JwtUtil;