use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use models::{ProjectId, RoomCategoryId, Uuid}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum ProjectEventType { RoomCreated, RoomDeleted, RoomRenamed, RoomMoved, RepoCreated, RepoUpdated, RepoDeleted, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum ProjectEvent { RoomCreated(ProjectRoomCreatedService), RoomDeleted(ProjectRoomDeletedService), RoomRenamed(ProjectRoomRenamedService), RoomMoved(ProjectRoomMovedService), RepoCreated(ProjectRepoCreatedService), RepoUpdated(ProjectRepoUpdatedService), RepoDeleted(ProjectRepoDeletedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRoomCreatedService { pub project: ProjectId, pub room: Uuid, pub room_name: String, pub public: bool, pub category: Option, pub created_by: Uuid, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRoomDeletedService { pub project: ProjectId, pub room: Uuid, pub deleted_by: Uuid, pub deleted_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRoomRenamedService { pub project: ProjectId, pub room: Uuid, pub old_name: String, pub new_name: String, pub renamed_by: Uuid, pub renamed_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRoomMovedService { pub project: ProjectId, pub room: Uuid, pub old_category: Option, pub new_category: Option, pub moved_by: Uuid, pub moved_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRepoCreatedService { pub project: ProjectId, pub repo: Uuid, pub repo_name: String, pub created_by: Uuid, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRepoUpdatedService { pub project: ProjectId, pub repo: Uuid, pub updated_by: Uuid, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRepoDeletedService { pub project: ProjectId, pub repo: Uuid, pub deleted_by: Uuid, pub deleted_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ProjectRoomCreateClient { pub project: ProjectId, pub room_name: String, #[serde(rename = "room_public")] pub public: bool, pub category: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ProjectRoomUpdateClient { pub room: Uuid, pub room_name: Option, #[serde(rename = "room_public")] pub public: Option, pub category: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ProjectRoomDeleteClient { pub room: Uuid, }