use chrono::{DateTime, Utc}; use sqlx::PgPool; use uuid::Uuid; #[derive(Debug, sqlx::FromRow)] pub struct Event { pub id: Uuid, pub slug: String, pub name: String, pub cover_image_path: Option, pub is_active: bool, pub uploads_locked_at: Option>, pub export_released_at: Option>, pub export_zip_ready: bool, pub export_html_ready: bool, pub created_at: DateTime, } impl Event { pub async fn find_by_slug(pool: &PgPool, slug: &str) -> Result, sqlx::Error> { sqlx::query_as::<_, Self>("SELECT * FROM event WHERE slug = $1") .bind(slug) .fetch_optional(pool) .await } pub async fn create(pool: &PgPool, slug: &str, name: &str) -> Result { sqlx::query_as::<_, Self>( "INSERT INTO event (slug, name) VALUES ($1, $2) RETURNING *", ) .bind(slug) .bind(name) .fetch_one(pool) .await } pub async fn find_or_create( pool: &PgPool, slug: &str, name: &str, ) -> Result { if let Some(event) = Self::find_by_slug(pool, slug).await? { return Ok(event); } Self::create(pool, slug, name).await } }