Skip to content

Commit ff89857

Browse files
authored
[refactor/#370] Activity ReadPost 슬라이스 분리 및 문서 정리 (#373)
* refactor: readpost 패키지 분리 * refactor: 첫 읽기 체크를 별도의 도메인 서비스로 분리 * docs: 문서와 코드 구조 설명을 현재 ReadPost 슬라이스 상태에 맞춘다
1 parent 69d4508 commit ff89857

34 files changed

Lines changed: 1102 additions & 911 deletions

docs/ddd-test-refactoring-roadmap.md

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,17 @@ docs/test-gap-analysis.md
166166
현재 기준 이미 반영된 대표 안전망은 다음과 같다.
167167

168168
- `ActivityCommandServiceTest`
169-
- `ActivityQueryServiceTest`
170169
- `BookmarkCommandServiceTest`
171170
- `BookmarkQueryServiceTest`
172171
- `BookmarkRepositoryTest`
173172
- `BookmarkTest`
173+
- `BookmarkIntegrationTest`
174+
- `ReadPostCommandServiceTest`
175+
- `ReadPostQueryServiceTest`
176+
- `ReadPostFirstReadPolicyTest`
177+
- `ReadPostTest`
174178
- `ReadPostRepositoryTest`
179+
- `ReadPostIntegrationTest`
175180
- `SearchHistoryRepositoryTest`
176181
- `ActivityControllerIntegrationTest`
177182
- `SearchHistoryRequestTest`
@@ -407,21 +412,28 @@ Activity
407412
```text
408413
이미 존재하는 핵심 테스트
409414
- ActivityCommandServiceTest
410-
- ActivityQueryServiceTest
411415
- BookmarkCommandServiceTest
412416
- BookmarkQueryServiceTest
413417
- BookmarkTest
414418
- BookmarkRepositoryTest
419+
- BookmarkIntegrationTest
420+
- ReadPostCommandServiceTest
421+
- ReadPostQueryServiceTest
422+
- ReadPostFirstReadPolicyTest
423+
- ReadPostTest
415424
- ReadPostRepositoryTest
425+
- ReadPostIntegrationTest
416426
- SearchHistoryRepositoryTest
417427
- ActivityControllerIntegrationTest
418428
- SearchHistoryRequestTest
419429
```
420430

421431
```text
422-
이미 반영된 용어 정리
432+
이미 반영된 slice / 용어 정리
423433
- Bookmark entity/repository/service/test 명칭
424434
- Bookmark slice package (`domain/activity/bookmark/...`)
435+
- ReadPost slice package (`domain/activity/readpost/...`)
436+
- `ReadPostFirstReadPolicy`로 첫 읽기 판별 규칙 분리
425437
- bookmarks table / bookmarkedAt column
426438
- SearchHistory.query + legacy searchWord alias 허용
427439
```
@@ -430,8 +442,6 @@ Activity
430442

431443
```text
432444
ActivityCommandServiceTest
433-
- 사용자가 기술 게시글을 처음 읽으면 조회수가 증가한다.
434-
- 이미 읽은 기술 게시글을 다시 읽으면 조회수는 증가하지 않는다.
435445
- 검색 기록을 저장할 수 있다.
436446
```
437447

@@ -455,7 +465,15 @@ BookmarkTest / BookmarkRepositoryTest
455465
```
456466

457467
```text
458-
ReadPostTest (선택)
468+
ReadPostCommandServiceTest / ReadPostQueryServiceTest / ReadPostFirstReadPolicyTest
469+
- 사용자가 기술 게시글을 처음 읽으면 조회수가 증가한다.
470+
- 이미 읽은 기술 게시글을 다시 읽으면 조회수는 증가하지 않는다.
471+
- 읽은 게시글 목록에 키워드/북마크 여부/커서가 반영된다.
472+
- 첫 읽기 판별 규칙이 `ReadPostFirstReadPolicy`에 고정된다.
473+
```
474+
475+
```text
476+
ReadPostTest
459477
- 읽기 시각과 읽기 시간을 그대로 보존한다.
460478
```
461479

@@ -817,9 +835,22 @@ src/test/java/com/techfork/domain
817835
service
818836
BookmarkCommandServiceTest
819837
BookmarkQueryServiceTest
838+
integration
839+
BookmarkIntegrationTest
840+
readpost
841+
domain
842+
ReadPostFirstReadPolicyTest
843+
entity
844+
ReadPostTest
845+
repository
846+
ReadPostRepositoryTest
847+
service
848+
ReadPostCommandServiceTest
849+
ReadPostQueryServiceTest
850+
integration
851+
ReadPostIntegrationTest
820852
service
821853
ActivityCommandServiceTest
822-
ActivityQueryServiceTest
823854
824855
post
825856
PostTest

docs/tactical-design.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
| Post / Content | `Post` | `PostKeyword`, `PostDocument`, `ContentChunk` | URL은 유일해야 한다. 요약/짧은 요약은 `updateSummaries()`로만 교체된다. 키워드는 `clearKeywords() + addKeyword()` 조합으로만 교체된다. 임베딩 완료 시각은 `markAsEmbedded(LocalDateTime)`으로만 기록된다. `incrementViewCount()`는 비원자적 연산이므로 SQL atomic UPDATE 정책 적용 필요. | `Post`가 핵심 애그리거트 루트다. `PostKeyword``Post` 내부 컬렉션으로 보는 것이 자연스럽다. **`incrementViewCount()` 동시성 정책 미결정** (§1.2 참조). |
1717
| User Account | `User` | `UserInterestCategory`, `UserInterestKeyword` | `socialType + socialId` 조합은 유일해야 한다. 상태 전이는 `PENDING → ACTIVE → WITHDRAWN → PENDING(재활성화)` 경로만 허용된다. 관심 키워드는 반드시 선택된 관심 카테고리에 속해야 한다. 관심사 교체는 `replaceInterests()`로 단일 트랜잭션 내 불변식 검증과 함께 처리된다. | `User`가 루트다. 계정/온보딩/관심사 불변식을 소유한다. **`replaceInterests()` 도메인 메서드 누락** — 불변식 검증이 서비스 레이어에 산재. |
1818
| Personalization Profile | 명시적 쓰기 애그리거트 없음 | `PersonalizationProfileDocument`, `UserActivityData` | 같은 `userId` 기준 현재 개인화 프로필 projection은 하나만 유지된다. 프로필 텍스트, 벡터, 핵심 키워드는 함께 재생성된다. | Personalization Profile은 aggregate보다 read model / application service 중심 컨텍스트다. 현재 `PersonalizationProfileService`가 생성 책임을 가진다. |
19-
| Activity | `ReadPost`, `Bookmark`, `SearchHistory` | 없음 | `Bookmark``userId + postId` 조합이 유일해야 한다. `ReadPost`는 같은 사용자+게시글 중복 저장을 허용하되 `isFirstRead`로 최초 읽기를 구분한다. `SearchHistory`는 같은 검색어를 중복 저장한다 (동일 검색어의 반복 횟수 자체가 개인화 관심 신호가 된다). 행동 기록은 삭제되지 않고 보존된다 (북마크 제외). | 각 행동 기록이 독립 record aggregate처럼 동작한다. `Bookmark``domain/activity/bookmark` slice 아래로 분리되었고 `BookmarkCommandService`/`BookmarkQueryService`/`BookmarkConverter``bookmarks`/`bookmarked_at` rename migration까지 반영되어 있다. `ManyToOne -> id reference` 같은 aggregate 경계 재설계는 별도 이슈로 다루는 편이 안전하다. |
19+
| Activity | `ReadPost`, `Bookmark`, `SearchHistory` | 없음 | `Bookmark``userId + postId` 조합이 유일해야 한다. `ReadPost`는 같은 사용자+게시글 중복 저장을 허용하되 `ReadPostFirstReadPolicy.isFirstRead()`로 최초 읽기를 구분한다. `SearchHistory`는 같은 검색어를 중복 저장한다 (동일 검색어의 반복 횟수 자체가 개인화 관심 신호가 된다). 행동 기록은 삭제되지 않고 보존된다 (북마크 제외). | 각 행동 기록이 독립 record aggregate처럼 동작한다. `Bookmark``domain/activity/bookmark` slice 아래로, `ReadPost``domain/activity/readpost` slice 아래로 분리되었다. `ReadPostCommandService`/`ReadPostQueryService`/`ReadPostConverter`/`ReadPostFirstReadPolicy`가 읽기 저장/조회/첫 읽기 규칙을 분담하고, SearchHistory만 현재 `ActivityCommandService`에 남아 있다. `ManyToOne -> id reference` 같은 aggregate 경계 재설계는 별도 이슈로 다루는 편이 안전하다. |
2020
| Search | 명시적 쓰기 애그리거트 없음 | `SearchResult` DTO, `PostDocument` read model | 검색어를 기반으로 검색 결과를 계산한다. 검색 결과는 저장되는 도메인 상태가 아니라 조회 결과다. | Search는 애그리거트보다 query service/read model 중심 컨텍스트다. |
2121
| Recommendation | **표준: `RecommendationSet`** (현재 코드: `RecommendedPost` 단건) | `RecommendedPost`, `RecommendationHistory` | 같은 `userId + rankOrder` 조합은 유일해야 한다. 새 추천 저장 전 기존 추천은 모두 `RecommendationHistory`로 이동해야 한다. `rankOrder`는 1..N 연속이어야 한다. | 현재 `RecommendedPost` 단건이 루트 역할을 하지만 `RecommendationSet` 개념으로 리팩터링 대상이다 (코드 미반영, 유비쿼터스 언어 README의 문서-코드 동기화 상태 참조). |
2222
| Auth / Security | 독립 애그리거트 없음 | Refresh Token 저장소, `UserPrincipal` | 토큰 발급/검증/갱신을 수행한다. 사용자 자체는 User Account 컨텍스트에 속한다. | Auth / Security는 도메인 애그리거트보다 보안 애플리케이션/인프라 컨텍스트다. |
@@ -157,10 +157,10 @@ createSocialUser() → PENDING
157157
| P0 | 사용자 관심사가 변경됨 | `UserInterestsChanged` | `InterestCommandService.updateUserInterests` | 개인화 프로필 재생성, 추천 재생성 | 현재도 관심사 변경 후 개인화 프로필 생성이 호출된다. 이벤트로 분리하기 좋은 지점이다. |
158158
| P0 | 개인화 프로필이 생성됨 | `PersonalizedProfileGenerated` | `PersonalizationProfileService.generatePersonalizationProfileSync` | 추천 생성, 개인화 검색 준비 완료 | 현재 `PersonalizationProfileService`가 추천 생성을 직접 호출한다. 이벤트 분리 우선순위가 높다. |
159159
| P0 | 추천이 생성됨 | `RecommendationsGenerated` | `LlmRecommendationService.generateRecommendationsForUser` | Notification, Analytics | 사용자에게 보여줄 현재 추천 목록이 바뀌는 핵심 이벤트다. |
160-
| P1 | 기술 게시글을 읽음 | `TechnicalPostRead` | `ActivityCommandService.saveReadPost` | 개인화 프로필 갱신, 추천 정책 | 읽기 행동은 개인화 프로필과 읽은 게시글 제외 정책의 핵심 입력이다. |
161-
| P1 | 기술 게시글을 처음 읽음 | `TechnicalPostFirstRead` | 첫 읽기일 때 `Post.incrementViewCount` | 인기순 정렬, 분석 | 조회수 증가와 인기순 정렬에 직접 연결된다. |
162-
| P1 | 기술 게시글을 북마크함 | `TechnicalPostBookmarked` | `ActivityCommandService.addBookmark` | 개인화 프로필 갱신, 추천 튜닝 | 강한 선호 신호로 개인화 품질에 중요하다. |
163-
| P1 | 북마크가 해제됨 | `BookmarkRemoved` | `ActivityCommandService.deleteBookmark` | 개인화 프로필 갱신, 추천 튜닝 | 선호 신호 제거로 볼 수 있다. |
160+
| P1 | 기술 게시글을 읽음 | `TechnicalPostRead` | `ReadPostCommandService.saveReadPost` | 개인화 프로필 갱신, 추천 정책 | 읽기 행동은 개인화 프로필과 읽은 게시글 제외 정책의 핵심 입력이다. |
161+
| P1 | 기술 게시글을 처음 읽음 | `TechnicalPostFirstRead` | `ReadPostFirstReadPolicy.isFirstRead` + `Post.incrementViewCount` | 인기순 정렬, 분석 | 조회수 증가와 인기순 정렬에 직접 연결된다. |
162+
| P1 | 기술 게시글을 북마크함 | `TechnicalPostBookmarked` | `BookmarkCommandService.addBookmark` | 개인화 프로필 갱신, 추천 튜닝 | 강한 선호 신호로 개인화 품질에 중요하다. |
163+
| P1 | 북마크가 해제됨 | `BookmarkRemoved` | `BookmarkCommandService.deleteBookmark` | 개인화 프로필 갱신, 추천 튜닝 | 선호 신호 제거로 볼 수 있다. |
164164
| P1 | 검색어가 기록됨 | `SearchQueryRecorded` | `saveSearchHistory` | 개인화 프로필 갱신, 검색 분석 | 검색 의도는 개인화 프로필의 주요 입력이다. |
165165
| P1 | 추천 게시글이 클릭됨 | `RecommendationClicked` | `RecommendationHistory.markAsisClicked` 후보 | 추천 분석 | 추천 품질 평가와 모델 개선에 중요하지만 현재 호출 흐름은 약하다. |
166166
| P2 | RSS 크롤링이 요청됨 | `RssCrawlingRequested` | `CrawlingService.executeCrawling` | 운영 모니터링 | 운영 추적과 중복 실행 분석에 유용하다. |

docs/test-gap-analysis.md

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,28 +115,33 @@ PostSummaryWriterTest.java
115115

116116
| 테스트 | 성격 | 주요 커버 |
117117
|---|---|---|
118-
| `ActivityCommandServiceTest` | unit/mock | 읽기 저장, 첫 읽기 조회수 증가, 검색 기록 저장, 예외 |
119-
| `ActivityQueryServiceTest` | unit/mock | 읽은 게시글 목록, 키워드/북마크 여부 조합 |
118+
| `ActivityCommandServiceTest` | unit/mock | 검색 기록 저장, 예외 |
120119
| `BookmarkCommandServiceTest` | unit/mock | 북마크 추가/중복 방지/삭제, 예외 |
121120
| `BookmarkQueryServiceTest` | unit/mock | 북마크 목록, 커서 페이징, 키워드 조합 |
122121
| `BookmarkTest` | unit | 북마크 생성 시 상태 보존 |
122+
| `BookmarkIntegrationTest` | integration | 북마크 API 저장/조회/삭제 흐름 |
123+
| `ReadPostCommandServiceTest` | unit/mock | 읽기 저장, 첫 읽기 조회수 증가, 예외 |
124+
| `ReadPostQueryServiceTest` | unit/mock | 읽은 게시글 목록, 키워드/북마크 여부 조합 |
125+
| `ReadPostFirstReadPolicyTest` | unit/mock | 첫 읽기 판별 규칙 |
126+
| `ReadPostTest` | unit | 읽기 기록 생성 시 상태 보존 |
123127
| `ReadPostRepositoryTest` | JPA | 최근 읽은 글, 중복 읽기 저장, 커서 조회/중복 제거 |
128+
| `ReadPostIntegrationTest` | integration | ReadPost API 저장/조회 흐름 |
124129
| `BookmarkRepositoryTest` | JPA | 북마크 커서 조회, 북마크된 postId 조회, user+post 유일성 |
125130
| `SearchHistoryRepositoryTest` | JPA | 최근 검색 기록 조회 |
126131
| `SearchHistoryRequestTest` | unit | `query` canonical field + legacy `searchWord` alias 역직렬화 |
127-
| `ActivityControllerIntegrationTest` | integration | Activity API 전체 흐름 |
132+
| `ActivityControllerIntegrationTest` | integration | SearchHistory API 흐름 |
128133

129134
#### 평가
130135

131136
Activity는 현재 가장 보호가 잘 된 영역 중 하나다.
132-
`Bookmark` 용어와 `query` canonical field는 이미 코드/테스트에 반영되어 있고, 4.1의 남은 작업을 `Bookmark → ReadPost → SearchHistory` slice로 나눠 진행하기에 비교적 안전하다.
137+
`Bookmark` 용어, `ReadPost` slice 분리, `query` canonical field는 이미 코드/테스트에 반영되어 있고, 4.1의 남은 작업은 사실상 `SearchHistory` slice 쪽으로 좁혀졌다.
133138

134139
#### 남은 갭
135140

136141
| 우선순위 || 이유 |
137142
|---|---|---|
138143
| P1 | `BookmarkTest` | 같은 사용자 + 같은 게시글 조합 유일성 같은 aggregate 관점 의도를 더 직접적으로 표현 가능 |
139-
| P1 | `ReadPost`, `Bookmark`, `SearchHistory` 도메인 엔티티 단위 테스트 | 애그리거트/record aggregate 관점의 테스트 명확화 |
144+
| P1 | `SearchHistory` 도메인 엔티티 단위 테스트 | 애그리거트/record aggregate 관점의 테스트 명확화 |
140145
| P1 | SearchHistory canonical `query` / legacy `searchWord` 호환 범위 문서화 | API 역호환 정책을 언제까지 유지할지 명확화 필요 |
141146
| P2 | 북마크 migration 적용 검증 메모 | `bookmarks` / `bookmarked_at` rename이 운영 환경에 모두 반영됐는지 확인 필요 |
142147

@@ -145,8 +150,8 @@ Activity는 현재 가장 보호가 잘 된 영역 중 하나다.
145150
```text
146151
1. Activity 기존 테스트 전체 통과 확인
147152
2. Bookmark aggregate/entity 테스트 보강 여부 결정
148-
3. ReadPost 규칙과 SearchHistory alias 정책을 별도 slice로 정리
149-
4. Bookmark → ReadPost SearchHistory 순서로 4.1 후속 작업 진행
153+
3. SearchHistory alias 정책과 기록 slice를 별도 작업으로 정리
154+
4. Bookmark → ReadPost 완료 후 SearchHistory 순서로 4.1 후속 작업 진행
150155
5. 기존 Activity 테스트가 전부 통과하는지 확인
151156
```
152157

@@ -509,7 +514,7 @@ src/main/java/com/techfork/domain/notification/entity/NotificationToken.java
509514
| `User` | `UserCommandServiceTest` 중심 | User Account aggregate 관점의 직접 `UserTest` 필요 |
510515
| `UserInterestCategory/Keyword` | repository/service 중심 | User Account 도메인 규칙 테스트 보강 필요 |
511516
| `PersonalizationProfileDocument` | `PersonalizationProfileServiceTest` + evaluation setup | projection 자체 직접 테스트/세부 parsing 검증은 더 보강 가능 |
512-
| `ReadPost` | service/repository 중심 | record aggregate 단위 테스트는 선택 |
517+
| `ReadPost` | `ReadPostTest`, `ReadPostFirstReadPolicyTest`, `ReadPostCommandServiceTest`, `ReadPostQueryServiceTest`, `ReadPostRepositoryTest`, `ReadPostIntegrationTest` | 패키지 slice와 첫 읽기 정책까지 분리되었고, 이후 관심사는 동시성/ID reference 같은 별도 이슈다 |
513518
| `Bookmark` | `BookmarkTest`, `BookmarkRepositoryTest`, `BookmarkCommandServiceTest`, `BookmarkQueryServiceTest`, `ActivityControllerIntegrationTest` 중심 | 패키지 slice 분리 이후에도 ID reference 전환 같은 aggregate 경계 재설계는 별도 이슈로 다루는 편이 안전 |
514519
| `SearchHistory` | repository/service 중심 | record aggregate 단위 테스트는 선택 |
515520
| `RecommendedPost` | query/controller 중심 | 생성/순위/unique 정책 보강 필요 |
@@ -590,6 +595,7 @@ src/main/java/com/techfork/domain/notification/entity/NotificationToken.java
590595
```text
591596
작업 1: Activity/Bookmark 리팩터링 안전망
592597
- 기존 BookmarkCommandServiceTest / BookmarkQueryServiceTest 확인
598+
- ReadPostCommandServiceTest / ReadPostQueryServiceTest / ReadPostIntegrationTest 확인
593599
- 기존 ActivityControllerIntegrationTest 확인
594600
- Bookmark aggregate 테스트 보강 여부 결정
595601
- SearchHistory query/searchWord 호환 범위 기록
@@ -628,13 +634,23 @@ src/test/java/com/techfork/domain
628634
service
629635
BookmarkCommandServiceTest
630636
BookmarkQueryServiceTest
631-
entity 또는 model
632-
ReadPostTest
637+
integration
638+
BookmarkIntegrationTest
639+
readpost
640+
domain
641+
ReadPostFirstReadPolicyTest
642+
entity
643+
ReadPostTest
644+
service
645+
ReadPostCommandServiceTest
646+
ReadPostQueryServiceTest
647+
repository
648+
ReadPostRepositoryTest
649+
integration
650+
ReadPostIntegrationTest
633651
service
634652
ActivityCommandServiceTest
635-
ActivityQueryServiceTest
636653
repository
637-
ReadPostRepositoryTest
638654
SearchHistoryRepositoryTest
639655
controller
640656
ActivityControllerIntegrationTest

docs/ubiquitous-language/activity.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
- `src/main/java/com/techfork/domain/activity`
88
- `src/main/java/com/techfork/domain/activity/bookmark`
9+
- `src/main/java/com/techfork/domain/activity/readpost`
910

1011
## 표준 용어
1112

@@ -14,7 +15,7 @@
1415
| 읽은 게시글 | `ReadPost` | 사용자가 기술 게시글을 읽은 기록 |
1516
| 읽은 시간 | `readDurationSeconds` | 사용자가 기술 게시글을 읽은 지속 시간 |
1617
| 읽기 몰입도 | `convertReadingDurationToNaturalLanguage` | 읽은 시간을 `가볍게 훑어봄`, `빠르게 읽음`, `읽음`, `정독함`, `깊게 읽음`으로 해석한 값 |
17-
| 첫 읽기 | `isFirstRead` | 특정 기술 게시글을 처음 읽은 경우 |
18+
| 첫 읽기 | `ReadPostFirstReadPolicy.isFirstRead` | 특정 기술 게시글을 처음 읽은 경우 |
1819
| 검색 기록 | `SearchHistory` | 사용자가 입력한 검색어와 검색 시각 |
1920
| 검색어 | `query` (legacy alias: `searchWord`) | 검색 기록에 저장되는 사용자 입력 |
2021
| 북마크 | `Bookmark` (legacy alias: `ScrabPost`) | 사용자가 기술 게시글을 저장하는 행위 |
@@ -31,7 +32,7 @@
3132
| 내부 용어 | 코드상 표현 | 설명 |
3233
|---|---|---|
3334
| 읽기 기록 | `ReadPost` | 사용자와 기술 게시글의 읽기 이벤트 레코드 |
34-
| 최초 읽기 판별 | `isFirstRead` | 조회수 증가 여부를 결정하는 플래그 |
35+
| 최초 읽기 판별 | `ReadPostFirstReadPolicy.isFirstRead` | 조회수 증가 여부를 결정하는 정책 |
3536
| 북마크 레코드 | `Bookmark` (legacy name: `ScrabPost`) | 북마크 저장 레코드의 현재 표준 이름과 과거 이름을 함께 설명한다 |
3637
| 검색 기록 레코드 | `SearchHistory` | 사용자 검색어를 시간순으로 남기는 레코드 |
3738
| 북마크 여부 조합값 | `isBookmarked` | Search/Post/Recommendation 응답 조립 시 붙는 파생 값 |
@@ -53,7 +54,11 @@
5354

5455
## 주요 근거 파일
5556

56-
- `src/main/java/com/techfork/domain/activity/entity/ReadPost.java`
57+
- `src/main/java/com/techfork/domain/activity/readpost/entity/ReadPost.java`
58+
- `src/main/java/com/techfork/domain/activity/readpost/domain/ReadPostFirstReadPolicy.java`
59+
- `src/main/java/com/techfork/domain/activity/readpost/service/ReadPostCommandService.java`
60+
- `src/main/java/com/techfork/domain/activity/readpost/service/ReadPostQueryService.java`
61+
- `src/main/java/com/techfork/domain/activity/readpost/converter/ReadPostConverter.java`
5762
- `src/main/java/com/techfork/domain/activity/entity/SearchHistory.java`
5863
- `src/main/java/com/techfork/domain/activity/bookmark/entity/Bookmark.java`
5964
- `src/main/java/com/techfork/domain/activity/bookmark/repository/BookmarkRepository.java`
@@ -62,4 +67,3 @@
6267
- `src/main/java/com/techfork/domain/activity/bookmark/converter/BookmarkConverter.java`
6368
- `src/main/java/com/techfork/domain/activity/dto/SearchHistoryRequest.java`
6469
- `src/main/java/com/techfork/domain/activity/service/ActivityCommandService.java`
65-
- `src/main/java/com/techfork/domain/activity/service/ActivityQueryService.java`

0 commit comments

Comments
 (0)