From 01be348aefc92acfd94148fd8a95ce5cf566defb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:32:41 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[feat]=20=EB=B0=A9=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=EC=9A=A9=20=EB=A7=88=EA=B0=90=EC=9D=BC=20?= =?UTF-8?q?=EB=B3=B4=EC=97=AC=EC=A3=BC=EB=8A=94=20RecruitingRoomFormatAfte?= =?UTF-8?q?rTime=20=EC=B6=94=EA=B0=80=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../konkuk/thip/common/util/DateUtil.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/konkuk/thip/common/util/DateUtil.java b/src/main/java/konkuk/thip/common/util/DateUtil.java index e2c7a33a8..7e4f6f373 100644 --- a/src/main/java/konkuk/thip/common/util/DateUtil.java +++ b/src/main/java/konkuk/thip/common/util/DateUtil.java @@ -46,6 +46,29 @@ public static String formatAfterTime(LocalDate date) { return minutes + "분 뒤"; } + public static String RecruitingRoomFormatAfterTime(LocalDate date) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime dateTime = date.atStartOfDay(); + Duration d = Duration.between(now, dateTime); + + if (d.isNegative() || d.isZero()) { + return "??"; + } + + long days = d.toDays(); + if (days > 0) { + return days + "일 남음"; + } + + long hours = d.toHours(); + if (hours >= 1) { + return hours + "시간 남음"; + } + + return "마감 임박"; + } + + public static String formatDate(LocalDate date) { return date.format(DATE_FORMATTER); } From ddbf10c3ff9865ea9c52ac97121ca9561f733421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:33:18 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[feat]=20=EC=B5=9C=EA=B7=BC=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=96=B4=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20id=20hidden?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/RecentSearchCommandController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java b/src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java index d92097cfe..506e5061c 100644 --- a/src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java +++ b/src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java @@ -1,6 +1,7 @@ package konkuk.thip.recentSearch.adapter.in.web; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import konkuk.thip.common.dto.BaseResponse; import konkuk.thip.common.security.annotation.UserId; @@ -25,7 +26,7 @@ public class RecentSearchCommandController { @DeleteMapping("/recent-searches/{recentSearchId}") public BaseResponse deleteRecentSearch( @PathVariable(value = "recentSearchId") final Long recentSearchId, - @UserId final Long userId + @Parameter(hidden = true) @UserId final Long userId ) { return BaseResponse.ok(recentSearchDeleteUseCase.deleteRecentSearch(recentSearchId, userId)); } From b70e84f256a4427860dca97bb20747a92fbdab2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:33:43 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[refactor]=20=EC=97=90=EB=9F=AC=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20static=20import=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/konkuk/thip/room/domain/Room.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/room/domain/Room.java b/src/main/java/konkuk/thip/room/domain/Room.java index 6aa01564c..578066bed 100644 --- a/src/main/java/konkuk/thip/room/domain/Room.java +++ b/src/main/java/konkuk/thip/room/domain/Room.java @@ -135,7 +135,7 @@ public void validateRoomRecruitExpired() { if (isRecruitmentPeriodExpired()) { String message = String.format("모집기간(%s까지)이 만료된 방에는 참여할 수 없습니다.", deadline); throw new InvalidStateException( - ErrorCode.ROOM_RECRUITMENT_PERIOD_EXPIRED, new IllegalArgumentException(message) + ROOM_RECRUITMENT_PERIOD_EXPIRED, new IllegalArgumentException(message) ); } } From 80f482c68695d1a03e1a6ba5ad9fc9f0c0734dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:34:19 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20=EC=B6=94=EC=B2=9C=EB=B0=A9=20=EC=B1=85=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/repository/RoomQueryRepositoryImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java b/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java index ecaa25fa9..0e882891e 100644 --- a/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java +++ b/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java @@ -178,8 +178,9 @@ public List findRecruitingRoomsWithCategoryOrderByMemberCountDesc( public List findOtherRecruitingRoomsByCategoryOrderByStartDateAsc(Long roomId, String category, int count) { NumberExpression memberCountExpr = participant.roomParticipantId.count(); List tuples = queryFactory - .select(room.roomId, room.title, memberCountExpr, room.recruitCount, room.startDate) + .select(room.roomId, room.title, memberCountExpr, room.recruitCount, room.startDate, book.imageUrl) .from(room) + .join(room.bookJpaEntity, book) .leftJoin(participant).on(participant.roomJpaEntity.eq(room)) .where( room.categoryJpaEntity.value.eq(category) @@ -195,7 +196,7 @@ public List findOtherRecruitingR return tuples.stream() .map(t -> RoomRecruitingDetailViewResponse.RecommendRoom.builder() .roomId(t.get(room.roomId)) - .roomImageUrl(null) // roomImageUrl은 추후 구현 + .bookImageUrl(t.get(book.imageUrl)) .roomName(t.get(room.title)) .memberCount(t.get(memberCountExpr).intValue()) .recruitCount(t.get(room.recruitCount)) From a5b41d4587d19d40199a0a054e9af03218589823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:34:27 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20=EC=B6=94=EC=B2=9C=EB=B0=A9=20=EC=B1=85=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=88=98=EC=A0=95=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/response/RoomRecruitingDetailViewResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java b/src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java index 705d197f0..07b692c5e 100644 --- a/src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java +++ b/src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java @@ -31,7 +31,7 @@ public record RoomRecruitingDetailViewResponse( @Builder public record RecommendRoom( Long roomId, - String roomImageUrl, + String bookImageUrl, String roomName, int memberCount, int recruitCount, From a8a66197c90aeed666e1cfe3f67efb03bafcf93c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:34:41 +0900 Subject: [PATCH 6/7] =?UTF-8?q?[refactor]=20=EB=AA=A8=EC=A7=91=EB=A7=88?= =?UTF-8?q?=EA=B0=90=ED=95=9C=20=EB=B0=A9=20=EB=B0=A9=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20=EC=A1=B0=ED=9A=8C=20=EC=95=88=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EA=B2=80=EC=A6=9D=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RoomShowRecruitingDetailViewService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java b/src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java index d7899a352..5600c619b 100644 --- a/src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java +++ b/src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java @@ -33,6 +33,8 @@ public class RoomShowRecruitingDetailViewService implements RoomShowRecruitingDe public RoomRecruitingDetailViewResponse getRecruitingRoomDetailView(Long userId, Long roomId) { // 1. Room 조회, Book 조회 Room room = roomCommandPort.getByIdOrThrow(roomId); + room.validateRoomRecruitExpired(); // 모집기간 지난 방 예외처리 + Book book = bookCommandPort.findById(room.getBookId()); // 2. Room과 연관된 UserRoom 조회, RoomParticipants 일급 컬렉션 생성 @@ -62,7 +64,7 @@ private RoomRecruitingDetailViewResponse buildResponse( .isPublic(room.isPublic()) .progressStartDate(DateUtil.formatDate(room.getStartDate())) .progressEndDate(DateUtil.formatDate(room.getEndDate())) - .recruitEndDate(DateUtil.formatAfterTime(room.getStartDate())) + .recruitEndDate(DateUtil.RecruitingRoomFormatAfterTime(room.getStartDate())) .category(room.getCategory().getValue()) .categoryColor(roomQueryPort.findAliasColorOfCategory(room.getCategory())) // TODO : 리펙토링 대상 .roomDescription(room.getDescription()) From 0fb64e8b9f37ea40e2fb8f71779663497128e4c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=ED=9D=AC=EC=A7=84?= Date: Tue, 19 Aug 2025 15:34:54 +0900 Subject: [PATCH 7/7] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20=EC=A1=B0=ED=9A=8C=20=EC=8A=A4=EC=9B=A8?= =?UTF-8?q?=EA=B1=B0=20=EC=97=90=EB=9F=AC=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/common/swagger/SwaggerResponseDescription.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java b/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java index e7d1b2ffb..cc4ad261b 100644 --- a/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java +++ b/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java @@ -84,7 +84,9 @@ public enum SwaggerResponseDescription { ROOM_PASSWORD_NOT_REQUIRED ))), ROOM_RECRUITING_DETAIL_VIEW(new LinkedHashSet<>(Set.of( - ROOM_NOT_FOUND + ROOM_NOT_FOUND, + BOOK_NOT_FOUND, + ROOM_RECRUITMENT_PERIOD_EXPIRED ))), ROOM_GET_HOME_JOINED_LIST(new LinkedHashSet<>(Set.of( USER_NOT_FOUND