IQuestionsClient
Client pour la gestion des questions au sein d'une campagne de vote.
public interface IQuestionsClient : IBaseClient
Méthodes
GetQuestionsByCampagne
Récupère toutes les questions d'une campagne.
Task<ErrorOr<IEnumerable<B2BQuestionItem>>> GetQuestionsByCampagne(Guid campagneId)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
Retour: Liste des questions avec leurs options de réponse.
Exemple:
var result = await _questionsClient.GetQuestionsByCampagne(campagneId);
if (result.IsError)
{
_logger.LogError("Erreur: {Error}", result.FirstError.Description);
return;
}
foreach (var question in result.Value)
{
Console.WriteLine($"Q{question.Ordre}: {question.Nom}");
Console.WriteLine($" Type: {question.TypeQuestion}");
Console.WriteLine($" Options: {question.NombreOptions}");
foreach (var option in question.Options)
{
Console.WriteLine($" - {option.Texte}");
}
}
GetQuestionById
Récupère une question par son identifiant.
Task<ErrorOr<B2BQuestionItem>> GetQuestionById(Guid campagneId, int questionId)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionId | int | Identifiant de la question |
Retour: Informations complètes de la question.
Exemple:
var result = await _questionsClient.GetQuestionById(campagneId, questionId);
if (result.IsError)
{
if (result.FirstError.Type == ErrorType.NotFound)
{
Console.WriteLine("Question non trouvée");
}
return;
}
var question = result.Value;
Console.WriteLine($"Question: {question.Nom}");
Console.WriteLine($"Texte: {question.Texte}");
Console.WriteLine($"Min/Max réponses: {question.MinReponses}/{question.MaxReponses}");
AddQuestion
Ajoute une question à une campagne.
Task<ErrorOr<int>> AddQuestion(Guid campagneId, B2BCreateQuestionDto dto)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
dto | B2BCreateQuestionDto | Données de la question à créer |
Retour: Identifiant de la question créée.
Exemple:
var nouvelleQuestion = new B2BCreateQuestionDto
{
Nom = "Élection du président",
Texte = "<p>Veuillez choisir le prochain président du conseil.</p>",
TypeQuestion = "Election",
MinReponses = 1,
MaxReponses = 1,
AbstentionPermise = true,
Options = new List<B2BCreateOptionReponseDto>
{
new() { Texte = "Jean Dupont", Information = "Candidat sortant" },
new() { Texte = "Marie Martin", Information = "Nouvelle candidate" }
}
};
var result = await _questionsClient.AddQuestion(campagneId, nouvelleQuestion);
if (result.IsError)
{
_logger.LogError("Erreur création: {Error}", result.FirstError.Description);
return;
}
var questionId = result.Value;
_logger.LogInformation("Question créée: {Id}", questionId);
Types de questions
| Type | Description | Cas d'usage |
|---|---|---|
ChoixLibre | Choix multiples parmi des options textuelles | Sondages, préférences |
Proposition | Vote pour/contre une proposition | Approbation de résolutions |
Election | Élection de personnes | Conseil d'administration |
UpdateQuestion
Met à jour une question existante.
Task<ErrorOr<Success>> UpdateQuestion(Guid campagneId, int questionId, B2BUpdateQuestionDto dto)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionId | int | Identifiant de la question |
dto | B2BUpdateQuestionDto | Nouvelles données |
Une question ne peut être modifiée que si la campagne n'a pas encore reçu de votes.
Exemple:
var miseAJour = new B2BUpdateQuestionDto
{
Nom = "Élection du président - Modifié",
Texte = "<p>Texte mis à jour.</p>",
MinReponses = 1,
MaxReponses = 2, // Permettre 2 choix
AbstentionPermise = true
};
var result = await _questionsClient.UpdateQuestion(campagneId, questionId, miseAJour);
if (result.IsError)
{
_logger.LogError("Erreur mise à jour: {Error}", result.FirstError.Description);
}
DeleteQuestion
Supprime une question.
Task<ErrorOr<Success>> DeleteQuestion(Guid campagneId, int questionId)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionId | int | Identifiant de la question |
Exemple:
var result = await _questionsClient.DeleteQuestion(campagneId, questionId);
if (result.IsError)
{
_logger.LogError("Erreur suppression: {Error}", result.FirstError.Description);
return;
}
_logger.LogInformation("Question supprimée");
ReorderQuestions
Réorganise l'ordre des questions dans une campagne.
Task<ErrorOr<Success>> ReorderQuestions(Guid campagneId, int[] questionIds)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionIds | int[] | IDs des questions dans le nouvel ordre |
Exemple:
// Inverser l'ordre de deux questions
var nouvelOrdre = new[] { 3, 1, 2 };
var result = await _questionsClient.ReorderQuestions(campagneId, nouvelOrdre);
if (result.IsError)
{
_logger.LogError("Erreur réorganisation: {Error}", result.FirstError.Description);
}
AddOption
Ajoute une option de réponse à une question.
Task<ErrorOr<Guid>> AddOption(Guid campagneId, int questionId, B2BCreateOptionReponseDto dto)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionId | int | Identifiant de la question |
dto | B2BCreateOptionReponseDto | Données de l'option |
Retour: Identifiant de l'option créée.
Exemple:
var nouvelleOption = new B2BCreateOptionReponseDto
{
Texte = "Pierre Tremblay",
Information = "Candidat de dernière minute"
};
var result = await _questionsClient.AddOption(campagneId, questionId, nouvelleOption);
if (result.IsError)
{
_logger.LogError("Erreur création option: {Error}", result.FirstError.Description);
return;
}
var optionId = result.Value;
_logger.LogInformation("Option créée: {Id}", optionId);
UpdateOption
Met à jour une option de réponse.
Task<ErrorOr<Success>> UpdateOption(Guid campagneId, int questionId, Guid optionId, B2BCreateOptionReponseDto dto)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionId | int | Identifiant de la question |
optionId | Guid | Identifiant de l'option |
dto | B2BCreateOptionReponseDto | Nouvelles données |
Exemple:
var miseAJour = new B2BCreateOptionReponseDto
{
Texte = "Pierre Tremblay (retraité)",
Information = "S'est retiré de la course"
};
var result = await _questionsClient.UpdateOption(campagneId, questionId, optionId, miseAJour);
if (result.IsError)
{
_logger.LogError("Erreur mise à jour option: {Error}", result.FirstError.Description);
}
DeleteOption
Supprime une option de réponse.
Task<ErrorOr<Success>> DeleteOption(Guid campagneId, int questionId, Guid optionId)
Paramètres:
| Nom | Type | Description |
|---|---|---|
campagneId | Guid | Identifiant de la campagne |
questionId | int | Identifiant de la question |
optionId | Guid | Identifiant de l'option |
Exemple:
var result = await _questionsClient.DeleteOption(campagneId, questionId, optionId);
if (result.IsError)
{
_logger.LogError("Erreur suppression option: {Error}", result.FirstError.Description);
return;
}
_logger.LogInformation("Option supprimée");
Types associés
B2BQuestionItem- Informations d'une questionB2BCreateQuestionDto- DTO pour création de questionB2BUpdateQuestionDto- DTO pour modificationB2BOptionReponseItem- Option de réponseB2BCreateOptionReponseDto- DTO pour création d'option