use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use models::{ProjectId, RoomCategoryId, RoomId, UserId, Uuid}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum RoomEventType { Created, Deleted, Renamed, TopicUpdated, SettingsUpdated, Moved, AiUpdated, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum RoomEvent { Created(RoomCreatedService), Deleted(RoomDeletedService), Renamed(RoomRenamedService), TopicUpdated(RoomTopicUpdatedService), SettingsUpdated(RoomSettingsUpdatedService), Moved(RoomMovedService), AiUpdated(RoomAiUpdatedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomCreatedService { pub id: RoomId, pub project: ProjectId, pub room_name: String, pub public: bool, pub category: Option, pub created_by: UserId, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomDeletedService { pub id: RoomId, pub project: ProjectId, pub deleted_by: UserId, pub deleted_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomRenamedService { pub id: RoomId, pub project: ProjectId, pub old_name: String, pub new_name: String, pub renamed_by: UserId, pub renamed_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomMovedService { pub id: RoomId, pub project: ProjectId, pub old_category: Option, pub new_category: Option, pub moved_by: UserId, pub moved_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomAiUpdatedService { pub id: RoomId, pub model: Uuid, pub model_name: Option, pub version: Option, pub agent_type: Option, pub updated_by: UserId, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomTopicUpdatedService { pub id: RoomId, pub project: ProjectId, pub old_topic: Option, pub new_topic: Option, pub updated_by: UserId, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RoomSettingsUpdatedService { pub id: RoomId, pub project: ProjectId, pub slowmode_seconds: Option, pub nsfw: Option, pub default_auto_archive_duration: Option, pub updated_by: UserId, pub updated_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct RoomCreateClient { pub project: ProjectId, pub room_name: String, #[serde(rename = "room_public")] pub public: bool, pub category: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct RoomUpdateClient { pub room_name: Option, #[serde(rename = "room_public")] pub public: Option, pub category: Option, pub topic: Option, pub slowmode_seconds: Option, pub nsfw: Option, pub default_auto_archive_duration: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct RoomDeleteClient {} #[derive(Debug, Clone, Deserialize, Serialize)] pub struct RoomLoadClient { pub room: RoomId, }