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:
| Nom | Type | Description |
|---|---|---|
searchRequest | B2BCampagneSearchRequest? | 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:
| Nom | Type | Description |
|---|---|---|
id | Guid | Identifiant 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:
| Nom | Type | Description |
|---|---|---|
id | Guid | Identifiant de la campagne |
syndicatIdExterne | string? | Filtrer les compteurs par identifiant externe du syndicat (optionnel) |
Retour: Statistiques de participation et résultats par question.
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:
| Nom | Type | Description |
|---|---|---|
toAdd | B2BCreateCampagneDto | Donné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:
| Nom | Type | Description |
|---|---|---|
id | Guid | Identifiant de la campagne |
toUpdate | B2BUpdateCampagneDto | Nouvelles 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:
| Nom | Type | Description |
|---|---|---|
id | Guid | Identifiant de la campagne à supprimer |
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:
| Nom | Type | Description |
|---|---|---|
id | Guid | Identifiant 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:
| Nom | Type | Description |
|---|---|---|
id | Guid | Identifiant de la campagne |
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
B2BCampagneItem- Informations d'une campagneB2BCreateCampagneDto- DTO pour créationB2BUpdateCampagneDto- DTO pour modificationB2BCampagneSearchRequest- Paramètres de rechercheB2BCampagneStatsItem- Statistiques de campagne