Rust Build / Rustfmt (push) Successful in 46s
Rust Build / Test Suite (push) Successful in 1m21s
Rust Build / Check (push) Successful in 2m20s
Rust Build / Clippy (push) Successful in 1m48s
Rust Build / build (push) Successful in 2m11s
textsender_api PR / Rustfmt (pull_request) Successful in 1m6s
textsender_api PR / Clippy (pull_request) Successful in 1m22s
textsender_api PR / Check (pull_request) Successful in 2m9s
Reviewed-on: phoenix/textsender_api#29
115 lines
3.3 KiB
Rust
115 lines
3.3 KiB
Rust
use sqlx::Row;
|
|
|
|
pub async fn insert(
|
|
pool: &sqlx::PgPool,
|
|
event: &textsender_models::message::event::MessageEventResponse,
|
|
) -> Result<uuid::Uuid, sqlx::Error> {
|
|
match sqlx::query(
|
|
r#"
|
|
INSERT INTO "message_event_responses" (scheduled_message_event_id, response, user_id, sent, contact_id, message_id, status)
|
|
VALUES($1, $2, $3, $4, $5, $6, $7) RETURNING id;
|
|
"#,
|
|
)
|
|
.bind(event.scheduled_message_event_id)
|
|
.bind(&event.response)
|
|
.bind(event.user_id)
|
|
.bind(event.sent)
|
|
.bind(event.contact_id)
|
|
.bind(event.message_id)
|
|
.bind(&event.status)
|
|
.fetch_one(pool)
|
|
.await
|
|
{
|
|
Ok(row) => {
|
|
let id: uuid::Uuid = row.try_get("id")?;
|
|
Ok(id)
|
|
}
|
|
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, scheduled_message_event_id, response, user_id, sent, contact_id, message_id, status FROM "message_event_responses"
|
|
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,
|
|
user_id: &uuid::Uuid,
|
|
) -> Result<Vec<textsender_models::message::event::MessageEventResponse>, sqlx::Error> {
|
|
match sqlx::query(
|
|
r#"
|
|
SELECT id, scheduled_message_event_id, response, user_id, sent, contact_id, message_id, status FROM "message_event_responses"
|
|
WHERE
|
|
user_id = $1;
|
|
"#,
|
|
)
|
|
.bind(user_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> {
|
|
println!("Parsing MER");
|
|
let id: uuid::Uuid = row.try_get("id")?;
|
|
let response: serde_json::Value = 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")?;
|
|
let sent: time::OffsetDateTime = row.try_get("sent")?;
|
|
let scheduled_message_event_id: Option<uuid::Uuid> = row
|
|
.try_get("scheduled_message_event_id")
|
|
.unwrap_or_default();
|
|
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,
|
|
user_id,
|
|
})
|
|
}
|