115 lines
3 KiB
Rust
115 lines
3 KiB
Rust
pub mod message;
|
|
|
|
// Ré-exporter les modèles existants
|
|
use chrono::{DateTime, Utc};
|
|
use serde::{Deserialize, Serialize};
|
|
use sqlx::FromRow;
|
|
use std::fmt;
|
|
use uuid::Uuid;
|
|
|
|
/// Utilisateur du système
|
|
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
|
|
pub struct User {
|
|
pub id: Uuid,
|
|
pub username: String,
|
|
pub email: String,
|
|
pub display_name: Option<String>,
|
|
pub avatar_url: Option<String>,
|
|
pub is_active: bool,
|
|
pub last_seen: Option<DateTime<Utc>>,
|
|
pub created_at: DateTime<Utc>,
|
|
pub updated_at: DateTime<Utc>,
|
|
}
|
|
|
|
/// Conversation (DM ou Room)
|
|
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
|
|
pub struct Conversation {
|
|
pub id: Uuid,
|
|
pub name: Option<String>,
|
|
pub description: Option<String>,
|
|
pub conversation_type: ConversationType,
|
|
pub is_private: bool,
|
|
pub created_by: Uuid,
|
|
pub created_at: DateTime<Utc>,
|
|
pub updated_at: DateTime<Utc>,
|
|
}
|
|
|
|
/// Type de conversation
|
|
#[derive(Debug, Clone, Serialize, Deserialize, sqlx::Type)]
|
|
#[sqlx(type_name = "conversation_type")]
|
|
pub enum ConversationType {
|
|
#[sqlx(rename = "dm")]
|
|
DirectMessage,
|
|
#[sqlx(rename = "room")]
|
|
Room,
|
|
}
|
|
|
|
impl fmt::Display for ConversationType {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
match self {
|
|
ConversationType::DirectMessage => write!(f, "dm"),
|
|
ConversationType::Room => write!(f, "room"),
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Membre d'une conversation
|
|
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
|
|
pub struct ConversationMember {
|
|
pub conversation_id: Uuid,
|
|
pub user_id: Uuid,
|
|
pub role: MemberRole,
|
|
pub joined_at: DateTime<Utc>,
|
|
pub last_read_at: Option<DateTime<Utc>>,
|
|
}
|
|
|
|
/// Rôle d'un membre
|
|
#[derive(Debug, Clone, Serialize, Deserialize, sqlx::Type)]
|
|
#[sqlx(type_name = "member_role")]
|
|
pub enum MemberRole {
|
|
#[sqlx(rename = "member")]
|
|
Member,
|
|
#[sqlx(rename = "moderator")]
|
|
Moderator,
|
|
#[sqlx(rename = "admin")]
|
|
Admin,
|
|
#[sqlx(rename = "owner")]
|
|
Owner,
|
|
}
|
|
|
|
impl fmt::Display for MemberRole {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
match self {
|
|
MemberRole::Member => write!(f, "member"),
|
|
MemberRole::Moderator => write!(f, "moderator"),
|
|
MemberRole::Admin => write!(f, "admin"),
|
|
MemberRole::Owner => write!(f, "owner"),
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Réaction à un message
|
|
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
|
|
pub struct MessageReaction {
|
|
pub id: Uuid,
|
|
pub message_id: Uuid,
|
|
pub user_id: Uuid,
|
|
pub emoji: String,
|
|
pub created_at: DateTime<Utc>,
|
|
}
|
|
|
|
/// Session utilisateur
|
|
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
|
|
pub struct UserSession {
|
|
pub id: Uuid,
|
|
pub user_id: Uuid,
|
|
pub token_hash: String,
|
|
pub expires_at: DateTime<Utc>,
|
|
pub created_at: DateTime<Utc>,
|
|
pub last_used_at: Option<DateTime<Utc>>,
|
|
pub user_agent: Option<String>,
|
|
pub ip_address: Option<String>,
|
|
}
|
|
|
|
// Ré-exporter le nouveau modèle Message
|
|
pub use message::{Message, MessageType};
|