From 0ac027771435c43cbe320c7ccc443d882b9c438e Mon Sep 17 00:00:00 2001 From: pricelees Date: Sun, 7 Sep 2025 18:33:26 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=98=88?= =?UTF-8?q?=EC=95=BD=20/=20=EC=B7=A8=EC=86=8C=EB=90=9C=20=EC=98=88?= =?UTF-8?q?=EC=95=BD=20Schema=20&=20Entity=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/CanceledReservationEntity.kt | 27 +++++++++++++++ .../CanceledReservationRepository.kt | 5 +++ .../persistence/ReservationEntityV2.kt | 32 ++++++++++++++++++ .../persistence/ReservationRepositoryV2.kt | 8 +++++ src/main/resources/schema/schema-h2.sql | 33 ++++++++++++++++++- 5 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationEntity.kt create mode 100644 src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationRepository.kt create mode 100644 src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationEntityV2.kt create mode 100644 src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationRepositoryV2.kt diff --git a/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationEntity.kt b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationEntity.kt new file mode 100644 index 00000000..b6818369 --- /dev/null +++ b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationEntity.kt @@ -0,0 +1,27 @@ +package roomescape.reservation_v2.infrastructure.persistence + +import jakarta.persistence.Entity +import jakarta.persistence.EnumType +import jakarta.persistence.Enumerated +import jakarta.persistence.Table +import roomescape.common.entity.BaseEntityV2 +import java.time.LocalDateTime + +@Entity +@Table(name = "canceled_reservation") +class CanceledReservationEntity( + id: Long, + + val reservationId: Long, + val canceledBy: Long, + val cancelReason: String, + val canceledAt: LocalDateTime, + + @Enumerated(value = EnumType.STRING) + val status: CanceledReservationStatus, + +): BaseEntityV2(id) + +enum class CanceledReservationStatus { + PROCESSING, FAILED, COMPLETED +} diff --git a/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationRepository.kt b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationRepository.kt new file mode 100644 index 00000000..4f68884c --- /dev/null +++ b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/CanceledReservationRepository.kt @@ -0,0 +1,5 @@ +package roomescape.reservation_v2.infrastructure.persistence + +import org.springframework.data.jpa.repository.JpaRepository + +interface CanceledReservationRepository: JpaRepository \ No newline at end of file diff --git a/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationEntityV2.kt b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationEntityV2.kt new file mode 100644 index 00000000..b6a6fa20 --- /dev/null +++ b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationEntityV2.kt @@ -0,0 +1,32 @@ +package roomescape.reservation_v2.infrastructure.persistence + +import jakarta.persistence.Entity +import jakarta.persistence.EnumType +import jakarta.persistence.Enumerated +import jakarta.persistence.Table +import roomescape.common.entity.AuditingBaseEntity + +@Entity +@Table(name = "reservation") +class ReservationEntityV2( + id: Long, + + val memberId: Long, + val scheduleId: Long, + val reserverName: String, + val reserverContact: String, + val participantCount: Short, + val requirement: String, + + @Enumerated(value = EnumType.STRING) + var status: ReservationStatusV2, + +): AuditingBaseEntity(id) { + fun confirm() { this.status = ReservationStatusV2.CONFIRMED } + fun fail() { this.status = ReservationStatusV2.FAILED } + fun cancel() { this.status = ReservationStatusV2.CANCELED } +} + +enum class ReservationStatusV2 { + PENDING, CONFIRMED, CANCELED, FAILED, EXPIRED +} diff --git a/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationRepositoryV2.kt b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationRepositoryV2.kt new file mode 100644 index 00000000..d1562750 --- /dev/null +++ b/src/main/kotlin/roomescape/reservation_v2/infrastructure/persistence/ReservationRepositoryV2.kt @@ -0,0 +1,8 @@ +package roomescape.reservation_v2.infrastructure.persistence + +import org.springframework.data.jpa.repository.JpaRepository + +interface ReservationRepositoryV2 : JpaRepository { + + fun findAllByMemberId(memberId: Long): List +} \ No newline at end of file diff --git a/src/main/resources/schema/schema-h2.sql b/src/main/resources/schema/schema-h2.sql index e24c5f78..59f38c5e 100644 --- a/src/main/resources/schema/schema-h2.sql +++ b/src/main/resources/schema/schema-h2.sql @@ -88,6 +88,37 @@ create table if not exists reservations ( constraint fk_reservations__timeId foreign key (time_id) references times (time_id) ); +create table if not exists reservation ( + id bigint primary key, + member_id bigint not null, + schedule_id bigint not null, + reserver_name varchar(30) not null, + reserver_contact varchar(30) not null, + participant_count smallint not null, + requirement varchar(255) not null, + status varchar(30) not null, + created_at timestamp not null, + created_by bigint not null, + updated_at timestamp not null, + updated_by bigint not null, + + constraint fk_reservation__member_id foreign key (member_id) references members (member_id), + constraint fk_reservation__schedule_id foreign key (schedule_id) references schedule (id) +); + +create table if not exists canceled_reservation ( + id bigint primary key, + reservation_id bigint not null, + canceled_by bigint not null, + cancel_reason varchar(50) not null, + canceled_at timestamp not null, + status varchar(30) not null, + + constraint uk_canceled_reservations__reservation_id unique (reservation_id), + constraint fk_canceled_reservations__reservation_id foreign key (reservation_id) references reservation (id), + constraint fk_canceled_reservations__canceled_by foreign key (canceled_by) references members (member_id) +); + create table if not exists payments ( payment_id bigint primary key, approved_at timestamp not null, @@ -127,7 +158,7 @@ create table if not exists payment1 ( approved_at timestamp not null, constraint uk_payment__reservationId unique (reservation_id), - constraint fk_payment__reservationId foreign key (reservation_id) references reservations (reservation_id) + constraint fk_payment__reservationId foreign key (reservation_id) references reservation (id) ); create table if not exists payment_detail(