Aller au contenu principal

ICampagnesClient

Client pour la gestion des campagnes de vote dans MCM Votez.

public interface ICampagnesClient : IBaseClient

Méthodes

GetAllCampagnes

Récupère toutes les campagnes de votre organisation avec filtres optionnels.

Task<ErrorOr<IEnumerable<B2BCampagneItem>>> GetAllCampagnes(B2BCampagneSearchRequest? searchRequest = null)

Paramètres:

NomTypeDescription
searchRequestB2BCampagneSearchRequest?Filtres de recherche (optionnel)

Retour: Liste des campagnes correspondant aux critères.

Exemple:

// Récupérer toutes les campagnes
var result = await _campagnesClient.GetAllCampagnes();

if (result.IsError)
{
_logger.LogError("Erreur: {Error}", result.FirstError.Description);
return;
}

foreach (var campagne in result.Value)
{
Console.WriteLine($"{campagne.Titre} - {campagne.Etat}");
}

// Avec filtres
var searchRequest = new B2BCampagneSearchRequest
{
Etat = "VoteOuvert",
Titre = "Élection"
};

var filteredResult = await _campagnesClient.GetAllCampagnes(searchRequest);

GetCampagneById

Récupère une campagne par son identifiant.

Task<ErrorOr<B2BCampagneItem>> GetCampagneById(Guid id)

Paramètres:

NomTypeDescription
idGuidIdentifiant unique de la campagne

Retour: Informations complètes de la campagne.

Exemple:

var result = await _campagnesClient.GetCampagneById(campagneId);

if (result.IsError)
{
if (result.FirstError.Type == ErrorType.NotFound)
{
Console.WriteLine("Campagne non trouvée");
}
return;
}

var campagne = result.Value;
Console.WriteLine($"Campagne: {campagne.Titre}");
Console.WriteLine($"Votants: {campagne.NombreVotants}");
Console.WriteLine($"Questions: {campagne.NombreQuestions}");

GetCampagneStats

Récupère les statistiques agrégées d'une campagne. Accepte un filtre optionnel par syndicat.

Task<ErrorOr<B2BCampagneStatsItem>> GetCampagneStats(Guid id, string? syndicatIdExterne = null)

Paramètres:

NomTypeDescription
idGuidIdentifiant de la campagne
syndicatIdExternestring?Filtrer les compteurs par identifiant externe du syndicat (optionnel)

Retour: Statistiques de participation et résultats par question.

Filtre par syndicat

Le filtre syndicatIdExterne s'applique aux compteurs de votants (TotalVotants, TotalVotantsAvecDroitDeVote, VotantsAyantVote) mais pas aux résultats de vote par question, car les votes sont anonymes par design.

Exemple:

// Statistiques globales
var result = await _campagnesClient.GetCampagneStats(campagneId);

if (result.IsError)
{
_logger.LogError("Erreur: {Error}", result.FirstError.Description);
return;
}

var stats = result.Value;
Console.WriteLine($"Participation: {stats.TauxParticipation}%");
Console.WriteLine($"Votants: {stats.VotantsAyantVote}/{stats.TotalVotants}");
Console.WriteLine($"Avec droit de vote: {stats.TotalVotantsAvecDroitDeVote}");

foreach (var question in stats.Questions)
{
Console.WriteLine($"\n{question.Nom}: {question.TotalVotes} votes");
foreach (var option in question.Options)
{
Console.WriteLine($" - {option.Texte}: {option.Pourcentage}%");
}
}

// Statistiques filtrées par syndicat
var resultSyndicat = await _campagnesClient.GetCampagneStats(campagneId, "SYN-001");
var statsSyndicat = resultSyndicat.Value;
Console.WriteLine($"Syndicat SYN-001: {statsSyndicat.VotantsAyantVote}/{statsSyndicat.TotalVotants}");

AddCampagne

Crée une nouvelle campagne de vote.

Task<ErrorOr<Guid>> AddCampagne(B2BCreateCampagneDto toAdd)

Paramètres:

NomTypeDescription
toAddB2BCreateCampagneDtoDonnées de la campagne à créer

Retour: Identifiant de la campagne créée.

Exemple:

var nouvelleCampagne = new B2BCreateCampagneDto
{
Titre = "Élection du conseil 2025",
OuvertureDuVoteUtc = new DateTime(2025, 3, 1, 8, 0, 0, DateTimeKind.Utc),
FermetureDuVoteUtc = new DateTime(2025, 3, 15, 17, 0, 0, DateTimeKind.Utc),
TextePageAccueil = "<p>Bienvenue à l'élection annuelle.</p>",
LibelleAbstention = "Je m'abstiens",
OrdreReponsesAleatoire = true
};

var result = await _campagnesClient.AddCampagne(nouvelleCampagne);

if (result.IsError)
{
_logger.LogError("Erreur création: {Error}", result.FirstError.Description);
return;
}

var campagneId = result.Value;
_logger.LogInformation("Campagne créée: {Id}", campagneId);

UpdateCampagne

Met à jour une campagne existante.

Task<ErrorOr<Success>> UpdateCampagne(Guid id, B2BUpdateCampagneDto toUpdate)

Paramètres:

NomTypeDescription
idGuidIdentifiant de la campagne
toUpdateB2BUpdateCampagneDtoNouvelles données

Exemple:

var miseAJour = new B2BUpdateCampagneDto
{
Titre = "Élection du conseil 2025 - Modifié",
OuvertureDuVoteUtc = new DateTime(2025, 3, 5, 8, 0, 0, DateTimeKind.Utc),
FermetureDuVoteUtc = new DateTime(2025, 3, 20, 17, 0, 0, DateTimeKind.Utc),
TextePageAccueil = "<p>Bienvenue! Les dates ont été ajustées.</p>",
OrdreReponsesAleatoire = true
};

var result = await _campagnesClient.UpdateCampagne(campagneId, miseAJour);

if (result.IsError)
{
_logger.LogError("Erreur mise à jour: {Error}", result.FirstError.Description);
}

DeleteCampagne

Supprime une campagne.

Task<ErrorOr<Success>> DeleteCampagne(Guid id)

Paramètres:

NomTypeDescription
idGuidIdentifiant de la campagne à supprimer
attention

Une campagne ne peut être supprimée que si elle est en état "Brouillon" et n'a pas encore reçu de votes.

Exemple:

var result = await _campagnesClient.DeleteCampagne(campagneId);

if (result.IsError)
{
_logger.LogError("Erreur suppression: {Error}", result.FirstError.Description);
return;
}

_logger.LogInformation("Campagne supprimée");

PublierCampagne

Publie une campagne pour la rendre accessible aux votants.

Task<ErrorOr<Success>> PublierCampagne(Guid id)

Paramètres:

NomTypeDescription
idGuidIdentifiant de la campagne

Exemple:

var result = await _campagnesClient.PublierCampagne(campagneId);

if (result.IsError)
{
_logger.LogError("Erreur publication: {Error}", result.FirstError.Description);
return;
}

_logger.LogInformation("Campagne publiée avec succès");

DepublierCampagne

Dépublie une campagne pour la rendre inaccessible aux votants.

Task<ErrorOr<Success>> DepublierCampagne(Guid id)

Paramètres:

NomTypeDescription
idGuidIdentifiant de la campagne
attention

Une campagne ne peut être dépubliée que si le vote n'a pas encore commencé.

Exemple:

var result = await _campagnesClient.DepublierCampagne(campagneId);

if (result.IsError)
{
_logger.LogError("Erreur dépublication: {Error}", result.FirstError.Description);
return;
}

_logger.LogInformation("Campagne dépubliée");

Types associés