Added a route for importing templates
This commit is contained in:
		@@ -6,9 +6,12 @@ use rocket::{
 | 
			
		||||
    serde::json::{json, Json},
 | 
			
		||||
    State,
 | 
			
		||||
};
 | 
			
		||||
use serenity::all::GuildId;
 | 
			
		||||
use serenity::client::Context;
 | 
			
		||||
use sqlx::{MySql, Pool};
 | 
			
		||||
 | 
			
		||||
use crate::web::guards::transaction::Transaction;
 | 
			
		||||
use crate::web::routes::dashboard::create_reminder_template;
 | 
			
		||||
use crate::web::{
 | 
			
		||||
    check_authorization,
 | 
			
		||||
    consts::{
 | 
			
		||||
@@ -49,109 +52,32 @@ pub async fn get_reminder_templates(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[post("/api/guild/<id>/templates", data = "<reminder_template>")]
 | 
			
		||||
pub async fn create_reminder_template(
 | 
			
		||||
pub async fn create_guild_reminder_template(
 | 
			
		||||
    id: u64,
 | 
			
		||||
    reminder_template: Json<ReminderTemplate>,
 | 
			
		||||
    cookies: &CookieJar<'_>,
 | 
			
		||||
    ctx: &State<Context>,
 | 
			
		||||
    pool: &State<Pool<MySql>>,
 | 
			
		||||
    mut transaction: Transaction<'_>,
 | 
			
		||||
) -> JsonResult {
 | 
			
		||||
    check_authorization(cookies, ctx.inner(), id).await?;
 | 
			
		||||
 | 
			
		||||
    // validate lengths
 | 
			
		||||
    check_length!(MAX_CONTENT_LENGTH, reminder_template.content);
 | 
			
		||||
    check_length!(MAX_EMBED_DESCRIPTION_LENGTH, reminder_template.embed_description);
 | 
			
		||||
    check_length!(MAX_EMBED_TITLE_LENGTH, reminder_template.embed_title);
 | 
			
		||||
    check_length!(MAX_EMBED_AUTHOR_LENGTH, reminder_template.embed_author);
 | 
			
		||||
    check_length!(MAX_EMBED_FOOTER_LENGTH, reminder_template.embed_footer);
 | 
			
		||||
    check_length_opt!(MAX_EMBED_FIELDS, reminder_template.embed_fields);
 | 
			
		||||
    if let Some(fields) = &reminder_template.embed_fields {
 | 
			
		||||
        for field in &fields.0 {
 | 
			
		||||
            check_length!(MAX_EMBED_FIELD_VALUE_LENGTH, field.value);
 | 
			
		||||
            check_length!(MAX_EMBED_FIELD_TITLE_LENGTH, field.title);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    check_length_opt!(MAX_USERNAME_LENGTH, reminder_template.username);
 | 
			
		||||
    check_length_opt!(
 | 
			
		||||
        MAX_URL_LENGTH,
 | 
			
		||||
        reminder_template.embed_footer_url,
 | 
			
		||||
        reminder_template.embed_thumbnail_url,
 | 
			
		||||
        reminder_template.embed_author_url,
 | 
			
		||||
        reminder_template.embed_image_url,
 | 
			
		||||
        reminder_template.avatar
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // validate urls
 | 
			
		||||
    check_url_opt!(
 | 
			
		||||
        reminder_template.embed_footer_url,
 | 
			
		||||
        reminder_template.embed_thumbnail_url,
 | 
			
		||||
        reminder_template.embed_author_url,
 | 
			
		||||
        reminder_template.embed_image_url,
 | 
			
		||||
        reminder_template.avatar
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    let name = if reminder_template.name.is_empty() {
 | 
			
		||||
        template_name_default()
 | 
			
		||||
    } else {
 | 
			
		||||
        reminder_template.name.clone()
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    match sqlx::query!(
 | 
			
		||||
        "INSERT INTO reminder_template
 | 
			
		||||
        (guild_id,
 | 
			
		||||
         name,
 | 
			
		||||
         attachment,
 | 
			
		||||
         attachment_name,
 | 
			
		||||
         avatar,
 | 
			
		||||
         content,
 | 
			
		||||
         embed_author,
 | 
			
		||||
         embed_author_url,
 | 
			
		||||
         embed_color,
 | 
			
		||||
         embed_description,
 | 
			
		||||
         embed_footer,
 | 
			
		||||
         embed_footer_url,
 | 
			
		||||
         embed_image_url,
 | 
			
		||||
         embed_thumbnail_url,
 | 
			
		||||
         embed_title,
 | 
			
		||||
         embed_fields,
 | 
			
		||||
         interval_seconds,
 | 
			
		||||
         interval_days,
 | 
			
		||||
         interval_months,
 | 
			
		||||
         tts,
 | 
			
		||||
         username
 | 
			
		||||
        ) VALUES ((SELECT id FROM guilds WHERE guild = ?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
 | 
			
		||||
         ?, ?, ?, ?, ?, ?, ?)",
 | 
			
		||||
        id,
 | 
			
		||||
        name,
 | 
			
		||||
        reminder_template.attachment,
 | 
			
		||||
        reminder_template.attachment_name,
 | 
			
		||||
        reminder_template.avatar,
 | 
			
		||||
        reminder_template.content,
 | 
			
		||||
        reminder_template.embed_author,
 | 
			
		||||
        reminder_template.embed_author_url,
 | 
			
		||||
        reminder_template.embed_color,
 | 
			
		||||
        reminder_template.embed_description,
 | 
			
		||||
        reminder_template.embed_footer,
 | 
			
		||||
        reminder_template.embed_footer_url,
 | 
			
		||||
        reminder_template.embed_image_url,
 | 
			
		||||
        reminder_template.embed_thumbnail_url,
 | 
			
		||||
        reminder_template.embed_title,
 | 
			
		||||
        reminder_template.embed_fields,
 | 
			
		||||
        reminder_template.interval_seconds,
 | 
			
		||||
        reminder_template.interval_days,
 | 
			
		||||
        reminder_template.interval_months,
 | 
			
		||||
        reminder_template.tts,
 | 
			
		||||
        reminder_template.username,
 | 
			
		||||
    match create_reminder_template(
 | 
			
		||||
        ctx.inner(),
 | 
			
		||||
        &mut transaction,
 | 
			
		||||
        GuildId::new(id),
 | 
			
		||||
        reminder_template.into_inner(),
 | 
			
		||||
    )
 | 
			
		||||
    .fetch_all(pool.inner())
 | 
			
		||||
    .await
 | 
			
		||||
    {
 | 
			
		||||
        Ok(_) => Ok(json!({})),
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            warn!("Could not create template for {}: {:?}", id, e);
 | 
			
		||||
        Ok(r) => match transaction.commit().await {
 | 
			
		||||
            Ok(_) => Ok(r),
 | 
			
		||||
            Err(e) => {
 | 
			
		||||
                warn!("Couldn't commit transaction: {:?}", e);
 | 
			
		||||
                json_err!("Couldn't commit transaction.")
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
            json_err!("Could not create template")
 | 
			
		||||
        }
 | 
			
		||||
        Err(e) => Err(e),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user