diff --git a/migrations/2025-04-07-130716_event_table/down.sql b/migrations/2025-04-07-130716_event_table/down.sql new file mode 100644 index 0000000..92c3065 --- /dev/null +++ b/migrations/2025-04-07-130716_event_table/down.sql @@ -0,0 +1,2 @@ +DROP TABLE events; + diff --git a/migrations/2025-04-07-130716_event_table/up.sql b/migrations/2025-04-07-130716_event_table/up.sql new file mode 100644 index 0000000..58a105b --- /dev/null +++ b/migrations/2025-04-07-130716_event_table/up.sql @@ -0,0 +1,4 @@ +CREATE TABLE events ( + id SERIAL PRIMARY KEY, + time TIMESTAMP UNIQUE NOT NULL +); diff --git a/migrations/2025-04-07-130908_reservation_table/down.sql b/migrations/2025-04-07-130908_reservation_table/down.sql new file mode 100644 index 0000000..aa2a4be --- /dev/null +++ b/migrations/2025-04-07-130908_reservation_table/down.sql @@ -0,0 +1,2 @@ +DROP TABLE reservations; +DROP TYPE reservation_status; diff --git a/migrations/2025-04-07-130908_reservation_table/up.sql b/migrations/2025-04-07-130908_reservation_table/up.sql new file mode 100644 index 0000000..2850d65 --- /dev/null +++ b/migrations/2025-04-07-130908_reservation_table/up.sql @@ -0,0 +1,10 @@ +CREATE TYPE reservation_status AS ENUM ('booked', 'paid'); + +CREATE TABLE reservations ( + id SERIAL PRIMARY KEY, + user_id INTEGER REFERENCES users(id), + entered_name VARCHAR(255), + booked_time TIMESTAMP NOT NULL, + event_id INTEGER REFERENCES events(id), + status reservation_status NOT NULL +); diff --git a/src/db/schema.rs b/src/db/schema.rs index ea1d174..9324907 100644 --- a/src/db/schema.rs +++ b/src/db/schema.rs @@ -1,5 +1,18 @@ // @generated automatically by Diesel CLI. +pub mod sql_types { + #[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)] + #[diesel(postgres_type(name = "reservation_status"))] + pub struct ReservationStatus; +} + +diesel::table! { + events (id) { + id -> Int4, + time -> Timestamp, + } +} + diesel::table! { literals (id) { id -> Int4, @@ -19,6 +32,21 @@ diesel::table! { } } +diesel::table! { + use diesel::sql_types::*; + use super::sql_types::ReservationStatus; + + reservations (id) { + id -> Int4, + user_id -> Nullable, + #[max_length = 255] + entered_name -> Nullable, + booked_time -> Timestamp, + event_id -> Nullable, + status -> ReservationStatus, + } +} + diesel::table! { teloxide_dialogues (chat_id) { chat_id -> Int8, @@ -41,9 +69,14 @@ diesel::table! { } } +diesel::joinable!(reservations -> events (event_id)); +diesel::joinable!(reservations -> users (user_id)); + diesel::allow_tables_to_appear_in_same_query!( + events, literals, messages, + reservations, teloxide_dialogues, users, );