From bb5f8920ced380cc15ab090fa34fe7df37363d9e Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 18 Jun 2026 16:24:33 -0400 Subject: [PATCH] Saving changes --- src/caller/message/event.rs | 0 src/caller/mod.rs | 2 + src/repo/message/event.rs | 112 ++++++++++++++++++++++++++++++++++++ src/repo/message/mod.rs | 3 + src/repo/mod.rs | 1 - 5 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/caller/message/event.rs create mode 100644 src/repo/message/event.rs create mode 100644 src/repo/message/mod.rs diff --git a/src/caller/message/event.rs b/src/caller/message/event.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/caller/mod.rs b/src/caller/mod.rs index 11dff9c..5d68d7f 100644 --- a/src/caller/mod.rs +++ b/src/caller/mod.rs @@ -18,6 +18,8 @@ pub mod endpoints { pub const SCHEDULE_MESSAGE: &str = "/api/v1/schedule/message"; /// Constant for getting scheduled message endpoint pub const GET_SCHEDULE_MESSAGE: &str = "/api/v1/schedule/message"; + /// Constant for creating Scheduled Message Event endpoint + pub const CREATE_SCHEDULED_MESSAGE_EVENT: &str = "/api/v1/schedule/message/event"; } pub mod response { diff --git a/src/repo/message/event.rs b/src/repo/message/event.rs new file mode 100644 index 0000000..c7c78b8 --- /dev/null +++ b/src/repo/message/event.rs @@ -0,0 +1,112 @@ +use sqlx::Row; + +pub async fn insert( + pool: &sqlx::PgPool, + event: &textsender_models::message::event::MessageEventResponse, +) -> Result<(uuid::Uuid, time::OffsetDateTime), sqlx::Error> { + match sqlx::query( + r#" + INSERT INTO "scheduled_message_events" (contact_id, message_id, scheduled_message_id) + VALUES($1, $2, $3) RETURNING id, created; + "#, + ) + .bind(&event.contact_id) + .bind(&event.message_id) + .bind(&event.scheduled_message_event_id) + .fetch_one(pool) + .await + { + Ok(row) => { + let id: uuid::Uuid = row.try_get("id")?; + let created: time::OffsetDateTime = row.try_get("created")?; + Ok((id, created)) + } + Err(_) => Err(sqlx::Error::RowNotFound), + } +} + +pub async fn get( + pool: &sqlx::PgPool, + id: &uuid::Uuid, +) -> Result { + match sqlx::query( + r#" + SELECT id, contact_id, created, status, user_id FROM "scheduled_message_events" + WHERE + id = $1; + "#, + ) + .bind(id) + .fetch_one(pool) + .await + { + Ok(row) => match parse_row(&row).await { + Ok(event) => Ok(event), + Err(err) => Err(err), + }, + Err(_) => Err(sqlx::Error::RowNotFound), + } +} + +pub async fn get_with_user_id( + pool: &sqlx::PgPool, + scheduled_message_id: &uuid::Uuid, +) -> Result, sqlx::Error> { + match sqlx::query( + r#" + SELECT id, contact_id, message_id, schduled_message_id, created FROM "scheduled_message_events" + WHERE + scheduled_message_id = $1; + "#, + ) + .bind(scheduled_message_id) + .fetch_all(pool) + .await + { + Ok(rows) => { + let mut events: Vec = + Vec::new(); + for row in rows { + match parse_row(&row).await { + Ok(event) => { + events.push(event); + } + Err(err) => { + return Err(err); + } + } + } + + Ok(events) + } + Err(_) => Err(sqlx::Error::RowNotFound), + } +} + +async fn parse_row( + row: &sqlx::postgres::PgRow, +) -> Result { + let id: uuid::Uuid = row.try_get("id")?; + let response: String = row.try_get("response")?; + let status: String = row.try_get("status")?; + let contact_id: uuid::Uuid = row.try_get("contact_id")?; + let message_id: uuid::Uuid = row.try_get("message_id")?; + // todo!("Do something with created"); + // TODO: Do something about this + let _created: time::OffsetDateTime = row.try_get("created")?; + let sent: time::OffsetDateTime = row.try_get("sent")?; + let scheduled_message_id: uuid::Uuid = row.try_get("scheduled_message_id")?; + let user_id: uuid::Uuid = row.try_get("user_id")?; + + Ok(textsender_models::message::event::MessageEventResponse { + id, + response, + contact_id, + message_id, + status, + sent: Some(sent), + scheduled_message_event_id: scheduled_message_id, + user_id, + }) +} + diff --git a/src/repo/message/mod.rs b/src/repo/message/mod.rs new file mode 100644 index 0000000..54510d2 --- /dev/null +++ b/src/repo/message/mod.rs @@ -0,0 +1,3 @@ +pub mod event; +pub mod message; +pub mod scheduling; diff --git a/src/repo/mod.rs b/src/repo/mod.rs index d185221..2af9758 100644 --- a/src/repo/mod.rs +++ b/src/repo/mod.rs @@ -1,3 +1,2 @@ pub mod contact; pub mod message; -pub mod scheduling;