use async_trait::async_trait;
use sqlx::{sqlite::SqliteRow, Row};
use super::types::{
AnnouncementListQuery, AnnouncementReadRepository, AnnouncementWriteRepository,
CreateAnnouncementRecord, StoredAnnouncement, StoredAnnouncementPage, UpdateAnnouncementRecord,
};
use crate::driver::sqlite::SqlitePool;
use crate::error::SqlResultExt;
use crate::DataLayerError;
const ANNOUNCEMENT_SELECT: &str = r#"
SELECT
a.id,
a.title,
a.content,
a.type,
a.priority,
a.is_active,
a.is_pinned,
a.author_id,
u.username AS author_username,
a.start_time AS start_time_unix_secs,
a.end_time AS end_time_unix_secs,
a.created_at AS created_at_unix_ms,
a.updated_at AS updated_at_unix_secs
FROM announcements a
LEFT JOIN users u ON u.id = a.author_id
"#;
#[derive(Debug, Clone)]
pub struct SqliteAnnouncementRepository {
pool: SqlitePool,
}
impl SqliteAnnouncementRepository {
pub fn new(pool: SqlitePool) -> Self {
Self { pool }
}
async fn reload_by_id(
&self,
announcement_id: &str,
) -> Result