Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
028c8c4
[refactor] 모집중인 방 검색 api response 수정 (#65)
seongjunnoh Aug 16, 2025
a5cbf03
[refactor] 모집중인 방 검색 api controller 수정 (#65)
seongjunnoh Aug 16, 2025
a230c2c
[refactor] 모집중인 방 검색 api use case 수정 및 query dto 추가 (#65)
seongjunnoh Aug 16, 2025
1dcc9e7
[move] 방 검색 시 param 검증용 enum 파일 위치 이동 (#65)
seongjunnoh Aug 16, 2025
37e0028
[refactor] 방 검색을 위한 RoomQueryPort 메서드 수정 (#65)
seongjunnoh Aug 16, 2025
b71d9b6
[refactor] 방 검색을 위한 QueryDSL 코드 수정 (#65)
seongjunnoh Aug 16, 2025
be5a5b7
[refactor] RoomQueryDto 수정 (#65)
seongjunnoh Aug 16, 2025
d437c42
[refactor] RoomQueryPersistenceAdapter 수정 (#65)
seongjunnoh Aug 16, 2025
b76eca0
[refactor] RoomJpaEntity 와 연관되는 BookJpaEntity 를 nullable = false로 지정 …
seongjunnoh Aug 16, 2025
48c8518
[refactor] 방 검색 api service 코드 수정 (#65)
seongjunnoh Aug 16, 2025
6ce03aa
[refactor] 방 검색 api dto -> response mapper 수정 (#65)
seongjunnoh Aug 16, 2025
e5d8272
[refactor] 방 검색 api 스웨거 docs 수정 (#65)
seongjunnoh Aug 16, 2025
4276ff8
[refactor] 방 검색 api 통합 테스트 코드 수정 및 테스트 케이스 추가 (#65)
seongjunnoh Aug 16, 2025
ad4419d
[refactor] 내가 참여한 방 목록 조회 api response 네이밍 수정 (#65)
seongjunnoh Aug 16, 2025
f3cb1bd
Merge remote-tracking branch 'origin' into hotfix/#65-room-search
seongjunnoh Aug 16, 2025
d9d9073
[docs] 검색 QueryDSL 코드 TODO 주석 처리 (#65)
seongjunnoh Aug 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ public enum SwaggerResponseDescription {
))),

ROOM_SEARCH(new LinkedHashSet<>(Set.of(
INVALID_ROOM_SEARCH_SORT
INVALID_ROOM_SEARCH_SORT,
CATEGORY_NOT_MATCH
))),
ROOM_PASSWORD_CHECK(new LinkedHashSet<>(Set.of(
ROOM_NOT_FOUND,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import konkuk.thip.room.adapter.in.web.response.*;
import konkuk.thip.room.application.port.in.*;
import konkuk.thip.room.application.port.in.dto.RoomGetHomeJoinedListQuery;
import konkuk.thip.room.application.port.in.dto.RoomSearchQuery;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

Expand All @@ -32,20 +33,23 @@ public class RoomQueryController {
private final RoomGetDeadlinePopularUseCase roomGetDeadlinePopularUsecase;

@Operation(
summary = "방 검색",
description = "키워드, 카테고리, 정렬 방식, 페이지 번호를 기준으로 방을 검색합니다. 아직 수정중입니다. 일단 request param 만 수정한 상태입니다."
summary = "모집중인 방 검색",
description = "검색어(= 방이름 or 첵제목), 카테고리 와 매핑되는 모집중인 방을 검색합니다. 공개/비공개 방 모두 검색 가능합니다."
)
Comment on lines +36 to 38
Copy link

@coderabbitai coderabbitai bot Aug 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

오탈자 수정: ‘첵제목’ → ‘책제목’

사용자 문서에 노출되는 스웨거 설명의 오탈자를 바로잡아 주세요.

적용 diff:

-            description = "검색어(= 방이름 or 첵제목), 카테고리 와 매핑되는 모집중인 방을 검색합니다. 공개/비공개 방 모두 검색 가능합니다."
+            description = "검색어(= 방이름 or 책제목), 카테고리와 매핑되는 모집중인 방을 검색합니다. 공개/비공개 방 모두 검색 가능합니다."
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
summary = "모집중인 방 검색",
description = "검색어(= 방이름 or 첵제목), 카테고리 와 매핑되는 모집중인 방을 검색합니다. 공개/비공개 방 모두 검색 가능합니다."
)
summary = "모집중인 방 검색",
description = "검색어(= 방이름 or 책제목), 카테고리와 매핑되는 모집중인 방을 검색합니다. 공개/비공개 방 모두 검색 가능합니다."
)
🤖 Prompt for AI Agents
In src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java around
lines 36 to 38, fix the typo in the Swagger description by replacing "첵제목" with
"책제목" so the description reads that the search uses the room name or 책제목; update
the string literal accordingly and keep formatting/escaping consistent with
surrounding annotations.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예리하시다

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@buzz0331, 감사합니다! 사용자에게 노출되는 문서의 품질이 중요하다고 생각합니다. 😊

@ExceptionDescription(ROOM_SEARCH)
@GetMapping("/rooms/search")
public BaseResponse<RoomSearchResponse> searchRooms(
@Parameter(description = "검색 키워드 (책 이름 or 방 이름", example = "해리") @RequestParam(value = "keyword", required = false, defaultValue = "") final String keyword,
public BaseResponse<RoomSearchResponse> searchRecruitingRooms(
@Parameter(description = "검색 키워드 (책 이름 or 방 이름)", example = "해리") @RequestParam(value = "keyword", required = false, defaultValue = "") final String keyword,
@Parameter(description = "모임방 카테고리", example = "문학") @RequestParam(value = "category", required = false, defaultValue = "") final String category,
@Parameter(description = "정렬 방식 (마감 임박 : deadline, 신청 인원 : memberCount)", example = "deadline") @RequestParam("sort") final String sort,
@Parameter(description = "사용자가 검색어 입력을 '확정'했는지 여부 (입력 중: false, 입력 확정: true)", example = "false") @RequestParam(name = "isFinalized") final boolean isFinalized,
@Parameter(description = "페이지 번호", example = "1") @RequestParam("page") final int page,
@Parameter(description = "커서 (첫번째 요청시 : null, 다음 요청시 : 이전 요청에서 반환받은 nextCursor 값)")
@RequestParam(value = "cursor", required = false) final String cursor,
@Parameter(hidden = true) @UserId final Long userId
) {
return BaseResponse.ok(roomSearchUseCase.searchRoom(keyword, category, sort, page, isFinalized, userId));
return BaseResponse.ok(roomSearchUseCase.searchRecruitingRooms(
RoomSearchQuery.of(keyword, category, sort, isFinalized, cursor, userId)
));
}

@Operation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

@Builder
public record RoomGetHomeJoinedListResponse(
List<RoomSearchResult> roomList,
List<JoinedRoomInfo> roomList,
String nickname,
int page, // 현재 페이지
int size, // 현재 페이지에 포함된 데이터 수
Expand All @@ -16,7 +16,7 @@ public record RoomGetHomeJoinedListResponse(


@Builder
public record RoomSearchResult(
public record JoinedRoomInfo(
Long roomId,
String bookImageUrl,
String roomTitle,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,18 @@
import java.util.List;

public record RoomSearchResponse(
List<RoomSearchResult> roomList,
int page, // 현재 페이지
int size, // 현재 페이지에 포함된 데이터 수
boolean last,
boolean first
List<RoomSearchDto> roomList,
String nextCursor,
boolean isLast
) {

public record RoomSearchResult(
public record RoomSearchDto(
Long roomId,
String bookImageUrl,
String roomName,
int memberCount,
int recruitCount,
String deadlineDate,
String category
boolean isPublic
) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class RoomJpaEntity extends BaseJpaEntity {
private int memberCount = 1;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "book_id")
@JoinColumn(name = "book_id", nullable = false)
private BookJpaEntity bookJpaEntity;

@ManyToOne(fetch = FetchType.LAZY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import konkuk.thip.common.util.CursorBasedList;
import konkuk.thip.room.adapter.in.web.response.RoomGetHomeJoinedListResponse;
import konkuk.thip.room.adapter.in.web.response.RoomRecruitingDetailViewResponse;
import konkuk.thip.room.adapter.in.web.response.RoomSearchResponse;
import konkuk.thip.room.adapter.out.persistence.function.RoomQueryFunction;
import konkuk.thip.room.adapter.out.persistence.function.IntegerCursorRoomQueryFunction;
import konkuk.thip.room.adapter.out.persistence.function.LocalDateCursorRoomQueryFunction;
import konkuk.thip.room.adapter.out.persistence.repository.RoomJpaRepository;
import konkuk.thip.room.adapter.out.persistence.repository.category.CategoryJpaRepository;
import konkuk.thip.room.application.port.out.RoomQueryPort;
Expand Down Expand Up @@ -35,8 +35,36 @@ public int countRecruitingRoomsByBookAndStartDateAfter(String isbn, LocalDate cu
}

@Override
public Page<RoomSearchResponse.RoomSearchResult> searchRoom(String keyword, String category, Pageable pageable) {
return roomJpaRepository.searchRoom(keyword, category, pageable);
public CursorBasedList<RoomQueryDto> searchRecruitingRoomsByDeadline(String keyword, Cursor cursor) {
return findRoomsByDeadlineCursor(cursor, ((lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findRecruitingRoomsOrderByStartDateAsc(keyword, lastLocalDate, lastId, pageSize)));
}

@Override
public CursorBasedList<RoomQueryDto> searchRecruitingRoomsWithCategoryByDeadline(String keyword, Category category, Cursor cursor) {
return findRoomsByDeadlineCursor(cursor, (lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findRecruitingRoomsWithCategoryOrderByStartDateAsc(
keyword, category.getValue(), lastLocalDate, lastId, pageSize
)
);
}

@Override
public CursorBasedList<RoomQueryDto> searchRecruitingRoomsByMemberCount(String keyword, Cursor cursor) {
return findRoomsByMemberCountCursor(cursor, (lastMemberCount, lastId, pageSize) ->
roomJpaRepository.findRecruitingRoomsOrderByMemberCountDesc(
keyword, lastMemberCount, lastId, pageSize
)
);
}

@Override
public CursorBasedList<RoomQueryDto> searchRecruitingRoomsWithCategoryByMemberCount(String keyword, Category category, Cursor cursor) {
return findRoomsByMemberCountCursor(cursor, (lastMemberCount, lastId, pageSize) ->
roomJpaRepository.findRecruitingRoomsWithCategoryOrderByMemberCountDesc(
keyword, category.getValue(), lastMemberCount, lastId, pageSize
)
);
}

@Override
Expand All @@ -46,51 +74,67 @@ public List<RoomRecruitingDetailViewResponse.RecommendRoom> findOtherRecruitingR
}

@Override
public Page<RoomGetHomeJoinedListResponse.RoomSearchResult> searchHomeJoinedRooms(Long userId, LocalDate date, Pageable pageable) {
public Page<RoomGetHomeJoinedListResponse.JoinedRoomInfo> searchHomeJoinedRooms(Long userId, LocalDate date, Pageable pageable) {
return roomJpaRepository.searchHomeJoinedRooms(userId, date, pageable);
}

@Override
public CursorBasedList<RoomQueryDto> findRecruitingRoomsUserParticipated(Long userId, Cursor cursor) {
return findRooms(cursor, (lastLocalDate, lastId, pageSize) ->
return findRoomsByDeadlineCursor(cursor, (lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findRecruitingRoomsUserParticipated(userId, lastLocalDate, lastId, pageSize));
}

@Override
public CursorBasedList<RoomQueryDto> findPlayingRoomsUserParticipated(Long userId, Cursor cursor) {
return findRooms(cursor, (lastLocalDate, lastId, pageSize) ->
return findRoomsByDeadlineCursor(cursor, (lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findPlayingRoomsUserParticipated(userId, lastLocalDate, lastId, pageSize));
}

@Override
public CursorBasedList<RoomQueryDto> findPlayingAndRecruitingRoomsUserParticipated(Long userId, Cursor cursor) {
return findRooms(cursor, (lastLocalDate, lastId, pageSize) ->
return findRoomsByDeadlineCursor(cursor, (lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findPlayingAndRecruitingRoomsUserParticipated(userId, lastLocalDate, lastId, pageSize));
}

@Override
public CursorBasedList<RoomQueryDto> findExpiredRoomsUserParticipated(Long userId, Cursor cursor) {
return findRooms(cursor, (lastLocalDate, lastId, pageSize) ->
return findRoomsByDeadlineCursor(cursor, (lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findExpiredRoomsUserParticipated(userId, lastLocalDate, lastId, pageSize));
}

@Override
public CursorBasedList<RoomQueryDto> findRoomsByIsbnOrderByDeadline(String isbn, Cursor cursor) {
return findRooms(cursor, (lastLocalDate, lastId, pageSize) ->
return findRoomsByDeadlineCursor(cursor, (lastLocalDate, lastId, pageSize) ->
roomJpaRepository.findRoomsByIsbnOrderByStartDateAsc(isbn, lastLocalDate, lastId, pageSize));
}

private CursorBasedList<RoomQueryDto> findRooms(Cursor cursor, RoomQueryFunction queryFunction) {
private CursorBasedList<RoomQueryDto> findRoomsByDeadlineCursor(Cursor cursor, LocalDateCursorRoomQueryFunction queryFunction) {
LocalDate lastLocalDate = cursor.isFirstRequest() ? null : cursor.getLocalDate(0);
Long lastId = cursor.isFirstRequest() ? null : cursor.getLong(1);
int pageSize = cursor.getPageSize();

List<RoomQueryDto> dtos = queryFunction.apply(lastLocalDate, lastId, pageSize);

return CursorBasedList.of(dtos, pageSize, roomShowMineQueryDto -> {
return CursorBasedList.of(dtos, pageSize, dto -> {
Cursor nextCursor = new Cursor(List.of(
dto.endDate().toString(),
dto.roomId().toString()
));
return nextCursor.toEncodedString();
});
}
Comment on lines +111 to +125
Copy link

@coderabbitai coderabbitai bot Aug 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

커서 구성 시 startDate/“endDate” 필드 혼용 가능성 — 불일치로 인한 버그 위험

키셋 정렬은 startDate ASC + roomId ASC 기준인데, nextCursor는 dto.endDate()를 사용하고 있습니다. 현재 RoomQueryRepositoryImpl에서는 projection으로 room.startDate를 선택합니다. DTO 접근자가 endDate라는 이름으로 startDate를 담고 있다면 동작은 하지만, 네이밍 불일치가 유지보수 시 심각한 혼동/버그를 유발할 수 있습니다.

정렬 기준과 동일하게 startDate 접근자를 사용하도록 정리하는 것을 권장합니다.

다음과 같이 수정하는 것을 제안합니다(실제 접근자 명은 DTO 정의에 맞춰 조정 필요):

-                    dto.endDate().toString(),
+                    dto.startDate().toString(),

또한 RoomQueryDto/QRoomQueryDto의 필드/생성자 명세에서 startDate/endDate 명칭을 정합성 있게 통일해주세요.

🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java
around lines 111 to 125, the cursor is being built using dto.endDate() while the
keyset sort and repository projection use startDate, causing a naming/behavior
mismatch; change the cursor to use the DTO's startDate accessor (e.g.,
dto.startDate().toString()) so the cursor keys match the sort order, and update
RoomQueryDto/QRoomQueryDto field/accessor/constructor names to consistently use
startDate (or rename repository projection to endDate everywhere) to keep names
and semantics aligned across query, DTO and cursor generation.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이건 나도 동감해 그래서 dto 변수 네이밍을 수정할 예정이야

  • 방 활동 시작일
  • 방 모집 마감일
  • 방 활동 마감일

이렇게 수정할 예정이야

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seongjunnoh 네, 정말 좋은 개선 계획이네요!

더 의미가 명확한 네이밍으로 변경하시면 코드 가독성과 유지보수성이 크게 향상될 것 같습니다:

  • 방 활동 시작일 - 실제 독서 활동이 시작되는 날짜
  • 방 모집 마감일 - 참가자 모집이 끝나는 날짜
  • 방 활동 마감일 - 독서 활동이 완전히 종료되는 날짜

이렇게 하면 커서 생성 시에도 dto.방활동시작일() 같은 형태로 정렬 기준과 일치하는 필드를 명확하게 참조할 수 있어서 혼동의 여지가 없어지겠네요.

🐰
┌─────┐
│ 👍 │ Good plan!
└─────┘


🧠 Learnings used
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.

Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#113
File: src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java:38-44
Timestamp: 2025-07-30T14:05:04.945Z
Learning: seongjunnoh는 코드 최적화 제안에 대해 구체적인 기술적 근거와 효율성 차이를 이해하고 싶어하며, 성능 개선 방식에 대한 상세한 설명을 선호한다.

Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#93
File: src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java:49-114
Timestamp: 2025-07-28T16:44:31.224Z
Learning: seongjunnoh는 코드 중복 문제에 대한 리팩토링 제안을 적극적으로 수용하고 함수형 인터페이스를 활용한 해결책을 선호한다.

Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#195
File: src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.java:0-0
Timestamp: 2025-08-13T05:22:32.287Z
Learning: seongjunnoh는 데이터 무결성과 중복 방지에 대한 고민이 깊으며, LinkedHashSet을 활용한 중복 제거와 순서 보장을 동시에 달성하는 솔루션을 선호한다.

Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#180
File: src/main/java/konkuk/thip/room/application/service/AttendanceCheckCreateService.java:22-40
Timestamp: 2025-08-14T09:15:31.332Z
Learning: seongjunnoh는 기술적 완벽성보다 실제 비즈니스 시나리오와 사용자 행동 패턴을 우선 고려하며, 발생 가능성이 낮은 엣지 케이스보다는 실용적인 구현을 선호한다.

Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#112
File: src/main/java/konkuk/thip/feed/adapter/out/persistence/repository/FeedQueryRepositoryImpl.java:272-272
Timestamp: 2025-07-30T10:44:34.115Z
Learning: seongjunnoh는 피드 커서 페이지네이션에서 LocalDateTime 단일 커서 방식을 선호하며, 복합 키 기반 커서보다 구현 단순성과 성능을 우선시한다.


private CursorBasedList<RoomQueryDto> findRoomsByMemberCountCursor(Cursor cursor, IntegerCursorRoomQueryFunction queryFunction) {
Integer lastInteger = cursor.isFirstRequest() ? null : cursor.getInteger(0);
Long lastId = cursor.isFirstRequest() ? null : cursor.getLong(1);
int pageSize = cursor.getPageSize();

List<RoomQueryDto> dtos = queryFunction.apply(lastInteger, lastId, pageSize);

return CursorBasedList.of(dtos, pageSize, dto -> {
Cursor nextCursor = new Cursor(List.of(
roomShowMineQueryDto.endDate().toString(),
roomShowMineQueryDto.roomId().toString()
String.valueOf(dto.memberCount()), // 인원수 커서
dto.roomId().toString()
));
return nextCursor.toEncodedString();
Comment on lines +111 to 139
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오호 함수형 인터페이스로 추출하셨네요 굿입니다!

});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package konkuk.thip.room.adapter.out.persistence.function;

import konkuk.thip.room.application.port.out.dto.RoomQueryDto;

import java.util.List;

@FunctionalInterface
public interface IntegerCursorRoomQueryFunction {
List<RoomQueryDto> apply(Integer lastInteger, Long lastId, int pageSize);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
import java.util.List;

@FunctionalInterface
public interface RoomQueryFunction {
public interface LocalDateCursorRoomQueryFunction {
List<RoomQueryDto> apply(LocalDate lastLocalDate, Long lastId, int pageSize);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import konkuk.thip.room.adapter.in.web.response.RoomRecruitingDetailViewResponse;
import konkuk.thip.room.adapter.in.web.response.RoomGetHomeJoinedListResponse;
import konkuk.thip.room.adapter.in.web.response.RoomSearchResponse;
import konkuk.thip.room.application.port.out.dto.RoomQueryDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand All @@ -13,11 +12,17 @@

public interface RoomQueryRepository {

Page<RoomSearchResponse.RoomSearchResult> searchRoom(String keyword, String category, Pageable pageable);
/**
* 방 검색
*/
List<RoomQueryDto> findRecruitingRoomsOrderByStartDateAsc(String keyword, LocalDate lastStartDate, Long roomId, int pageSize);
List<RoomQueryDto> findRecruitingRoomsWithCategoryOrderByStartDateAsc(String keyword, String categoryVal, LocalDate lastStartDate, Long roomId, int pageSize);
List<RoomQueryDto> findRecruitingRoomsOrderByMemberCountDesc(String keyword, Integer lastMemberCount, Long roomId, int pageSize);
List<RoomQueryDto> findRecruitingRoomsWithCategoryOrderByMemberCountDesc(String keyword, String categoryVal, Integer lastMemberCount, Long roomId, int pageSize);
Comment on lines +18 to +21
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네이밍 굿! 가독성 좋네요


List<RoomRecruitingDetailViewResponse.RecommendRoom> findOtherRecruitingRoomsByCategoryOrderByStartDateAsc(Long roomId, String category, int count);

Page<RoomGetHomeJoinedListResponse.RoomSearchResult> searchHomeJoinedRooms(Long userId, LocalDate today, Pageable pageable);
Page<RoomGetHomeJoinedListResponse.JoinedRoomInfo> searchHomeJoinedRooms(Long userId, LocalDate today, Pageable pageable);

List<RoomQueryDto> findRecruitingRoomsUserParticipated(Long userId, LocalDate dateCursor, Long roomIdCursor, int pageSize);

Expand Down
Loading