use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use models::{ProjectId, Uuid}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum NotifyEventType { Created, Read, Archived, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum NotifyEvent { Created(NotifyCreatedService), Read(NotifyReadService), Archived(NotifyArchivedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyCreatedService { pub id: Uuid, pub room: Option, pub project: Option, pub user_id: Option, pub notification_type: String, pub title: String, pub content: Option, pub related_message_id: Option, pub related_user_id: Option, pub related_room_id: Option, pub metadata: serde_json::Value, pub created_at: DateTime, pub deep_link_url: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyReadService { pub id: Uuid, pub user_id: Option, pub read_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyArchivedService { pub id: Uuid, pub user_id: Option, pub archived_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct NotifyReadClient { pub id: Uuid, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct NotifyReadAllClient { pub project_id: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct NotifyArchiveClient { pub id: Uuid, }