diff --git a/src/main/java/konkuk/thip/book/application/service/BookRecruitingRoomsService.java b/src/main/java/konkuk/thip/book/application/service/BookRecruitingRoomsService.java index fc0fc5d00..21c439a64 100644 --- a/src/main/java/konkuk/thip/book/application/service/BookRecruitingRoomsService.java +++ b/src/main/java/konkuk/thip/book/application/service/BookRecruitingRoomsService.java @@ -11,8 +11,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; - @Service @RequiredArgsConstructor public class BookRecruitingRoomsService implements BookRecruitingRoomsUseCase { @@ -26,7 +24,7 @@ public class BookRecruitingRoomsService implements BookRecruitingRoomsUseCase { @Transactional(readOnly = true) public BookRecruitingRoomsResponse getRecruitingRoomsWithBook(String isbn, String cursorStr) { Integer totalRoomCount = (cursorStr == null || cursorStr.isBlank()) ? // 첫 요청 여부 판단 - roomQueryPort.countRecruitingRoomsByBookAndStartDateAfter(isbn, LocalDate.now()) : null; + roomQueryPort.countRecruitingRoomsByBookIsbn(isbn) : null; Cursor cursor = Cursor.from(cursorStr, DEFAULT_PAGE_SIZE); CursorBasedList roomDtos = roomQueryPort.findRoomsByIsbnOrderByDeadline(isbn, cursor); diff --git a/src/main/java/konkuk/thip/book/application/service/BookSearchService.java b/src/main/java/konkuk/thip/book/application/service/BookSearchService.java index 3493e5d73..617a27d4d 100644 --- a/src/main/java/konkuk/thip/book/application/service/BookSearchService.java +++ b/src/main/java/konkuk/thip/book/application/service/BookSearchService.java @@ -113,9 +113,8 @@ public BookDetailSearchResult searchDetailBooks(String isbn,Long userId) { } private int getRecruitingRoomCount(Book book) { - //오늘 날짜 기준으로 방 활동 시작 기간이 이후인 방 찾기(모집중인 방) - LocalDate today = LocalDate.now(); - return roomQueryPort.countRecruitingRoomsByBookAndStartDateAfter(book.getIsbn(), today); + // 모집 중인 방 개수 + return roomQueryPort.countRecruitingRoomsByBookIsbn(book.getIsbn()); } private int getReadCount(Book book) { diff --git a/src/main/java/konkuk/thip/comment/application/service/policy/RoomPostCommentAccessPolicy.java b/src/main/java/konkuk/thip/comment/application/service/policy/RoomPostCommentAccessPolicy.java index fe9bdc0c1..434448fa2 100644 --- a/src/main/java/konkuk/thip/comment/application/service/policy/RoomPostCommentAccessPolicy.java +++ b/src/main/java/konkuk/thip/comment/application/service/policy/RoomPostCommentAccessPolicy.java @@ -2,6 +2,7 @@ import konkuk.thip.post.domain.CountUpdatable; import konkuk.thip.room.application.service.validator.RoomParticipantValidator; +import konkuk.thip.room.application.service.validator.RoomValidator; import konkuk.thip.roompost.domain.RoomPost; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -11,11 +12,13 @@ public class RoomPostCommentAccessPolicy implements CommentAccessPolicy { private final RoomParticipantValidator roomParticipantValidator; + private final RoomValidator roomValidator; @Override public void validateCommentAccess(CountUpdatable post, Long userId) { RoomPost roomPost = (RoomPost) post; roomParticipantValidator.validateUserIsRoomMember(roomPost.getRoomId(), userId); + roomValidator.validateRoomInProgress(roomPost.getRoomId()); } } \ No newline at end of file diff --git a/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java b/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java index f944caa6b..50f51b6d7 100644 --- a/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java +++ b/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java @@ -101,6 +101,7 @@ public enum ErrorCode implements ResponseCode { ROOM_MEMBER_COUNT_UNDERFLOW(HttpStatus.BAD_REQUEST, 100007, "방의 인원 수가 1 이하(방장 포함)입니다."), ROOM_IS_EXPIRED(HttpStatus.BAD_REQUEST, 100008, "방이 만료되었습니다."), ROOM_POST_TYPE_NOT_MATCH(HttpStatus.BAD_REQUEST, 100009, "일치하는 방 게시물 타입 이름이 없습니다. [RECORD, VOTE] 중 하나여야 합니다."), + ROOM_NOT_IN_PROGRESS(HttpStatus.BAD_REQUEST, 100010, "진행 중인 방이 아닙니다."), /** * 110000 : vote error diff --git a/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java b/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java index e758be8b6..5d21b174e 100644 --- a/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java +++ b/src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java @@ -136,7 +136,8 @@ public enum SwaggerResponseDescription { BOOK_NOT_FOUND, ROOM_IS_EXPIRED, RECORD_CANNOT_BE_OVERVIEW, - INVALID_RECORD_PAGE_RANGE + INVALID_RECORD_PAGE_RANGE, + ROOM_NOT_IN_PROGRESS ))), RECORD_SEARCH(new LinkedHashSet<>(Set.of( USER_NOT_FOUND, @@ -147,7 +148,9 @@ public enum SwaggerResponseDescription { RECORD_DELETE(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, RECORD_NOT_FOUND, - RECORD_ACCESS_FORBIDDEN + RECORD_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), RECORD_PIN(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, @@ -158,7 +161,9 @@ public enum SwaggerResponseDescription { RECORD_UPDATE(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, RECORD_NOT_FOUND, - RECORD_ACCESS_FORBIDDEN + RECORD_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), // Vote @@ -168,24 +173,31 @@ public enum SwaggerResponseDescription { BOOK_NOT_FOUND, ROOM_IS_EXPIRED, VOTE_CANNOT_BE_OVERVIEW, - INVALID_VOTE_PAGE_RANGE + INVALID_VOTE_PAGE_RANGE, + ROOM_NOT_IN_PROGRESS ))), VOTE(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, VOTE_ITEM_NOT_FOUND, VOTE_ITEM_ALREADY_VOTED, VOTE_ITEM_NOT_VOTED_CANNOT_CANCEL, - VOTE_ITEM_COUNT_CANNOT_BE_NEGATIVE + VOTE_ITEM_COUNT_CANNOT_BE_NEGATIVE, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), VOTE_DELETE(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, VOTE_NOT_FOUND, - VOTE_ACCESS_FORBIDDEN + VOTE_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), VOTE_UPDATE(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, VOTE_NOT_FOUND, - VOTE_ACCESS_FORBIDDEN + VOTE_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), @@ -251,8 +263,9 @@ public enum SwaggerResponseDescription { VOTE_NOT_FOUND, INVALID_COMMENT_CREATE, FEED_ACCESS_FORBIDDEN, - ROOM_ACCESS_FORBIDDEN - + ROOM_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), CHANGE_COMMENT_LIKE_STATE(new LinkedHashSet<>(Set.of( USER_NOT_FOUND, @@ -264,7 +277,9 @@ public enum SwaggerResponseDescription { COMMENT_NOT_LIKED_CANNOT_CANCEL, COMMENT_LIKE_COUNT_UNDERFLOW, FEED_ACCESS_FORBIDDEN, - ROOM_ACCESS_FORBIDDEN + ROOM_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), COMMENT_DELETE(new LinkedHashSet<>(Set.of( USER_NOT_FOUND, @@ -275,7 +290,9 @@ public enum SwaggerResponseDescription { COMMENT_DELETE_FORBIDDEN, COMMENT_COUNT_UNDERFLOW, FEED_ACCESS_FORBIDDEN, - ROOM_ACCESS_FORBIDDEN + ROOM_ACCESS_FORBIDDEN, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), // Book @@ -321,7 +338,9 @@ public enum SwaggerResponseDescription { ROOM_NOT_FOUND, USER_NOT_FOUND, ATTENDANCE_CHECK_WRITE_LIMIT_EXCEEDED, - ATTENDANCE_CHECK_NOT_FOUND + ATTENDANCE_CHECK_NOT_FOUND, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), ATTENDANCE_CHECK_SHOW(new LinkedHashSet<>(Set.of( @@ -331,7 +350,9 @@ public enum SwaggerResponseDescription { ATTENDANCE_CHECK_DELETE(new LinkedHashSet<>(Set.of( ROOM_ACCESS_FORBIDDEN, ATTENDANCE_CHECK_NOT_FOUND, - ATTENDANCE_CHECK_CAN_NOT_DELETE + ATTENDANCE_CHECK_CAN_NOT_DELETE, + ROOM_IS_EXPIRED, + ROOM_NOT_IN_PROGRESS ))), // Notiification diff --git a/src/main/java/konkuk/thip/message/adapter/out/firebase/FirebaseAdapter.java b/src/main/java/konkuk/thip/message/adapter/out/firebase/FirebaseAdapter.java index 318a1d668..f907ceb6a 100644 --- a/src/main/java/konkuk/thip/message/adapter/out/firebase/FirebaseAdapter.java +++ b/src/main/java/konkuk/thip/message/adapter/out/firebase/FirebaseAdapter.java @@ -13,7 +13,7 @@ @Slf4j @Component -@Profile({"!test & !local"}) +@Profile("!test & !local") @RequiredArgsConstructor public class FirebaseAdapter implements FirebaseMessagingPort { diff --git a/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java b/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java index 5865135fd..c5822ba89 100644 --- a/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java +++ b/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java @@ -100,4 +100,7 @@ public void updateIsPublic(boolean isPublic) { @VisibleForTesting public void updateRoomPercentage(double roomPercentage) {this.roomPercentage = roomPercentage;} + + @VisibleForTesting + public void updateRoomStatus(RoomStatus roomStatus) {this.roomStatus = roomStatus;} } diff --git a/src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java b/src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java index 5fa848e00..237172e33 100644 --- a/src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java +++ b/src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java @@ -25,8 +25,8 @@ public class RoomQueryPersistenceAdapter implements RoomQueryPort { private final RoomJpaRepository roomJpaRepository; @Override - public int countRecruitingRoomsByBookAndStartDateAfter(String isbn, LocalDate currentDate) { - return roomJpaRepository.countActiveRoomsByBookIdAndStartDateAfter(isbn, currentDate); + public int countRecruitingRoomsByBookIsbn(String isbn) { + return roomJpaRepository.countRecruitingRoomsByBookIsbn(isbn); } @Override diff --git a/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomJpaRepository.java b/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomJpaRepository.java index a41e7e811..905a89a69 100644 --- a/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomJpaRepository.java +++ b/src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomJpaRepository.java @@ -6,7 +6,6 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import java.time.LocalDate; import java.util.List; import java.util.Optional; @@ -19,8 +18,8 @@ public interface RoomJpaRepository extends JpaRepository, R @Query("SELECT COUNT(r) FROM RoomJpaEntity r " + "WHERE r.bookJpaEntity.isbn = :isbn " + - "AND r.startDate > :currentDate") - int countActiveRoomsByBookIdAndStartDateAfter(@Param("isbn") String isbn, @Param("currentDate") LocalDate currentDate); + "AND r.roomStatus = 'RECRUITING'") + int countRecruitingRoomsByBookIsbn(@Param("isbn") String isbn); @Modifying(clearAutomatically = true, flushAutomatically = true) @Query(""" 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 b708d4cc3..c791ed28e 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 @@ -19,6 +19,7 @@ import konkuk.thip.room.application.port.out.dto.RoomParticipantQueryDto; import konkuk.thip.room.application.port.out.dto.RoomQueryDto; import konkuk.thip.room.domain.value.Category; +import konkuk.thip.room.domain.value.RoomStatus; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -35,9 +36,9 @@ public class RoomQueryRepositoryImpl implements RoomQueryRepository { private final QRoomParticipantJpaEntity participant = QRoomParticipantJpaEntity.roomParticipantJpaEntity; /** 모집중 + ACTIVE 공통 where */ - private BooleanBuilder recruitingActiveWhere(LocalDate today) { + private BooleanBuilder recruitingActiveWhere() { BooleanBuilder where = new BooleanBuilder(); - where.and(room.startDate.after(today)); + where.and(room.roomStatus.eq(RoomStatus.RECRUITING)); return where; } @@ -82,7 +83,8 @@ private QRoomQueryDto projectionForRecruitingRoomSearch() { room.recruitCount, room.memberCount, room.startDate, - room.isPublic + room.isPublic, + room.roomStatus ); } @@ -91,10 +93,9 @@ private QRoomQueryDto projectionForRecruitingRoomSearch() { */ @Override public List findRecruitingRoomsOrderByStartDateAsc(String keyword, LocalDate lastStartDate, Long roomId, int pageSize) { - final LocalDate today = LocalDate.now(); DateExpression cursorExpr = room.startDate; // 커서 비교는 startDate - BooleanBuilder where = recruitingActiveWhere(today); + BooleanBuilder where = recruitingActiveWhere(); applyKeyword(where, keyword); applyCursorStartDateAsc(where, cursorExpr, lastStartDate, roomId); @@ -110,10 +111,9 @@ public List findRecruitingRoomsOrderByStartDateAsc(String keyword, @Override public List findRecruitingRoomsWithCategoryOrderByStartDateAsc(String keyword, Category category, LocalDate lastStartDate, Long roomId, int pageSize) { - final LocalDate today = LocalDate.now(); DateExpression cursorExpr = room.startDate; - BooleanBuilder where = recruitingActiveWhere(today); + BooleanBuilder where = recruitingActiveWhere(); applyCategory(where, category); applyKeyword(where, keyword); applyCursorStartDateAsc(where, cursorExpr, lastStartDate, roomId); @@ -130,9 +130,7 @@ public List findRecruitingRoomsWithCategoryOrderByStartDateAsc(Str @Override public List findRecruitingRoomsOrderByMemberCountDesc(String keyword, Integer lastMemberCount, Long roomId, int pageSize) { - final LocalDate today = LocalDate.now(); - - BooleanBuilder where = recruitingActiveWhere(today); + BooleanBuilder where = recruitingActiveWhere(); applyKeyword(where, keyword); applyCursorMemberCountDesc(where, lastMemberCount, roomId); @@ -148,9 +146,7 @@ public List findRecruitingRoomsOrderByMemberCountDesc(String keywo @Override public List findRecruitingRoomsWithCategoryOrderByMemberCountDesc(String keyword, Category category, Integer lastMemberCount, Long roomId, int pageSize) { - final LocalDate today = LocalDate.now(); - - BooleanBuilder where = recruitingActiveWhere(today); + BooleanBuilder where = recruitingActiveWhere(); applyCategory(where, category); applyKeyword(where, keyword); applyCursorMemberCountDesc(where, lastMemberCount, roomId); @@ -174,7 +170,7 @@ public List findOtherRecruitingR .join(room.bookJpaEntity, book) .where( room.category.eq(category) - .and(room.startDate.after(LocalDate.now())) // 모집 마감 시각 > 현재 시각 + .and(room.roomStatus.eq(RoomStatus.RECRUITING)) // 모집 중인 방 .and(room.roomId.ne(roomId))// 현재 방 제외 .and(room.isPublic.isTrue()) // 공개방 만 ) @@ -204,11 +200,10 @@ public List findHomeJoinedRoomsByUserPercentage( // 검색 조건(where) 조립 // 유저가 참여한 방만: userId 조건 - // 활동 기간 중인 방만: startDate ≤ today ≤ endDate + // 활동 기간 중인 방만: IN_PROGRESS 상태 BooleanBuilder where = new BooleanBuilder(); where.and(participant.userJpaEntity.userId.eq(userId)); - where.and(room.startDate.loe(LocalDate.now())); - where.and(room.endDate.goe(LocalDate.now())); + where.and(room.roomStatus.eq(RoomStatus.IN_PROGRESS)); // 활동 기간 중인 방만: IN_PROGRESS 상태 // 커서 기반 추가 조건 if (userPercentageCursor != null && startDateCursor != null && roomIdCursor != null) { @@ -250,9 +245,8 @@ public List findHomeJoinedRoomsByUserPercentage( public List findRecruitingRoomsUserParticipated( Long userId, LocalDate dateCursor, Long roomIdCursor, int pageSize ) { - LocalDate today = LocalDate.now(); BooleanExpression base = participant.userJpaEntity.userId.eq(userId) - .and(room.startDate.after(today)); // 유저가 참여한 방 && 모집중인 방 + .and(room.roomStatus.eq(RoomStatus.RECRUITING)); // 유저가 참여한 방 && 모집중인 방 DateExpression cursorExpr = room.startDate; // 커서 비교는 startDate(= 모집 마감일 - 1일) OrderSpecifier[] orders = new OrderSpecifier[]{ cursorExpr.asc(), room.roomId.asc() @@ -266,10 +260,8 @@ public List findRecruitingRoomsUserParticipated( public List findPlayingRoomsUserParticipated( Long userId, LocalDate dateCursor, Long roomIdCursor, int pageSize ) { - LocalDate today = LocalDate.now(); BooleanExpression base = participant.userJpaEntity.userId.eq(userId) - .and(room.startDate.loe(today)) - .and(room.endDate.goe(today)); // 유저가 참여한 방 && 현재 진행중인 방 + .and(room.roomStatus.eq(RoomStatus.IN_PROGRESS)); // 유저가 참여한 방 && 현재 진행중인 방 DateExpression cursorExpr = room.endDate; // 커서 비교는 endDate(= 진행 마감일) OrderSpecifier[] orders = new OrderSpecifier[]{ cursorExpr.asc(), room.roomId.asc() @@ -283,9 +275,8 @@ public List findPlayingRoomsUserParticipated( public List findPlayingAndRecruitingRoomsUserParticipated( Long userId, Integer priorityCursor, LocalDate dateCursor, Long roomIdCursor, int pageSize ) { - LocalDate today = LocalDate.now(); - BooleanExpression playing = room.startDate.loe(today).and(room.endDate.goe(today)); - BooleanExpression recruiting = room.startDate.after(today); + BooleanExpression playing = room.roomStatus.eq(RoomStatus.IN_PROGRESS); + BooleanExpression recruiting = room.roomStatus.eq(RoomStatus.RECRUITING); BooleanExpression base = participant.userJpaEntity.userId.eq(userId) .and(playing.or(recruiting)); // 유저가 참여한 방 && 현재 진행중인 방 + 모집중인 방 @@ -307,9 +298,8 @@ public List findPlayingAndRecruitingRoomsUserParticipated( public List findExpiredRoomsUserParticipated( Long userId, LocalDate dateCursor, Long roomIdCursor, int pageSize ) { - LocalDate today = LocalDate.now(); BooleanExpression base = participant.userJpaEntity.userId.eq(userId) - .and(room.endDate.before(today)); // 유저가 참여한 방 && 만료된 방 + .and(room.roomStatus.eq(RoomStatus.EXPIRED)); // 유저가 참여한 방 && 만료된 방 DateExpression cursorExpr = room.endDate; OrderSpecifier[] orders = new OrderSpecifier[]{ @@ -328,7 +318,8 @@ public List findRoomsByCategoryOrderByStartDateAsc(Category catego room.title, room.recruitCount, room.memberCount, - room.startDate + room.startDate, + room.roomStatus )) .from(room) .join(room.bookJpaEntity, book) @@ -347,7 +338,8 @@ public List findRoomsByCategoryOrderByMemberCount(Category categor room.title, room.recruitCount, room.memberCount, - room.startDate + room.startDate, + room.roomStatus )) .from(room) .join(room.bookJpaEntity, book) @@ -361,7 +353,7 @@ public List findRoomsByCategoryOrderByMemberCount(Category categor public List findRoomsByIsbnOrderByStartDateAsc(String isbn, LocalDate dateCursor, Long roomIdCursor, int pageSize) { DateExpression cursorExpr = room.startDate; // 커서 비교는 startDate(= 모집 마감일 - 1일) BooleanExpression baseCondition = room.bookJpaEntity.isbn.eq(isbn) - .and(room.startDate.after(LocalDate.now())); // 모집 마감 시각 > 현재 시각 + .and(room.roomStatus.eq(RoomStatus.RECRUITING)); // 모집중인 방 if (dateCursor != null && roomIdCursor != null) { // 첫 페이지가 아닌 경우 @@ -377,7 +369,8 @@ public List findRoomsByIsbnOrderByStartDateAsc(String isbn, LocalD room.recruitCount, room.memberCount, cursorExpr, - room.isPublic + room.isPublic, + room.roomStatus )) .from(room) .join(room.bookJpaEntity, book) @@ -389,7 +382,7 @@ public List findRoomsByIsbnOrderByStartDateAsc(String isbn, LocalD private BooleanExpression findDeadlinePopularRoomCondition(Category category, Long userId) { return room.category.eq(category) - .and(room.startDate.after(LocalDate.now())) // 모집 마감 시각 > 현재 시각 + .and(room.roomStatus.eq(RoomStatus.RECRUITING)) // 모집중인 방 .and(room.isPublic.isTrue()) // 공개 방만 조회 .and(userJoinedRoom(userId).not()); // 유저가 참여하지 않은 방만 조회 } @@ -440,7 +433,8 @@ private List fetchMyRooms( room.memberCount, room.startDate, cursorExpr, // endDate 자리에 상황별 deadline 컬럼 전달 - room.isPublic + room.isPublic, + room.roomStatus )) .from(participant) .join(participant.roomJpaEntity, room) @@ -487,7 +481,8 @@ private List fetchMyRoomsWithPriority( room.memberCount, room.startDate, cursorExpr, // endDate 자리에 상황별 deadline 컬럼 전달 - room.isPublic + room.isPublic, + room.roomStatus )) .from(participant) .join(participant.roomJpaEntity, room) diff --git a/src/main/java/konkuk/thip/room/application/port/out/RoomQueryPort.java b/src/main/java/konkuk/thip/room/application/port/out/RoomQueryPort.java index b28d75426..8c43d2034 100644 --- a/src/main/java/konkuk/thip/room/application/port/out/RoomQueryPort.java +++ b/src/main/java/konkuk/thip/room/application/port/out/RoomQueryPort.java @@ -5,15 +5,14 @@ import konkuk.thip.room.adapter.in.web.response.RoomRecruitingDetailViewResponse; import konkuk.thip.room.application.port.out.dto.RoomParticipantQueryDto; import konkuk.thip.room.application.port.out.dto.RoomQueryDto; -import konkuk.thip.room.domain.value.Category; import konkuk.thip.room.domain.Room; +import konkuk.thip.room.domain.value.Category; -import java.time.LocalDate; import java.util.List; public interface RoomQueryPort { - int countRecruitingRoomsByBookAndStartDateAfter(String isbn, LocalDate currentDate); + int countRecruitingRoomsByBookIsbn(String isbn); /** * 방 검색 diff --git a/src/main/java/konkuk/thip/room/application/port/out/dto/RoomQueryDto.java b/src/main/java/konkuk/thip/room/application/port/out/dto/RoomQueryDto.java index ac466fd11..6a268459b 100644 --- a/src/main/java/konkuk/thip/room/application/port/out/dto/RoomQueryDto.java +++ b/src/main/java/konkuk/thip/room/application/port/out/dto/RoomQueryDto.java @@ -1,6 +1,7 @@ package konkuk.thip.room.application.port.out.dto; import com.querydsl.core.annotations.QueryProjection; +import konkuk.thip.room.domain.value.RoomStatus; import lombok.Builder; import org.springframework.util.Assert; @@ -16,7 +17,8 @@ public record RoomQueryDto( Integer memberCount, LocalDate startDate, // 방 진행 시작일 LocalDate endDate, // 방 진행 마감일 or 방 모집 마감일 - Boolean isPublic // 공개방 여부 + Boolean isPublic, // 공개방 여부 + RoomStatus roomStatus ) { // 내가 참여한 모임방(모집중, 진행중, 모집+진행중, 완료된) 조회 시 활용 @QueryProjection @@ -27,6 +29,7 @@ public record RoomQueryDto( Assert.notNull(endDate, "endDate must not be null"); Assert.notNull(recruitCount, "recruitCount must not be null"); Assert.notNull(memberCount, "memberCount must not be null"); + Assert.notNull(roomStatus, "roomStatus must not be null"); } @QueryProjection @@ -36,9 +39,10 @@ public RoomQueryDto( String roomName, Integer recruitCount, Integer memberCount, - LocalDate endDate + LocalDate endDate, + RoomStatus roomStatus ) { - this(roomId, bookImageUrl, roomName, recruitCount, memberCount, null, endDate, null); + this(roomId, bookImageUrl, roomName, recruitCount, memberCount, null, endDate, null, roomStatus); } // 방 검색 시 활용 @@ -50,8 +54,9 @@ public RoomQueryDto( Integer recruitCount, Integer memberCount, LocalDate endDate, - Boolean isPublic + Boolean isPublic, + RoomStatus roomStatus ) { - this(roomId, bookImageUrl, roomName, recruitCount, memberCount, null, endDate, isPublic); + this(roomId, bookImageUrl, roomName, recruitCount, memberCount, null, endDate, isPublic, roomStatus); } } diff --git a/src/main/java/konkuk/thip/room/application/service/RoomJoinService.java b/src/main/java/konkuk/thip/room/application/service/RoomJoinService.java index 3f4167821..02c0e7676 100644 --- a/src/main/java/konkuk/thip/room/application/service/RoomJoinService.java +++ b/src/main/java/konkuk/thip/room/application/service/RoomJoinService.java @@ -34,11 +34,11 @@ public class RoomJoinService implements RoomJoinUseCase { public RoomJoinResult changeJoinState(RoomJoinCommand roomJoinCommand) { RoomJoinType type = roomJoinCommand.type(); - // 방이 존재하지 않거나 만료된 경우 + // 방이 존재하지 않거나 모집기간이 만료된 경우 예외 처리 Room room = roomCommandPort.findById(roomJoinCommand.roomId()) .orElseThrow(() -> new BusinessException(ErrorCode.USER_CANNOT_JOIN_OR_CANCEL)); - validateRoom(room); + room.validateRoomRecruitExpired(); Optional roomParticipantOptional = roomParticipantCommandPort.findByUserIdAndRoomIdOptional(roomJoinCommand.userId(), roomJoinCommand.roomId()); @@ -93,11 +93,6 @@ private void handleJoin(RoomJoinCommand roomJoinCommand, Optional HOST 로 수정 - RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10, RoomStatus.RECRUITING); saveUsersToRoom(science_room_2, 5); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "isbn4", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), 8); + RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "isbn4", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_4, 1); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8, RoomStatus.RECRUITING); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8, RoomStatus.IN_PROGRESS); saveUsersToRoom(recruit_expired_room_4, 6); //when @@ -244,26 +247,26 @@ void get_recruiting_room_detail_host() throws Exception { @DisplayName("추천하는 다른 모집중인 모임방이 많을 경우, 모집 기한 마감임박 순으로 최대 5개만 반환한다.") void get_recruiting_room_detail_too_many_recommend_rooms() throws Exception { //given - RoomJpaEntity targetRoom = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity targetRoom = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10, RoomStatus.RECRUITING); saveUsersToRoom(targetRoom, 4); UserJpaEntity joiningUser = roomParticipantJpaRepository.findAllByRoomId(targetRoom.getRoomId()).get(1).getUserJpaEntity(); - RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10, RoomStatus.RECRUITING); saveUsersToRoom(science_room_2, 5); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "isbn4", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), 8); + RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "isbn4", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_4, 1); - RoomJpaEntity science_room_5 = saveScienceRoom("과학-책", "isbn5", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), 8); + RoomJpaEntity science_room_5 = saveScienceRoom("과학-책", "isbn5", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_5, 1); - RoomJpaEntity science_room_6 = saveScienceRoom("과학-책", "isbn6", "과학-방-15일뒤-활동시작", LocalDate.now().plusDays(15), 8); + RoomJpaEntity science_room_6 = saveScienceRoom("과학-책", "isbn6", "과학-방-15일뒤-활동시작", LocalDate.now().plusDays(15), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_6, 1); - RoomJpaEntity science_room_7 = saveScienceRoom("과학-책", "isbn7", "과학-방-20일뒤-활동시작", LocalDate.now().plusDays(20), 8); + RoomJpaEntity science_room_7 = saveScienceRoom("과학-책", "isbn7", "과학-방-20일뒤-활동시작", LocalDate.now().plusDays(20), 8, RoomStatus.RECRUITING); saveUsersToRoom(science_room_7, 1); //when @@ -296,14 +299,14 @@ void get_recruiting_room_detail_too_many_recommend_rooms() throws Exception { @DisplayName("추천하는 다른 모집중인 모임방이 없을 경우, 해당 데이터를 빈 배열로 반환한다.") void get_recruiting_room_detail_no_recommend_rooms() throws Exception { //given - RoomJpaEntity targetRoom = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity targetRoom = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10, RoomStatus.RECRUITING); saveUsersToRoom(targetRoom, 4); UserJpaEntity joiningUser = roomParticipantJpaRepository.findAllByRoomId(targetRoom.getRoomId()).get(1).getUserJpaEntity(); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8, RoomStatus.RECRUITING); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8, RoomStatus.IN_PROGRESS); saveUsersToRoom(recruit_expired_room_4, 6); //when diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java index 70b16969d..0a45f740f 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java @@ -8,10 +8,11 @@ import konkuk.thip.recentSearch.adapter.out.persistence.repository.RecentSearchJpaRepository; import konkuk.thip.room.adapter.out.jpa.RoomJpaEntity; import konkuk.thip.room.adapter.out.persistence.repository.RoomJpaRepository; +import konkuk.thip.room.adapter.out.persistence.repository.roomparticipant.RoomParticipantJpaRepository; import konkuk.thip.room.domain.value.Category; -import konkuk.thip.user.adapter.out.jpa.*; +import konkuk.thip.room.domain.value.RoomStatus; +import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; import konkuk.thip.user.adapter.out.persistence.repository.UserJpaRepository; -import konkuk.thip.room.adapter.out.persistence.repository.roomparticipant.RoomParticipantJpaRepository; import konkuk.thip.user.domain.value.Alias; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.DisplayName; @@ -56,18 +57,32 @@ void tearDown() { userJpaRepository.deleteAllInBatch(); } - private RoomJpaEntity saveScienceRoom(String bookTitle, String roomName, LocalDate startDate, LocalDate endDate) { + private RoomJpaEntity saveScienceRecruitingRoom(String bookTitle, String roomName, LocalDate startDate, LocalDate endDate) { + BookJpaEntity book = bookJpaRepository.save(TestEntityFactory.createBookWithBookTitle(bookTitle)); + + Category category = TestEntityFactory.createScienceCategory(); + return roomJpaRepository.save(TestEntityFactory.createCustomRoom(book, category, roomName, startDate, endDate, RoomStatus.RECRUITING)); + } + + private RoomJpaEntity saveScienceProgressRoom(String bookTitle, String roomName, LocalDate startDate, LocalDate endDate) { BookJpaEntity book = bookJpaRepository.save(TestEntityFactory.createBookWithBookTitle(bookTitle)); Category category = TestEntityFactory.createScienceCategory(); - return roomJpaRepository.save(TestEntityFactory.createCustomRoom(book, category, roomName, startDate, endDate)); + return roomJpaRepository.save(TestEntityFactory.createCustomRoom(book, category, roomName, startDate, endDate, RoomStatus.IN_PROGRESS)); + } + + private RoomJpaEntity saveLiteratureRecruitingRoom(String bookTitle, String roomName, LocalDate startDate, LocalDate endDate) { + BookJpaEntity book = bookJpaRepository.save(TestEntityFactory.createBookWithBookTitle(bookTitle)); + + Category category = TestEntityFactory.createLiteratureCategory(); + return roomJpaRepository.save(TestEntityFactory.createCustomRoom(book, category, roomName, startDate, endDate, RoomStatus.RECRUITING)); } - private RoomJpaEntity saveLiteratureRoom(String bookTitle, String roomName, LocalDate startDate, LocalDate endDate) { + private RoomJpaEntity saveLiteratureProgressRoom(String bookTitle, String roomName, LocalDate startDate, LocalDate endDate) { BookJpaEntity book = bookJpaRepository.save(TestEntityFactory.createBookWithBookTitle(bookTitle)); Category category = TestEntityFactory.createLiteratureCategory(); - return roomJpaRepository.save(TestEntityFactory.createCustomRoom(book, category, roomName, startDate, endDate)); + return roomJpaRepository.save(TestEntityFactory.createCustomRoom(book, category, roomName, startDate, endDate, RoomStatus.IN_PROGRESS)); } private void updateRoomMemberCount(RoomJpaEntity roomJpaEntity, int count) { @@ -81,22 +96,22 @@ private void updateRoomMemberCount(RoomJpaEntity roomJpaEntity, int count) { @DisplayName("keyword = [과학], 카테고리 선택 X, 정렬 = [마감임박순] 일 경우, 방이름 or 책제목에 '과학'이 포함된 모집중인 방 검색 결과가 마감임박순으로 반환된다.") void search_keyword_and_sort_deadline() throws Exception { //given - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_1, 4); - RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "방이름입니다", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_2 = saveScienceRecruitingRoom("과학-책", "방이름입니다", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_2, 5); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_3 = saveScienceRecruitingRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_3, 2); - RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_4 = saveScienceRecruitingRoom("과학-책", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_4, 1); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); + RoomJpaEntity room_3 = saveLiteratureRecruitingRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); updateRoomMemberCount(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity recruit_expired_room_4 = saveScienceProgressRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(recruit_expired_room_4, 6); //when @@ -127,22 +142,22 @@ void search_keyword_and_sort_deadline() throws Exception { @DisplayName("keyword = [과학], 카테고리 선택 X, 정렬 = [인기순] 일 경우, 방이름 or 책제목에 '과학'이 포함된 모집중인 방 검색 결과가 인기순(= 현재까지 모집된 인원 많은 순)으로 반환된다.") void search_keyword_and_sort_member_count() throws Exception { //given - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_1, 4); - RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "방이름입니다", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_2 = saveScienceRecruitingRoom("과학-책", "방이름입니다", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_2, 5); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_3 = saveScienceRecruitingRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_3, 2); - RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_4 = saveScienceRecruitingRoom("과학-책", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_4, 1); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); + RoomJpaEntity room_3 = saveLiteratureRecruitingRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); updateRoomMemberCount(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity recruit_expired_room_4 = saveScienceProgressRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(recruit_expired_room_4, 6); //when @@ -182,16 +197,16 @@ void search_keyword_and_sort_member_count() throws Exception { @DisplayName("keyword 입력 x, 카테고리 = [과학/IT], 정렬 = [마감임박순] 일 경우, [과학/IT] 카테고리에 속하는 방 검색 결과가 반환된다.") void search_category_and_sort_deadline() throws Exception { //given - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_1, 4); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_3 = saveScienceRecruitingRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_3, 2); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); + RoomJpaEntity room_3 = saveLiteratureRecruitingRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); updateRoomMemberCount(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity recruit_expired_room_4 = saveScienceProgressRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(recruit_expired_room_4, 6); //when @@ -219,16 +234,16 @@ void search_category_and_sort_deadline() throws Exception { @DisplayName("keyword 입력 x, 카테고리 입력 x, 정렬 = [마감임박순] 일 경우, DB에 존재하는 전체 방 검색 결과가 반환된다.") void search_sort_deadline() throws Exception { //given - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_1, 4); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_3 = saveScienceRecruitingRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_3, 2); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); + RoomJpaEntity room_3 = saveLiteratureRecruitingRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); updateRoomMemberCount(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity recruit_expired_room_4 = saveScienceProgressRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(recruit_expired_room_4, 6); //when @@ -256,16 +271,16 @@ void search_sort_deadline() throws Exception { @DisplayName("keyword=[과학], category=[과학/IT], 정렬=[마감임박순] 일 경우, keyword, category 조건을 모두 만족하는 방만 반환된다.") void search_keyword_and_category() throws Exception { // given - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_1, 4); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_3 = saveScienceRecruitingRoom("과학-책", "무슨방일까요??", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_3, 2); - RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); + RoomJpaEntity room_3 = saveLiteratureRecruitingRoom("문학-책", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); updateRoomMemberCount(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity recruit_expired_room_4 = saveScienceProgressRoom("과학-책", "모집기한-지난-과학방", LocalDate.now().minusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(recruit_expired_room_4, 6); // when @@ -296,7 +311,7 @@ void search_keyword_saved() throws Exception { // given Alias aliasJpa = TestEntityFactory.createScienceAlias(); UserJpaEntity me = userJpaRepository.save(TestEntityFactory.createUser(aliasJpa)); - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); updateRoomMemberCount(science_room_1, 4); // when @@ -327,18 +342,18 @@ void search_keyword_saved() throws Exception { @DisplayName("검색결과에 해당하는 방이 많은 경우, 정렬 조건 기준으로 페이징 처리한다.") void comment_show_all_page_test() throws Exception { //given - RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_5 = saveScienceRoom("과학-책", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_6 = saveScienceRoom("과학-책", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_7 = saveScienceRoom("과학-책", "과학-방-7일뒤-활동시작", LocalDate.now().plusDays(7), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_8 = saveScienceRoom("과학-책", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_9 = saveScienceRoom("과학-책", "과학-방-9일뒤-활동시작", LocalDate.now().plusDays(9), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_10 = saveScienceRoom("과학-책", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_11 = saveScienceRoom("과학-책", "과학-방-11일뒤-활동시작", LocalDate.now().plusDays(11), LocalDate.now().plusDays(30)); - RoomJpaEntity science_room_12 = saveScienceRoom("과학-책", "과학-방-12일뒤-활동시작", LocalDate.now().plusDays(12), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_1 = saveScienceRecruitingRoom("과학-책", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_2 = saveScienceRecruitingRoom("과학-책", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_3 = saveScienceRecruitingRoom("과학-책", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_4 = saveScienceRecruitingRoom("과학-책", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_5 = saveScienceRecruitingRoom("과학-책", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_6 = saveScienceRecruitingRoom("과학-책", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_7 = saveScienceRecruitingRoom("과학-책", "과학-방-7일뒤-활동시작", LocalDate.now().plusDays(7), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_8 = saveScienceRecruitingRoom("과학-책", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_9 = saveScienceRecruitingRoom("과학-책", "과학-방-9일뒤-활동시작", LocalDate.now().plusDays(9), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_10 = saveScienceRecruitingRoom("과학-책", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_11 = saveScienceRecruitingRoom("과학-책", "과학-방-11일뒤-활동시작", LocalDate.now().plusDays(11), LocalDate.now().plusDays(30)); + RoomJpaEntity science_room_12 = saveScienceRecruitingRoom("과학-책", "과학-방-12일뒤-활동시작", LocalDate.now().plusDays(12), LocalDate.now().plusDays(30)); //when //then MvcResult firstResult = mockMvc.perform(get("/rooms/search") diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomShowMineApiTest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomShowMineApiTest.java index 2493e5ce5..c75278393 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomShowMineApiTest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomShowMineApiTest.java @@ -10,6 +10,7 @@ import konkuk.thip.room.adapter.out.persistence.repository.RoomJpaRepository; import konkuk.thip.room.adapter.out.persistence.repository.roomparticipant.RoomParticipantJpaRepository; import konkuk.thip.room.domain.value.Category; +import konkuk.thip.room.domain.value.RoomStatus; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; import konkuk.thip.user.adapter.out.persistence.repository.UserJpaRepository; import konkuk.thip.user.domain.value.Alias; @@ -53,7 +54,7 @@ void tearDown() { userJpaRepository.deleteAllInBatch(); } - private RoomJpaEntity saveScienceRoom(String bookTitle, String isbn, String roomName, LocalDate startDate, LocalDate endDate, int recruitCount) { + private RoomJpaEntity saveScienceRoom(String bookTitle, String isbn, String roomName, LocalDate startDate, LocalDate endDate, int recruitCount, RoomStatus roomStatus) { Alias alias = TestEntityFactory.createScienceAlias(); BookJpaEntity book = bookJpaRepository.save(BookJpaEntity.builder() @@ -79,6 +80,7 @@ private RoomJpaEntity saveScienceRoom(String bookTitle, String isbn, String room .recruitCount(recruitCount) .bookJpaEntity(book) .category(category) + .roomStatus(roomStatus) .build()); } @@ -105,16 +107,16 @@ private RoomParticipantJpaEntity saveSingleUserToRoom(RoomJpaEntity roomJpaEntit @DisplayName("type 으로 playing 을 받을 경우, 해당 유저가 참여중인 방 중 [현재 진행중인 모임방]의 정보를 [활동 마감일 임박순] 으로 반환한다.") void get_my_playing_rooms() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn2", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn2", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom1, 6); - RoomJpaEntity playingRoom2 = saveScienceRoom("진행중인방-책-2", "isbn3", "과학-방-10일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(10), 10); + RoomJpaEntity playingRoom2 = saveScienceRoom("진행중인방-책-2", "isbn3", "과학-방-10일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(10), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom2, 3); - RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10); + RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10, RoomStatus.EXPIRED); changeRoomMemberCount(expiredRoom1, 7); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -144,16 +146,16 @@ void get_my_playing_rooms() throws Exception { @DisplayName("type 으로 recruiting 을 받을 경우, 해당 유저가 참여중인 방 중 [모집중인 모임방]의 정보를 [모집 마감일 임박순] 으로 반환한다.") void get_my_recruiting_rooms() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom2, 8); - RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom1, 6); - RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10); + RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10, RoomStatus.EXPIRED); changeRoomMemberCount(expiredRoom1, 7); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -183,16 +185,16 @@ void get_my_recruiting_rooms() throws Exception { @DisplayName("type 이 주어지지 않을 경우, 해당 유저가 참여중인 방 중 [현재 진행중 + 모집중인 모임방]의 정보를 [현재 진행중 -> 모집중] 순 으로 반환한다.") void get_my_playing_and_recruiting_rooms() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom2, 8); - RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom1, 6); - RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10); + RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10, RoomStatus.EXPIRED); changeRoomMemberCount(expiredRoom1, 7); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -223,16 +225,16 @@ void get_my_playing_and_recruiting_rooms() throws Exception { @DisplayName("type 으로 expired 을 받을 경우, 해당 유저가 참여중인 방 중 [만료된 모임방]의 정보를 [활동 마감일 최신순] 으로 반환한다.") void get_my_expired_rooms() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn2", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn2", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom1, 6); - RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn3", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10); + RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn3", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10, RoomStatus.EXPIRED); changeRoomMemberCount(expiredRoom1, 7); - RoomJpaEntity expiredRoom2 = saveScienceRoom("만료된방-책-2", "isbn4", "과학-방-10일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(10), 10); + RoomJpaEntity expiredRoom2 = saveScienceRoom("만료된방-책-2", "isbn4", "과학-방-10일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(10), 10, RoomStatus.EXPIRED); changeRoomMemberCount(expiredRoom2, 1); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -262,16 +264,16 @@ void get_my_expired_rooms() throws Exception { @DisplayName("유효하지 않은 type 을 받을 경우, 400 error 를 반환한다.") void get_my_rooms_wrong_type() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom2, 8); - RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom1, 6); - RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10); + RoomJpaEntity expiredRoom1 = saveScienceRoom("만료된방-책-1", "isbn4", "과학-방-5일전-활동마감", LocalDate.now().minusDays(30), LocalDate.now().minusDays(5), 10, RoomStatus.EXPIRED); changeRoomMemberCount(expiredRoom1, 7); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -298,40 +300,40 @@ void get_my_rooms_wrong_type() throws Exception { @DisplayName("한번에 최대 10개의 데이터만을 반환한다. 다음 페이지에 해당하는 데이터가 있을 경우, 다음 페이지의 cursor 값을 반환한다.") void get_my_rooms_page_1() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom2, 8); - RoomJpaEntity recruitingRoom3 = saveScienceRoom("모집중인방-책-3", "isbn3", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom3 = saveScienceRoom("모집중인방-책-3", "isbn3", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom3, 8); - RoomJpaEntity recruitingRoom4 = saveScienceRoom("모집중인방-책-4", "isbn4", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom4 = saveScienceRoom("모집중인방-책-4", "isbn4", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom4, 8); - RoomJpaEntity recruitingRoom5 = saveScienceRoom("모집중인방-책-5", "isbn5", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom5 = saveScienceRoom("모집중인방-책-5", "isbn5", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom5, 8); - RoomJpaEntity recruitingRoom6 = saveScienceRoom("모집중인방-책-6", "isbn6", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom6 = saveScienceRoom("모집중인방-책-6", "isbn6", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom6, 8); - RoomJpaEntity recruitingRoom7 = saveScienceRoom("모집중인방-책-7", "isbn7", "과학-방-7일뒤-활동시작", LocalDate.now().plusDays(7), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom7 = saveScienceRoom("모집중인방-책-7", "isbn7", "과학-방-7일뒤-활동시작", LocalDate.now().plusDays(7), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom7, 8); - RoomJpaEntity recruitingRoom8 = saveScienceRoom("모집중인방-책-8", "isbn8", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom8 = saveScienceRoom("모집중인방-책-8", "isbn8", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom8, 8); - RoomJpaEntity recruitingRoom9 = saveScienceRoom("모집중인방-책-9", "isbn9", "과학-방-9일뒤-활동시작", LocalDate.now().plusDays(9), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom9 = saveScienceRoom("모집중인방-책-9", "isbn9", "과학-방-9일뒤-활동시작", LocalDate.now().plusDays(9), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom9, 8); - RoomJpaEntity recruitingRoom10 = saveScienceRoom("모집중인방-책-10", "isbn10", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom10 = saveScienceRoom("모집중인방-책-10", "isbn10", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom10, 8); - RoomJpaEntity recruitingRoom11 = saveScienceRoom("모집중인방-책-11", "isbn11", "과학-방-11일뒤-활동시작", LocalDate.now().plusDays(11), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom11 = saveScienceRoom("모집중인방-책-11", "isbn11", "과학-방-11일뒤-활동시작", LocalDate.now().plusDays(11), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom11, 8); - RoomJpaEntity recruitingRoom12 = saveScienceRoom("모집중인방-책-12", "isbn12", "과학-방-12일뒤-활동시작", LocalDate.now().plusDays(12), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom12 = saveScienceRoom("모집중인방-책-12", "isbn12", "과학-방-12일뒤-활동시작", LocalDate.now().plusDays(12), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom12, 8); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -377,40 +379,40 @@ void get_my_rooms_page_1() throws Exception { @DisplayName("cursor 값을 기준으로 해당 페이지의 데이터를 반환한다.") void get_my_rooms_page_2() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom2 = saveScienceRoom("모집중인방-책-2", "isbn2", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom2, 8); - RoomJpaEntity recruitingRoom3 = saveScienceRoom("모집중인방-책-3", "isbn3", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom3 = saveScienceRoom("모집중인방-책-3", "isbn3", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom3, 8); - RoomJpaEntity recruitingRoom4 = saveScienceRoom("모집중인방-책-4", "isbn4", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom4 = saveScienceRoom("모집중인방-책-4", "isbn4", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom4, 8); - RoomJpaEntity recruitingRoom5 = saveScienceRoom("모집중인방-책-5", "isbn5", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom5 = saveScienceRoom("모집중인방-책-5", "isbn5", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom5, 8); - RoomJpaEntity recruitingRoom6 = saveScienceRoom("모집중인방-책-6", "isbn6", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom6 = saveScienceRoom("모집중인방-책-6", "isbn6", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom6, 8); - RoomJpaEntity recruitingRoom7 = saveScienceRoom("모집중인방-책-7", "isbn7", "과학-방-7일뒤-활동시작", LocalDate.now().plusDays(7), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom7 = saveScienceRoom("모집중인방-책-7", "isbn7", "과학-방-7일뒤-활동시작", LocalDate.now().plusDays(7), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom7, 8); - RoomJpaEntity recruitingRoom8 = saveScienceRoom("모집중인방-책-8", "isbn8", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom8 = saveScienceRoom("모집중인방-책-8", "isbn8", "과학-방-8일뒤-활동시작", LocalDate.now().plusDays(8), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom8, 8); - RoomJpaEntity recruitingRoom9 = saveScienceRoom("모집중인방-책-9", "isbn9", "과학-방-9일뒤-활동시작", LocalDate.now().plusDays(9), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom9 = saveScienceRoom("모집중인방-책-9", "isbn9", "과학-방-9일뒤-활동시작", LocalDate.now().plusDays(9), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom9, 8); - RoomJpaEntity recruitingRoom10 = saveScienceRoom("모집중인방-책-10", "isbn10", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom10 = saveScienceRoom("모집중인방-책-10", "isbn10", "과학-방-10일뒤-활동시작", LocalDate.now().plusDays(10), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom10, 8); - RoomJpaEntity recruitingRoom11 = saveScienceRoom("모집중인방-책-11", "isbn11", "과학-방-11일뒤-활동시작", LocalDate.now().plusDays(11), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom11 = saveScienceRoom("모집중인방-책-11", "isbn11", "과학-방-11일뒤-활동시작", LocalDate.now().plusDays(11), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom11, 8); - RoomJpaEntity recruitingRoom12 = saveScienceRoom("모집중인방-책-12", "isbn12", "과학-방-12일뒤-활동시작", LocalDate.now().plusDays(12), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom12 = saveScienceRoom("모집중인방-책-12", "isbn12", "과학-방-12일뒤-활동시작", LocalDate.now().plusDays(12), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom12, 8); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -450,16 +452,16 @@ void get_my_rooms_page_2() throws Exception { @DisplayName("유저가 나간 방(= 모집기간 중 참여 취소한 경우, 진행기간 중 방 나간 경우) 은 조회되지 않는다.") void get_my_rooms_about_exit_rooms() throws Exception { //given - RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruitingRoom1 = saveScienceRoom("모집중인방-책-1", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruitingRoom1, 5); - RoomJpaEntity exitRecruitingRoom = saveScienceRoom("모집중인방-책-2", "isbn2", "참여신청하고-나간-모집중인-과학-방", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity exitRecruitingRoom = saveScienceRoom("모집중인방-책-2", "isbn2", "참여신청하고-나간-모집중인-과학-방", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(exitRecruitingRoom, 8); - RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playingRoom1 = saveScienceRoom("진행중인방-책-1", "isbn3", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playingRoom1, 6); - RoomJpaEntity exitPlayingRoom = saveScienceRoom("진행중인방-책-2", "isbn4", "모임진행중-나간-진행중인-과학-방", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10); + RoomJpaEntity exitPlayingRoom = saveScienceRoom("진행중인방-책-2", "isbn4", "모임진행중-나간-진행중인-과학-방", LocalDate.now().minusDays(5), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(exitPlayingRoom, 6); Alias scienceAlias = TestEntityFactory.createScienceAlias(); @@ -497,31 +499,31 @@ void get_my_rooms_about_exit_rooms() throws Exception { void get_my_playing_and_recruiting_rooms_pagination() throws Exception { // given // 진행중인 방 6개 (endDate 임박 순서: +1d ~ +6d) - RoomJpaEntity playing1 = saveScienceRoom("진행중인방-책-P1", "pisbn1", "과학-방-1일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(1), 10); + RoomJpaEntity playing1 = saveScienceRoom("진행중인방-책-P1", "pisbn1", "과학-방-1일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(1), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playing1, 3); - RoomJpaEntity playing2 = saveScienceRoom("진행중인방-책-P2", "pisbn2", "과학-방-2일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(2), 10); + RoomJpaEntity playing2 = saveScienceRoom("진행중인방-책-P2", "pisbn2", "과학-방-2일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(2), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playing2, 4); - RoomJpaEntity playing3 = saveScienceRoom("진행중인방-책-P3", "pisbn3", "과학-방-3일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(3), 10); + RoomJpaEntity playing3 = saveScienceRoom("진행중인방-책-P3", "pisbn3", "과학-방-3일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(3), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playing3, 5); - RoomJpaEntity playing4 = saveScienceRoom("진행중인방-책-P4", "pisbn4", "과학-방-4일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(4), 10); + RoomJpaEntity playing4 = saveScienceRoom("진행중인방-책-P4", "pisbn4", "과학-방-4일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(4), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playing4, 6); - RoomJpaEntity playing5 = saveScienceRoom("진행중인방-책-P5", "pisbn5", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(5), 10); + RoomJpaEntity playing5 = saveScienceRoom("진행중인방-책-P5", "pisbn5", "과학-방-5일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(5), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playing5, 7); - RoomJpaEntity playing6 = saveScienceRoom("진행중인방-책-P6", "pisbn6", "과학-방-6일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(6), 10); + RoomJpaEntity playing6 = saveScienceRoom("진행중인방-책-P6", "pisbn6", "과학-방-6일뒤-활동마감", LocalDate.now().minusDays(10), LocalDate.now().plusDays(6), 10, RoomStatus.IN_PROGRESS); changeRoomMemberCount(playing6, 8); // 모집중인 방 6개 (startDate 임박 순서: +1d ~ +6d) - RoomJpaEntity recruiting1 = saveScienceRoom("모집중인방-책-R1", "risbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruiting1 = saveScienceRoom("모집중인방-책-R1", "risbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruiting1, 3); - RoomJpaEntity recruiting2 = saveScienceRoom("모집중인방-책-R2", "risbn2", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruiting2 = saveScienceRoom("모집중인방-책-R2", "risbn2", "과학-방-2일뒤-활동시작", LocalDate.now().plusDays(2), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruiting2, 4); - RoomJpaEntity recruiting3 = saveScienceRoom("모집중인방-책-R3", "risbn3", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruiting3 = saveScienceRoom("모집중인방-책-R3", "risbn3", "과학-방-3일뒤-활동시작", LocalDate.now().plusDays(3), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruiting3, 5); - RoomJpaEntity recruiting4 = saveScienceRoom("모집중인방-책-R4", "risbn4", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruiting4 = saveScienceRoom("모집중인방-책-R4", "risbn4", "과학-방-4일뒤-활동시작", LocalDate.now().plusDays(4), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruiting4, 6); - RoomJpaEntity recruiting5 = saveScienceRoom("모집중인방-책-R5", "risbn5", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruiting5 = saveScienceRoom("모집중인방-책-R5", "risbn5", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruiting5, 7); - RoomJpaEntity recruiting6 = saveScienceRoom("모집중인방-책-R6", "risbn6", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30), 10); + RoomJpaEntity recruiting6 = saveScienceRoom("모집중인방-책-R6", "risbn6", "과학-방-6일뒤-활동시작", LocalDate.now().plusDays(6), LocalDate.now().plusDays(30), 10, RoomStatus.RECRUITING); changeRoomMemberCount(recruiting6, 8); Alias alias = TestEntityFactory.createScienceAlias(); diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordApiTest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordApiTest.java index 5efa7075f..dde07a0b3 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordApiTest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordApiTest.java @@ -6,6 +6,7 @@ import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.room.adapter.in.web.request.RoomVerifyPasswordRequest; import konkuk.thip.room.domain.value.Category; +import konkuk.thip.room.domain.value.RoomStatus; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; import konkuk.thip.user.adapter.out.persistence.repository.UserJpaRepository; import konkuk.thip.room.adapter.out.jpa.RoomJpaEntity; @@ -162,6 +163,7 @@ void verifyRoomPassword_recruitmentPeriodExpired() throws Exception { .startDate(LocalDate.now()) // 오늘 시작이므로 모집기간은 어제까지 .endDate(LocalDate.now().plusDays(5)) .recruitCount(3) + .roomStatus(RoomStatus.IN_PROGRESS) // 이미 시작된 방 .build() ); Long expiredRoomId = expiredRoom.getRoomId(); diff --git a/src/test/java/konkuk/thip/room/domain/RoomTest.java b/src/test/java/konkuk/thip/room/domain/RoomTest.java index a8d051334..03f76c043 100644 --- a/src/test/java/konkuk/thip/room/domain/RoomTest.java +++ b/src/test/java/konkuk/thip/room/domain/RoomTest.java @@ -3,6 +3,7 @@ import konkuk.thip.common.exception.InvalidStateException; import konkuk.thip.common.exception.code.ErrorCode; import konkuk.thip.room.domain.value.Category; +import konkuk.thip.room.domain.value.RoomStatus; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -187,7 +188,8 @@ void isRecruitmentPeriodExpired_expired() { "제목", "설명", false, "1234", start, start.plusDays(10), 5, 123L, validCategory ); - setField(room, "startDate", today); // 모집기간 만료 상태를 강제로 만든 후 검증 + setField(room, "startDate", today); + setField(room, "roomStatus", RoomStatus.IN_PROGRESS); // 모집기간 만료 상태를 강제로 만든 후 검증 assertTrue(room.isRecruitmentPeriodExpired()); } @@ -199,7 +201,8 @@ void verifyPassword_recruitmentPeriodExpired() { "제목", "설명", false, "1234", startExpired, END, 5, 123L, validCategory ); - setField(room, "startDate", today); // 모집기간 만료 상태를 강제로 만든 후 검증 + setField(room, "startDate", today); + setField(room, "roomStatus", RoomStatus.IN_PROGRESS); // 모집기간 만료 상태를 강제로 만든 후 검증 InvalidStateException ex = assertThrows(InvalidStateException.class, () -> room.verifyPassword("1234")); assertEquals(ErrorCode.ROOM_RECRUITMENT_PERIOD_EXPIRED, ex.getErrorCode()); diff --git a/src/test/java/konkuk/thip/roompost/application/service/VoteServiceTest.java b/src/test/java/konkuk/thip/roompost/application/service/VoteServiceTest.java index 35d593186..7f4b85eac 100644 --- a/src/test/java/konkuk/thip/roompost/application/service/VoteServiceTest.java +++ b/src/test/java/konkuk/thip/roompost/application/service/VoteServiceTest.java @@ -3,8 +3,9 @@ import konkuk.thip.common.exception.BusinessException; import konkuk.thip.common.exception.InvalidStateException; import konkuk.thip.common.exception.code.ErrorCode; +import konkuk.thip.room.application.port.out.RoomCommandPort; import konkuk.thip.room.application.service.validator.RoomParticipantValidator; -import konkuk.thip.roompost.application.service.VoteService; +import konkuk.thip.room.domain.Room; import konkuk.thip.roompost.application.port.in.dto.vote.VoteCommand; import konkuk.thip.roompost.application.port.in.dto.vote.VoteResult; import konkuk.thip.roompost.application.port.out.VoteCommandPort; @@ -30,13 +31,20 @@ class VoteServiceTest { private VoteQueryPort voteQueryPort; private RoomParticipantValidator roomParticipantValidator; private VoteService voteService; + private RoomCommandPort roomCommandPort; @BeforeEach void setUp() { voteCommandPort = mock(VoteCommandPort.class); voteQueryPort = mock(VoteQueryPort.class); roomParticipantValidator = mock(RoomParticipantValidator.class); - voteService = new VoteService(voteCommandPort, voteQueryPort, roomParticipantValidator); + roomCommandPort = mock(RoomCommandPort.class); + + Room mockRoom = mock(Room.class); + doNothing().when(mockRoom).validateRoomInProgress(); + when(roomCommandPort.getByIdOrThrow(anyLong())).thenReturn(mockRoom); + + voteService = new VoteService(voteCommandPort, voteQueryPort, roomParticipantValidator, roomCommandPort); } private void mockVoteQueryResult(Long voteId, Long voteItemId, String itemName, boolean isVoted, int count) {