Skip to main content

📱 Announcements

📋 Vue d'ensemble​

Le module Announcements gĂšre toutes les annonces du systĂšme pour les administrateurs. Il utilise NATS pour la communication inter-microservices avec la queue admin-service.

đŸ—ïž Architecture​

  • Queue NATS : admin-service
  • Patterns : announcements.*
  • Upload d'images : IntĂ©grĂ© avec validation
  • OpĂ©rations en lot : Actions groupĂ©es
  • Cache : Architecture prĂȘte pour Redis

📡 Message Patterns NATS​

1. Lister les Annonces​

Pattern : announcements.all

Payload (AnnouncementQueryDto)​

{
"page": 1,
"limit": 10,
"status": "PUBLISHED",
"categoryId": 1,
"search": "nouvelle fonctionnalité",
"sortBy": "createdAt",
"sortOrder": "desc"
}

Filtres Disponibles​

FiltreTypeDescription
statusStringStatut de l'annonce (DRAFT, PUBLISHED, ARCHIVED, DELETED)
categoryIdNumberID de la catégorie (pour usage futur)
searchStringRecherche dans le titre et le contenu
sortByStringChamp de tri (createdAt, title, etc.)
sortOrderStringOrdre de tri (asc, desc)

2. DĂ©tails d'une Annonce​

Pattern : announcements.details

Payload​

{
"id": "announcement-uuid"
}

3. CrĂ©er une Annonce​

Pattern : announcements.create

Option 1 : Avec URL d'image existante​

{
"title": "Nouvelle fonctionnalité disponible",
"content": "Nous sommes heureux d'annoncer le lancement de notre nouvelle fonctionnalité...",
"image": "/uploads/announcements/existing-image.jpg",
"status": "DRAFT",
"categoryId": 1
}

Option 2 : Avec upload d'image intĂ©gré​

