Système de Canaux et Chat

Cette section détaille le système de canaux et de chat qui permet la communication en temps réel entre les utilisateurs. Le système supporte les canaux publics, privés, et les canaux de partie auto-créés.

ChannelService (channel.service.ts)

Service qui gère les canaux de chat avec persistance MongoDB.

Propriétés

Méthodes principales

constructor(dbClient: MongoClient, dbName: string)

Description : Initialise le service avec la connexion MongoDB.
Paramètres :

async createChannel(name: string, owner: string, users: string[])

Description : Crée un nouveau canal de chat.
Paramètres :

Validation :

Retour : Promise<Channel>

async getChannelByName(name: string)

Description : Récupère un canal par son nom.
Retour : Promise<Channel | null>

async getChannelById(channelId: string)

Description : Récupère un canal par son ID.
Retour : Promise<Channel | null>

async getUserChannels(firebaseUid: string)

Description : Récupère tous les canaux d'un utilisateur.
Retour : Promise<Channel[]>

async searchChannels(searchTerm: string, firebaseUid: string)

Description : Recherche des canaux disponibles.
Paramètres :

Retour : Promise<Channel[]> (canaux publics ou canaux de l'utilisateur)

async addUserToChannel(channelId: string, firebaseUid: string)

Description : Ajoute un utilisateur à un canal.
Retour : Promise<void>

async removeUserFromChannel(channelId: string, firebaseUid: string)

Description : Retire un utilisateur d'un canal.
Protection : Canal général non quittable
Retour : Promise<void>

async addMessage(channelId: string, author: string, content: string)

Description : Ajoute un message au canal.
Paramètres :

Actions :

Retour : Promise<void>

async getMessages(channelId: string)

Description : Récupère les messages d'un canal.
Limite : 50 derniers messages
Retour : Promise<ChannelMessage[]>

async deleteChannel(channelId: string)

Description : Supprime un canal.
Protection : Canal général et canaux de partie non supprimables
Retour : Promise<void>

async deletePartyChannel(gameCode: string)

Description : Supprime un canal de partie.
Paramètres :

Retour : Promise<void>

async createPartyChannel(gameCode: string, players: string[])

Description : Crée un canal de partie automatiquement.
Paramètres :

Propriétés du canal :

Retour : Promise<void>

async getActiveChannelParticipantsFormatted(channelId: string)

Description : Récupère les participants actifs d'un canal avec leurs informations.
Retour : Promise<ParticipantInfo[]> (username, avatar, etc.)

ChatSocketService (chat-socket.service.ts)

Service qui gère les événements Socket.IO pour le chat et les canaux.

Propriétés

Méthodes principales

constructor(...)

Description : Initialise le service avec toutes les dépendances.
Services injectés :

handleSocket(socket: Socket): void

Description : Configure les gestionnaires d'événements pour le chat.
Événements écoutés :

Retour : void

private async handleSendMessage(socket: Socket, data: any)

Description : Gère l'envoi d'un message.
Flux :

  1. Validation session
  2. Validation permissions (membre du canal)
  3. Censure du contenu
  4. Ajout du message à MongoDB
  5. Émission chat:message-received à tous les membres du canal

Retour : Promise<void>

private async handleJoinChannel(socket: Socket, data: any)

Description : Gère la jointure d'un canal.
Actions :

  1. Validation du canal
  2. Ajout de l'utilisateur au canal
  3. Jointure de la room Socket.IO channel:{channelId}
  4. Notification aux autres membres

Retour : Promise<void>

private async handleLeaveChannel(socket: Socket, data: any)

Description : Gère la sortie d'un canal.
Protection : Impossible de quitter le canal général
Actions :

  1. Retrait de l'utilisateur du canal
  2. Leave de la room Socket.IO
  3. Notification aux membres restants

Retour : Promise<void>

private async handleCreateChannel(socket: Socket, data: any)

Description : Gère la création d'un canal.
Validation :

Actions :

  1. Création du canal dans MongoDB
  2. Ajout du créateur au canal
  3. Notification au créateur

Retour : Promise<void>

private async handleDeleteChannel(socket: Socket, data: any)

Description : Gère la suppression d'un canal.
Validation :

Actions :

  1. Suppression du canal de MongoDB
  2. Notification à tous les membres
  3. Leave des rooms Socket.IO

Retour : Promise<void>

MessageCensorshipService (message-censorship.service.ts)

Service qui filtre les mots inappropriés dans les messages.

Méthodes

censorMessage(message: string): string

Description : Censure les mots inappropriés dans un message.
Paramètres :

Logique :

Retour : string (message censuré)

Exemple :

Input: "Ce jeu est badword super"
Output: "Ce jeu est ******* super"

Modèle Channel (MongoDB)

{
    _id: ObjectId,
    name: string (unique),              // Nom du canal ou code de partie
    owner: string,                      // Firebase UID du propriétaire
    users: string[],                    // Firebase UIDs des participants
    messages: [{
        _id: ObjectId,
        author: string,                 // Firebase UID de l'auteur
        content: string,                // Texte ou URL GIF Tenor
        creationDate: Date
    }],
    isGeneral: boolean,                 // Canal général (défaut pour tous)
    isPartyChannel: boolean,            // Canal de partie (auto-géré)
    createdAt: Date,
    updatedAt: Date
}

Events Socket.IO

Events émis par le serveur

Event Description Destinataires
chat:message-received Nouveau message dans un canal Room channel:{channelId}
chat:channel-created Canal créé Créateur uniquement
chat:user-joined-channel Utilisateur a rejoint Room channel:{channelId}
chat:user-left-channel Utilisateur a quitté Room channel:{channelId}
chat:channel-deleted Canal supprimé Anciens membres
chat:channel-participants-updated Liste participants mise à jour Room channel:{channelId}
chat:user-should-leave-channel Forcer sortie d'un canal Utilisateur spécifique
chat:user-should-reload-channels Recharger liste des canaux Utilisateur spécifique

Events reçus par le serveur

Event Description Données requises
chat:send-message Envoyer un message channelId, content
chat:join-channel Rejoindre un canal channelId
chat:leave-channel Quitter un canal channelId
chat:create-channel Créer un canal name
chat:delete-channel Supprimer un canal channelId

Intégration avec d'autres systèmes

Canal Général

Canaux de Partie

Support GIFs Tenor

Censure de Messages

Sécurité

Validations

Limites