diff --git a/build.gradle b/build.gradle index bc529f8d8..f49aae725 100644 --- a/build.gradle +++ b/build.gradle @@ -78,6 +78,10 @@ dependencies { // Spring Boot Actuator implementation 'org.springframework.boot:spring-boot-starter-actuator' + + // Flyway + implementation "org.flywaydb:flyway-core" + implementation "org.flywaydb:flyway-mysql" } def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile 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 ce51508d9..c3b92ac6c 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 @@ -50,6 +50,11 @@ public class RoomJpaEntity extends BaseJpaEntity { @Column(name = "member_count",nullable = false) private int memberCount = 1; + @Builder.Default + @Column(name = "room_status", nullable = false) + @Enumerated(EnumType.STRING) + private RoomStatus roomStatus = RoomStatus.RECRUITING; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "book_id", nullable = false) private BookJpaEntity bookJpaEntity; @@ -68,6 +73,7 @@ public RoomJpaEntity updateFrom(Room room) { this.endDate = room.getEndDate(); this.recruitCount = room.getRecruitCount(); this.memberCount = room.getMemberCount(); + this.roomStatus = room.getRoomStatus(); return this; } diff --git a/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomStatus.java b/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomStatus.java new file mode 100644 index 000000000..b1952c30f --- /dev/null +++ b/src/main/java/konkuk/thip/room/adapter/out/jpa/RoomStatus.java @@ -0,0 +1,7 @@ +package konkuk.thip.room.adapter.out.jpa; + +public enum RoomStatus { + RECRUITING, + IN_PROGRESS, + EXPIRED +} diff --git a/src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java b/src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java index 125ff96b2..5dd3ebe81 100644 --- a/src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java +++ b/src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java @@ -19,6 +19,7 @@ public RoomJpaEntity toJpaEntity(Room room, BookJpaEntity bookJpaEntity) { .endDate(room.getEndDate()) .recruitCount(room.getRecruitCount()) .memberCount(room.getMemberCount()) + .roomStatus(room.getRoomStatus()) .bookJpaEntity(bookJpaEntity) .category(room.getCategory()) .build(); @@ -36,6 +37,7 @@ public Room toDomainEntity(RoomJpaEntity roomJpaEntity) { .endDate(roomJpaEntity.getEndDate()) .recruitCount(roomJpaEntity.getRecruitCount()) .memberCount(roomJpaEntity.getMemberCount()) + .roomStatus(roomJpaEntity.getRoomStatus()) .bookId(roomJpaEntity.getBookJpaEntity().getBookId()) .category(roomJpaEntity.getCategory()) .createdAt(roomJpaEntity.getCreatedAt()) diff --git a/src/main/java/konkuk/thip/room/domain/Room.java b/src/main/java/konkuk/thip/room/domain/Room.java index 6e4d73a11..010198b5b 100644 --- a/src/main/java/konkuk/thip/room/domain/Room.java +++ b/src/main/java/konkuk/thip/room/domain/Room.java @@ -4,6 +4,7 @@ import konkuk.thip.common.exception.InvalidStateException; import konkuk.thip.common.entity.StatusType; import konkuk.thip.common.exception.code.ErrorCode; +import konkuk.thip.room.adapter.out.jpa.RoomStatus; import konkuk.thip.room.domain.value.Category; import lombok.Getter; import lombok.experimental.SuperBuilder; @@ -40,6 +41,8 @@ public class Room extends BaseDomainEntity { private int memberCount; + private RoomStatus roomStatus; + private Long bookId; private Category category; @@ -62,6 +65,7 @@ public static Room withoutId(String title, String description, boolean isPublic, .endDate(endDate) .recruitCount(recruitCount) .memberCount(1) // 처음 Room 생성 시 방장 1명 + .roomStatus(RoomStatus.RECRUITING) // 처음 Room 생성 시 -> 모집중 .bookId(bookId) .category(category) .build(); diff --git a/src/main/resources/db/migration/V1__BaseLine.sql b/src/main/resources/db/migration/V1__BaseLine.sql new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/resources/db/migration/V250828__Add_room_status.sql b/src/main/resources/db/migration/V250828__Add_room_status.sql new file mode 100644 index 000000000..0110d59de --- /dev/null +++ b/src/main/resources/db/migration/V250828__Add_room_status.sql @@ -0,0 +1,14 @@ +-- 1) 컬럼 추가: 기본값 RECRUITING, NOT NULL +ALTER TABLE rooms + ADD COLUMN room_status VARCHAR(32) NOT NULL DEFAULT 'RECRUITING' + COMMENT 'Room 상태: RECRUITING/IN_PROGRESS/EXPIRED'; + +-- 2) start_date가 현재 날짜보다 "이전"이면 IN_PROGRESS로 업데이트 +UPDATE rooms +SET room_status = 'IN_PROGRESS' +WHERE start_date <= CURDATE(); + +-- 3) end_date가 현재 날짜보다 "이전"이면 EXPIRED로 업데이트 +UPDATE rooms +SET room_status = 'EXPIRED' +WHERE end_date < CURDATE(); \ No newline at end of file