Investor Voting¶
Contrôleur HTTP des votes investisseur. Façade légère devant la plateforme externe « gestion-defauts » : trois proxys vers son API (hasVotes, pendingVotesCount, latestVote) et un endpoint local qui forge un JWT signé pour l'accès embarqué à la plateforme de vote. Source : investor-voting.controller.ts.
Tous les endpoints requièrent un JWT investisseur valide (JwtAuthGuard) et le rôle CUSTOMER (UserRoleGuard).
GET /investor/voting/has-votes¶
Indique si l'investisseur a au moins un vote (en cours ou clôturé) sur la plateforme externe. Proxy vers GET /api/external/users/:investorId/has-votes du service gestion-defauts (controller#L24-L31).
Response¶
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
| (générique) | 500 | Erreur HTTP upstream ou réponse upstream non conforme au schéma |
GET /investor/voting/pending-votes-count¶
Retourne le nombre de votes en attente (non encore exprimés) pour l'investisseur connecté. Proxy vers GET /api/external/users/:investorId/pending-votes-count (controller#L33-L40).
Response¶
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
| (générique) | 500 | Erreur HTTP upstream ou réponse upstream non conforme au schéma |
GET /investor/voting/projects/:projectId/latest-vote¶
Retourne le dernier vote ouvert ou clôturé sur un projet pour l'investisseur connecté. Proxy vers GET /api/external/projects/:projectId/latest-vote?customer_id=:investorId (controller#L42-L52).
Path param¶
projectId— UUIDv4 (validé parParseUUIDPipe({ version: '4' }))
Response¶
{
"vote": {
"id": 12345,
"title": "Modification du règlement intérieur",
"types": ["ordinary"],
"vote_ended_at": "2026-04-30T23:59:59Z",
"is_open": false,
"url": "https://gestion-defauts.example.com/votes/12345",
"is_pending_for_user": false
}
}
vote peut être null si aucun vote n'existe pour ce projet.
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
| (générique) | 400 | projectId non UUIDv4 (rejeté par ParseUUIDPipe) |
| (générique) | 500 | Erreur HTTP upstream ou réponse upstream non conforme au schéma |
GET /investor/voting/platform-url¶
Forge un JWT signé HS256 ({ investorId }) avec le secret partagé gestionDefauts.jwtSharedSecret et expiration gestionDefauts.accessTokenExpirySeconds, puis retourne l'URL d'embarquement à utiliser dans le front. Endpoint purement local (aucun appel upstream) (controller#L54-L78).
Pré-conditions¶
gestionDefauts.jwtSharedSecretetgestionDefauts.votingPlatformUrldoivent être configurés (sinon500)
Response¶
{
"platformUrl": "https://gestion-defauts.example.com",
"platformUrlWithToken": "https://gestion-defauts.example.com/?token=eyJhbGciOi...",
"token": "eyJhbGciOi..."
}
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
| (générique) | 500 | Configuration jwtSharedSecret ou votingPlatformUrl absente |
Liens¶
- Façade upstream :
gestion-defauts.api.ts - Schémas partagés :
investor-voting.endpoint.ts