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(