{
"title": "Nouvelle fonctionnalité disponible",
"content": "Nous sommes heureux d'annoncer le lancement de notre nouvelle fonctionnalité...",
"status": "DRAFT",
"categoryId": 1,
"imageData": {
"fileName": "announcement-image.jpg",
"fileType": "image/jpeg",
"base64Data": "/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
}

Champs Obligatoires​

  • title : Titre de l'annonce
  • content : Contenu de l'annonce

Champs Optionnels​

  • image : URL ou chemin vers une image existante
  • imageData : DonnĂ©es pour upload d'une nouvelle image
  • status : Statut (dĂ©faut: DRAFT)
  • categoryId : CatĂ©gorie (pour usage futur)

Note : Si imageData est fourni, l'image sera automatiquement sauvegardée et image sera ignoré.

4. Mettre à jour une Annonce​

Pattern : announcements.update

Option 1 : Mise à jour simple​

{
"id": "announcement-uuid",
"updateData": {
"title": "Titre mis Ă  jour",
"content": "Contenu mis Ă  jour",
"status": "PUBLISHED"
}
}

Option 2 : Avec changement d'image​

{
"id": "announcement-uuid",
"updateData": {
"title": "Titre mis Ă  jour",
"content": "Contenu mis Ă  jour",
"imageData": {
"fileName": "new-image.jpg",
"fileType": "image/jpeg",
"base64Data": "/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
}
}

Note : Si imageData est fourni, l'ancienne image sera automatiquement supprimée et remplacée.

5. Supprimer une Annonce​

Pattern : announcements.delete

Payload​

{
"id": "announcement-uuid"
}

Note : Suppression logique (soft delete) - le statut devient DELETED.

6. Publier/DĂ©publier une Annonce​

Pattern : announcements.publish

Payload​

{
"id": "announcement-uuid",
"publishData": {
"status": "PUBLISHED"
}
}

Statuts Disponibles​

  • PUBLISHED : Publier l'annonce
  • DRAFT : DĂ©publier l'annonce

7. OpĂ©rations en Lot​

Pattern : announcements.bulk-action

Payload​

{
"ids": ["uuid1", "uuid2", "uuid3"],
"action": "publish"
}

Actions Disponibles​

  • publish : Publier les annonces sĂ©lectionnĂ©es
  • unpublish : DĂ©publier les annonces sĂ©lectionnĂ©es
  • archive : Archiver les annonces sĂ©lectionnĂ©es
  • delete : Supprimer les annonces sĂ©lectionnĂ©es

8. Statistiques des Annonces​

Pattern : announcements.stats

Payload​

{}

RĂ©ponse​

{
"success": true,
"message": "Announcement statistics retrieved successfully",
"result": {
"totalAnnouncements": 50,
"publishedAnnouncements": 30,
"draftAnnouncements": 15,
"archivedAnnouncements": 3,
"deletedAnnouncements": 2,
"announcementsByStatus": [
{"status": "PUBLISHED", "count": 30},
{"status": "DRAFT", "count": 15}
],
"recentAnnouncements": [
{
"id": 1,
"publicId": "uuid",
"title": "DerniĂšre annonce",
"content": "Contenu...",
"status": "PUBLISHED",
"createdAt": "2024-01-15T10:00:00Z"
}
]
}
}

📊 Enums et Statuts​

Statuts d'Annonce (AnnouncementStatus)​

enum AnnouncementStatus {
DRAFT = 'DRAFT', // Brouillon
PUBLISHED = 'PUBLISHED', // Publié
ARCHIVED = 'ARCHIVED', // Archivé
DELETED = 'DELETED' // Supprimé
}
StatutDescriptionActions Possibles
DRAFTBrouillon en cours de rédactionPublier, Modifier, Supprimer
PUBLISHEDAnnonce visible publiquementDépublier, Archiver, Modifier
ARCHIVEDAnnonce archivéeRepublier, Supprimer
DELETEDAnnonce suppriméeRestaurer

🚀 FonctionnalitĂ©s AvancĂ©es​

1. Gestion des Images​

  • Upload sĂ©curisĂ© : Validation du type de fichier (JPG, PNG, GIF, WebP)
  • Limite de taille : 5MB maximum
  • Stockage local : Fichiers sauvĂ©s dans /uploads/announcements/
  • Noms uniques : UUID pour Ă©viter les conflits
  • Support Base64 : Upload direct depuis le frontend
  • Gestion automatique : Suppression des anciennes images lors des mises Ă  jour

2. OpĂ©rations en Lot​

  • SĂ©lection multiple : Actions sur plusieurs annonces
  • Actions groupĂ©es : Publier, archiver, supprimer en une fois
  • Retour dĂ©taillĂ© : Nombre d'Ă©lĂ©ments affectĂ©s
  • Validation : VĂ©rification avant exĂ©cution
  • Rollback : Annulation en cas d'erreur

3. Recherche et Filtrage​

  • Recherche textuelle : Dans titre et contenu
  • Filtres par statut : Affichage conditionnel
  • Tri personnalisĂ© : Par date, titre, etc.
  • Pagination : Performance optimisĂ©e
  • Cache intelligent : RĂ©duction des accĂšs DB

💡 Exemples d'Utilisation​

CrĂ©er une Annonce avec Image​

{
"title": "Mise Ă  jour importante du systĂšme",
"content": "Nous avons déployé une mise à jour majeure qui améliore les performances...",
"status": "DRAFT",
"imageData": {
"fileName": "update-banner.jpg",
"fileType": "image/jpeg",
"base64Data": "data:image/jpeg;base64,/9j/4AAQ..."
}
}

Publication en Lot​

{
"ids": ["ann-001", "ann-002", "ann-003"],
"action": "publish"
}

Recherche d'Annonces​

{
"page": 1,
"limit": 20,
"search": "maintenance",
"status": "PUBLISHED",
"sortBy": "createdAt",
"sortOrder": "desc"
}

🎯 Le module Announcements offre une gestion complĂšte des annonces avec upload d'images, opĂ©rations en lot et recherche avancĂ©e pour une communication efficace avec les utilisateurs.