use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::event::{RoomInfo, UserInfo, WorkspaceInfo}; #[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")] pub enum NotifyEvent { #[serde(rename = "notify.created")] Created(NotifyCreatedService), #[serde(rename = "notify.read")] Read(NotifyReadService), #[serde(rename = "notify.archived")] Archived(NotifyArchivedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyCreatedService { pub id: Uuid, pub room: Option, pub workspace: Option, pub user: UserInfo, pub notification_type: String, pub title: String, pub content: Option, pub related_message_id: Option, pub related_user: Option, pub metadata: Option, pub created_at: DateTime, pub deep_link_url: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyReadService { pub id: Uuid, pub user: UserInfo, pub read_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyArchivedService { pub id: Uuid, pub user: UserInfo, pub archived_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyReadClient { pub id: Uuid, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyReadAllClient { pub workspace: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NotifyArchiveClient { pub id: Uuid, }