Aller au contenu

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

{ "has_votes": true }

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

{ "pending_votes_count": 3 }

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é par ParseUUIDPipe({ 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.jwtSharedSecret et gestionDefauts.votingPlatformUrl doivent être configurés (sinon 500)

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