Move errors route into get_reminders route. Add database migration.
This commit is contained in:
@ -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(
|
||||
|
@ -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")
|
||||
})
|
||||
}
|
||||
|
@ -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 = ?",
|
||||
|
Reference in New Issue
Block a user