fields are now json and work. fix for intervals. moved some code together
This commit is contained in:
@ -11,14 +11,13 @@ use serde::{Deserialize, Serialize};
|
||||
use serenity::{
|
||||
client::Context,
|
||||
model::{
|
||||
id::{GuildId, RoleId, UserId},
|
||||
id::{GuildId, RoleId},
|
||||
permissions::Permissions,
|
||||
},
|
||||
};
|
||||
use sqlx::{MySql, Pool};
|
||||
|
||||
use super::Reminder;
|
||||
use crate::{consts::DISCORD_API, routes::dashboard::DeleteReminder};
|
||||
use crate::consts::DISCORD_API;
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct UserInfo {
|
||||
@ -164,241 +163,3 @@ pub async fn get_user_guilds(cookies: &CookieJar<'_>, reqwest_client: &State<Cli
|
||||
json!({"error": "Not authorized"})
|
||||
}
|
||||
}
|
||||
|
||||
#[post("/api/user/reminders", data = "<reminder>")]
|
||||
pub async fn create_reminder(
|
||||
reminder: Json<Reminder>,
|
||||
_ctx: &State<Context>,
|
||||
pool: &State<Pool<MySql>>,
|
||||
) -> JsonValue {
|
||||
match sqlx::query!(
|
||||
"INSERT INTO reminders (
|
||||
avatar,
|
||||
content,
|
||||
embed_author,
|
||||
embed_author_url,
|
||||
embed_color,
|
||||
embed_description,
|
||||
embed_footer,
|
||||
embed_footer_url,
|
||||
embed_image_url,
|
||||
embed_thumbnail_url,
|
||||
embed_title,
|
||||
enabled,
|
||||
expires,
|
||||
interval_seconds,
|
||||
interval_months,
|
||||
name,
|
||||
pin,
|
||||
restartable,
|
||||
tts,
|
||||
username,
|
||||
`utc_time`
|
||||
) VALUES (
|
||||
avatar = ?,
|
||||
content = ?,
|
||||
embed_author = ?,
|
||||
embed_author_url = ?,
|
||||
embed_color = ?,
|
||||
embed_description = ?,
|
||||
embed_footer = ?,
|
||||
embed_footer_url = ?,
|
||||
embed_image_url = ?,
|
||||
embed_thumbnail_url = ?,
|
||||
embed_title = ?,
|
||||
enabled = ?,
|
||||
expires = ?,
|
||||
interval_seconds = ?,
|
||||
interval_months = ?,
|
||||
name = ?,
|
||||
pin = ?,
|
||||
restartable = ?,
|
||||
tts = ?,
|
||||
username = ?,
|
||||
`utc_time` = ?
|
||||
)",
|
||||
reminder.avatar,
|
||||
reminder.content,
|
||||
reminder.embed_author,
|
||||
reminder.embed_author_url,
|
||||
reminder.embed_color,
|
||||
reminder.embed_description,
|
||||
reminder.embed_footer,
|
||||
reminder.embed_footer_url,
|
||||
reminder.embed_image_url,
|
||||
reminder.embed_thumbnail_url,
|
||||
reminder.embed_title,
|
||||
reminder.enabled,
|
||||
reminder.expires,
|
||||
reminder.interval_seconds,
|
||||
reminder.interval_months,
|
||||
reminder.name,
|
||||
reminder.pin,
|
||||
reminder.restartable,
|
||||
reminder.tts,
|
||||
reminder.username,
|
||||
reminder.utc_time,
|
||||
)
|
||||
.execute(pool.inner())
|
||||
.await
|
||||
{
|
||||
Ok(_) => {
|
||||
json!({})
|
||||
}
|
||||
Err(e) => {
|
||||
warn!("Error in `create_reminder`: {:?}", e);
|
||||
|
||||
json!({"error": "Could not create reminder"})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/api/user/reminders")]
|
||||
pub async fn get_reminders(
|
||||
pool: &State<Pool<MySql>>,
|
||||
cookies: &CookieJar<'_>,
|
||||
ctx: &State<Context>,
|
||||
) -> JsonValue {
|
||||
if let Some(user_id) =
|
||||
cookies.get_private("userid").map(|c| c.value().parse::<u64>().ok()).flatten()
|
||||
{
|
||||
let query_res = sqlx::query!(
|
||||
"SELECT channel FROM channels INNER JOIN users ON users.dm_channel = channels.id WHERE users.user = ?",
|
||||
user_id
|
||||
)
|
||||
.fetch_one(pool.inner())
|
||||
.await;
|
||||
|
||||
let dm_channel = if let Ok(query) = query_res {
|
||||
Some(query.channel)
|
||||
} else {
|
||||
if let Ok(dm_channel) = UserId(user_id).create_dm_channel(&ctx.inner()).await {
|
||||
Some(dm_channel.id.as_u64().to_owned())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(channel_id) = dm_channel {
|
||||
let reminders = sqlx::query_as!(
|
||||
Reminder,
|
||||
r#"SELECT
|
||||
reminders.attachment,
|
||||
reminders.attachment_name,
|
||||
reminders.avatar,
|
||||
channels.channel,
|
||||
reminders.content,
|
||||
reminders.embed_author,
|
||||
reminders.embed_author_url,
|
||||
reminders.embed_color,
|
||||
reminders.embed_description,
|
||||
reminders.embed_footer,
|
||||
reminders.embed_footer_url,
|
||||
reminders.embed_image_url,
|
||||
reminders.embed_thumbnail_url,
|
||||
reminders.embed_title,
|
||||
reminders.enabled as "enabled:_",
|
||||
reminders.expires,
|
||||
reminders.interval_seconds,
|
||||
reminders.interval_months,
|
||||
reminders.name,
|
||||
reminders.pin as "pin:_",
|
||||
reminders.restartable as "restartable:_",
|
||||
reminders.tts as "tts:_",
|
||||
reminders.uid,
|
||||
reminders.username,
|
||||
reminders.utc_time
|
||||
FROM reminders INNER JOIN channels ON channels.id = reminders.channel_id WHERE channels.channel = ?"#,
|
||||
channel_id
|
||||
)
|
||||
.fetch_all(pool.inner())
|
||||
.await
|
||||
.unwrap_or(vec![]);
|
||||
|
||||
json!(reminders)
|
||||
} else {
|
||||
json!({"error": "User's DM channel could not be determined"})
|
||||
}
|
||||
} else {
|
||||
json!({"error": "Not authorized"})
|
||||
}
|
||||
}
|
||||
|
||||
#[put("/api/user/reminders", data = "<reminder>")]
|
||||
pub async fn overwrite_reminder(reminder: Json<Reminder>, pool: &State<Pool<MySql>>) -> JsonValue {
|
||||
match sqlx::query!(
|
||||
"UPDATE reminders SET
|
||||
avatar = ?,
|
||||
content = ?,
|
||||
embed_author = ?,
|
||||
embed_author_url = ?,
|
||||
embed_color = ?,
|
||||
embed_description = ?,
|
||||
embed_footer = ?,
|
||||
embed_footer_url = ?,
|
||||
embed_image_url = ?,
|
||||
embed_thumbnail_url = ?,
|
||||
embed_title = ?,
|
||||
enabled = ?,
|
||||
expires = ?,
|
||||
interval_seconds = ?,
|
||||
interval_months = ?,
|
||||
name = ?,
|
||||
pin = ?,
|
||||
restartable = ?,
|
||||
tts = ?,
|
||||
username = ?,
|
||||
`utc_time` = ?
|
||||
WHERE uid = ?",
|
||||
reminder.avatar,
|
||||
reminder.content,
|
||||
reminder.embed_author,
|
||||
reminder.embed_author_url,
|
||||
reminder.embed_color,
|
||||
reminder.embed_description,
|
||||
reminder.embed_footer,
|
||||
reminder.embed_footer_url,
|
||||
reminder.embed_image_url,
|
||||
reminder.embed_thumbnail_url,
|
||||
reminder.embed_title,
|
||||
reminder.enabled,
|
||||
reminder.expires,
|
||||
reminder.interval_seconds,
|
||||
reminder.interval_months,
|
||||
reminder.name,
|
||||
reminder.pin,
|
||||
reminder.restartable,
|
||||
reminder.tts,
|
||||
reminder.username,
|
||||
reminder.utc_time,
|
||||
reminder.uid
|
||||
)
|
||||
.execute(pool.inner())
|
||||
.await
|
||||
{
|
||||
Ok(_) => {
|
||||
json!({})
|
||||
}
|
||||
Err(e) => {
|
||||
warn!("Error in `overwrite_reminder`: {:?}", e);
|
||||
|
||||
json!({"error": "Could not modify reminder"})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[delete("/api/user/reminders", data = "<reminder>")]
|
||||
pub async fn delete_reminder(
|
||||
reminder: Json<DeleteReminder>,
|
||||
pool: &State<Pool<MySql>>,
|
||||
) -> JsonValue {
|
||||
if sqlx::query!("DELETE FROM reminders WHERE uid = ?", reminder.uid)
|
||||
.execute(pool.inner())
|
||||
.await
|
||||
.is_ok()
|
||||
{
|
||||
json!({})
|
||||
} else {
|
||||
json!({"error": "Could not delete reminder"})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user