use std::fs; use std::path::Path; use crate::db::DbConnection as Connection; use crate::db::schema::{posts, tags}; use diesel::prelude::*; use uuid::Uuid; use crate::db::queries::template as qt; use crate::engine::{EngineError, EngineResult, domain_events}; use crate::model::{DomainEntity, NotificationAction, Template, TemplateKind, TemplateStatus}; use crate::util::frontmatter::{TemplateFrontmatter, write_template_file}; use crate::util::{atomic_write_str, ensure_unique, now_unix_ms, slugify}; const ALLOWED_LIQUID_TAGS: &[&str] = &[ "if", "elsif", "else", "endif", "for", "endfor", "assign", "render", ]; const ALLOWED_LIQUID_FILTERS: &[&str] = &[ "escape", "url_encode", "default", "append", "i18n", "markdown", "slugify", ]; /// Create a new draft template. Content stored in DB, no file written. pub fn create_template( conn: &Connection, project_id: &str, title: &str, kind: TemplateKind, content: &str, ) -> EngineResult