Alternative ATProto PDS implementation

add db moderation table defs

Changed files
+74
src
+1
src/db/mod.rs
··· 2 2 mod db; 3 3 mod migrator; 4 4 mod pagination; 5 + mod tables; 5 6 mod util;
+1
src/db/tables/mod.rs
··· 1 + mod moderation;
+72
src/db/tables/moderation.rs
··· 1 + //! Moderation-related database table definitions. 2 + 3 + use serde::{Deserialize, Serialize}; 4 + use sqlx::FromRow; 5 + 6 + /// Table names for moderation-related entities. 7 + pub const ACTION_TABLE_NAME: &str = "moderation_action"; 8 + pub const ACTION_SUBJECT_BLOB_TABLE_NAME: &str = "moderation_action_subject_blob"; 9 + pub const REPORT_TABLE_NAME: &str = "moderation_report"; 10 + pub const REPORT_RESOLUTION_TABLE_NAME: &str = "moderation_report_resolution"; 11 + 12 + /// Represents a moderation action. 13 + #[derive(Debug, Clone, Serialize, Deserialize, FromRow)] 14 + #[sqlx(rename_all = "camelCase")] 15 + pub struct ModerationAction { 16 + pub id: i32, // Auto-generated ID 17 + pub action: String, 18 + pub subject_type: String, 19 + pub subject_did: String, 20 + pub subject_uri: Option<String>, 21 + pub subject_cid: Option<String>, 22 + pub create_label_vals: Option<String>, 23 + pub negate_label_vals: Option<String>, 24 + pub comment: Option<String>, 25 + pub created_at: String, 26 + pub created_by: String, 27 + pub duration_in_hours: Option<i32>, 28 + pub expires_at: Option<String>, 29 + pub meta: Option<std::collections::HashMap<String, serde_json::Value>>, 30 + } 31 + 32 + /// Represents a subject blob associated with a moderation action. 33 + #[derive(Debug, Clone, Serialize, Deserialize, FromRow)] 34 + #[sqlx(rename_all = "camelCase")] 35 + pub struct ModerationActionSubjectBlob { 36 + pub action_id: i32, 37 + pub cid: String, 38 + pub record_uri: String, 39 + } 40 + 41 + /// Represents a moderation report. 42 + #[derive(Debug, Clone, Serialize, Deserialize, FromRow)] 43 + #[sqlx(rename_all = "camelCase")] 44 + pub struct ModerationReport { 45 + pub id: i32, // Auto-generated ID 46 + pub subject_type: String, 47 + pub subject_did: String, 48 + pub subject_uri: Option<String>, 49 + pub subject_cid: Option<String>, 50 + pub reason_type: String, 51 + pub reason: Option<String>, 52 + pub reported_by_did: String, 53 + pub created_at: String, 54 + } 55 + 56 + /// Represents a resolution for a moderation report. 57 + #[derive(Debug, Clone, Serialize, Deserialize, FromRow)] 58 + #[sqlx(rename_all = "camelCase")] 59 + pub struct ModerationReportResolution { 60 + pub report_id: i32, 61 + pub action_id: i32, 62 + pub created_at: String, 63 + pub created_by: String, 64 + } 65 + 66 + /// Represents a partial database schema for moderation-related tables. 67 + pub struct PartialDB { 68 + pub moderation_action: Vec<ModerationAction>, 69 + pub moderation_action_subject_blob: Vec<ModerationActionSubjectBlob>, 70 + pub moderation_report: Vec<ModerationReport>, 71 + pub moderation_report_resolution: Vec<ModerationReportResolution>, 72 + }