Saving changes
This commit is contained in:
@@ -18,6 +18,8 @@ pub mod endpoints {
|
|||||||
pub const SCHEDULE_MESSAGE: &str = "/api/v1/schedule/message";
|
pub const SCHEDULE_MESSAGE: &str = "/api/v1/schedule/message";
|
||||||
/// Constant for getting scheduled message endpoint
|
/// Constant for getting scheduled message endpoint
|
||||||
pub const GET_SCHEDULE_MESSAGE: &str = "/api/v1/schedule/message";
|
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 {
|
pub mod response {
|
||||||
|
|||||||
@@ -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<textsender_models::message::event::MessageEventResponse, sqlx::Error> {
|
||||||
|
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<Vec<textsender_models::message::event::MessageEventResponse>, 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<textsender_models::message::event::MessageEventResponse> =
|
||||||
|
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<textsender_models::message::event::MessageEventResponse, sqlx::Error> {
|
||||||
|
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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
pub mod event;
|
||||||
|
pub mod message;
|
||||||
|
pub mod scheduling;
|
||||||
@@ -1,3 +1,2 @@
|
|||||||
pub mod contact;
|
pub mod contact;
|
||||||
pub mod message;
|
pub mod message;
|
||||||
pub mod scheduling;
|
|
||||||
|
|||||||
Reference in New Issue
Block a user