use chrono::Utc; use serde::Deserialize; use uuid::Uuid; #[derive(Debug, Clone, PartialEq, Eq, sqlx::Type)] #[sqlx(rename_all = "lowercase")] #[sqlx(type_name = "TEXT")] pub enum PostgresRole { User, Admin, } #[derive(Debug, Clone, PartialEq, Eq, sqlx::Type)] #[sqlx(rename_all = "lowercase")] #[sqlx(type_name = "TEXT")] pub enum PostgresMediaMetadataSource { Exif, TrackInfo, } #[derive(sqlx::FromRow)] pub struct PostgresUser { pub id: Uuid, pub username: String, pub email: String, pub hashed_password: String, pub created_at: chrono::DateTime, pub updated_at: chrono::DateTime, pub role: String, pub storage_quota: i64, pub storage_used: i64, } #[derive(sqlx::FromRow)] pub struct PostgresAlbum { pub id: uuid::Uuid, pub owner_id: uuid::Uuid, pub name: String, pub description: Option, pub is_public: bool, pub created_at: chrono::DateTime, pub updated_at: chrono::DateTime, } #[derive(sqlx::FromRow)] pub struct PostgresMedia { pub id: uuid::Uuid, pub owner_id: uuid::Uuid, pub storage_path: String, pub original_filename: String, pub mime_type: String, pub hash: String, pub created_at: chrono::DateTime, pub thumbnail_path: Option, pub date_taken: Option>, } #[derive(sqlx::FromRow)] pub struct PostgresMediaMetadata { pub id: uuid::Uuid, pub media_id: uuid::Uuid, pub source: String, pub tag_name: String, pub tag_value: String, } #[derive(Debug, Clone, Copy, sqlx::Type, PartialEq, Eq, Deserialize)] #[sqlx(rename_all = "lowercase")] #[sqlx(type_name = "album_permission")] pub enum PostgresAlbumPermission { View, Contribute, } pub struct PostgresAlbumShare { pub album_id: uuid::Uuid, pub user_id: uuid::Uuid, pub permission: PostgresAlbumPermission, } #[derive(sqlx::FromRow)] pub struct PostgresTag { pub id: uuid::Uuid, pub name: String, } #[derive(sqlx::FromRow)] pub struct PostgresPerson { pub id: uuid::Uuid, pub owner_id: uuid::Uuid, pub name: String, } #[derive(sqlx::FromRow)] pub struct PostgresFaceRegion { pub id: uuid::Uuid, pub media_id: uuid::Uuid, pub person_id: Option, pub x_min: f32, pub y_min: f32, pub x_max: f32, pub y_max: f32, } #[derive(Debug, Clone, Copy, sqlx::Type, PartialEq, Eq, Deserialize)] #[sqlx(rename_all = "lowercase")] #[sqlx(type_name = "person_permission")] pub enum PostgresPersonPermission { View, CanUse, } #[derive(sqlx::FromRow)] pub struct PostgresPersonShared { pub id: Uuid, pub owner_id: Uuid, pub name: String, pub permission: PostgresPersonPermission, } #[derive(sqlx::FromRow)] pub struct PostgresFaceEmbedding { pub id: Uuid, pub face_region_id: Uuid, pub model_id: i16, pub embedding: Vec, }