Move errors route into get_reminders route. Add database migration.

This commit is contained in:
jude
2023-09-03 15:01:42 +01:00
parent b6b5e6d2b2
commit ee89cb40c5
15 changed files with 172 additions and 85 deletions

View File

@ -166,7 +166,6 @@ pub async fn initialize(
routes::dashboard::guild::get_reminders,
routes::dashboard::guild::edit_reminder,
routes::dashboard::guild::delete_reminder,
routes::dashboard::guild::get_reminder_errors,
routes::dashboard::export::export_reminders,
routes::dashboard::export::export_reminder_templates,
routes::dashboard::export::export_todos,

View File

@ -171,6 +171,8 @@ pub async fn import_reminders(
uid: generate_uid(),
username: record.username,
utc_time: record.utc_time,
status: "pending".to_string(),
status_change_time: None,
};
create_reminder(

View File

@ -26,7 +26,7 @@ use crate::{
routes::{
dashboard::{
create_database_channel, create_reminder, template_name_default, DeleteReminder,
DeleteReminderTemplate, PatchReminder, Reminder, ReminderError, ReminderTemplate,
DeleteReminderTemplate, PatchReminder, Reminder, ReminderTemplate,
},
JsonResult,
},
@ -318,15 +318,18 @@ pub async fn create_guild_reminder(
.await
}
#[get("/api/guild/<id>/reminders")]
#[get("/api/guild/<id>/reminders?<status>")]
pub async fn get_reminders(
id: u64,
cookies: &CookieJar<'_>,
serenity_context: &State<Context>,
pool: &State<Pool<MySql>>,
status: Option<String>,
) -> JsonResult {
check_authorization!(cookies, serenity_context.inner(), id);
let status = status.unwrap_or("pending".to_string());
sqlx::query_as_unchecked!(
Reminder,
"SELECT
@ -355,10 +358,13 @@ pub async fn get_reminders(
reminders.tts,
reminders.uid,
reminders.username,
reminders.utc_time
reminders.utc_time,
reminders.status,
reminders.status_change_time
FROM reminders
LEFT JOIN channels ON channels.id = reminders.channel_id
WHERE `status` = 'pending' AND reminders.guild_id = (SELECT id FROM guilds WHERE guild = ?)",
WHERE FIND_IN_SET(`status`, ?) AND reminders.guild_id = (SELECT id FROM guilds WHERE guild = ?)",
status,
id
)
.fetch_all(pool.inner())
@ -567,7 +573,9 @@ pub async fn edit_reminder(
reminders.tts,
reminders.uid,
reminders.username,
reminders.utc_time
reminders.utc_time,
reminders.status,
reminders.status_change_time
FROM reminders
LEFT JOIN channels ON channels.id = reminders.channel_id
WHERE uid = ?",
@ -591,9 +599,12 @@ pub async fn delete_reminder(
reminder: Json<DeleteReminder>,
pool: &State<Pool<MySql>>,
) -> JsonResult {
match sqlx::query!("UPDATE reminders SET `status` = 'deleted' WHERE uid = ?", reminder.uid)
.execute(pool.inner())
.await
match sqlx::query!(
"UPDATE reminders SET `status` = 'deleted', `status_change_time` = NOW() WHERE uid = ?",
reminder.uid
)
.execute(pool.inner())
.await
{
Ok(_) => Ok(json!({})),
@ -604,35 +615,3 @@ pub async fn delete_reminder(
}
}
}
#[get("/api/guild/<id>/errors")]
pub async fn get_reminder_errors(
id: u64,
cookies: &CookieJar<'_>,
serenity_context: &State<Context>,
pool: &State<Pool<MySql>>,
) -> JsonResult {
check_authorization!(cookies, serenity_context.inner(), id);
sqlx::query_as_unchecked!(
ReminderError,
"SELECT
reminders.status,
reminders.utc_time,
reminders.name,
reminders.uid,
reminders.channel_id AS channel
FROM reminders
LEFT JOIN channels ON channels.id = reminders.channel_id
WHERE (`status` = 'failed' OR reminders.channel_id IS NULL) AND reminders.guild_id = (SELECT id FROM guilds WHERE guild = ?)",
id
)
.fetch_all(pool.inner())
.await
.map(|r| Ok(json!(r)))
.unwrap_or_else(|e| {
warn!("Failed to complete SQL query: {:?}", e);
json_err!("Could not load reminders")
})
}

View File

@ -150,18 +150,8 @@ pub struct Reminder {
uid: String,
username: Option<String>,
utc_time: NaiveDateTime,
}
#[derive(Serialize)]
pub struct ReminderError {
#[serde(with = "string")]
channel: u64,
status: String,
#[serde(default = "name_default")]
name: String,
#[serde(default)]
uid: String,
utc_time: NaiveDateTime,
status_change_time: Option<NaiveDateTime>,
}
#[derive(Serialize, Deserialize)]
@ -574,7 +564,9 @@ pub async fn create_reminder(
reminders.tts,
reminders.uid,
reminders.username,
reminders.utc_time
reminders.utc_time,
reminders.status,
reminders.status_change_time
FROM reminders
LEFT JOIN channels ON channels.id = reminders.channel_id
WHERE uid = ?",