Aller au contenu

Portfolio — Properties

Contrôleur HTTP exposant les propriétés détenues par un investisseur (en cours et remboursées), leurs détails par contrat (obligation / loan / royalty), ainsi que les mises à jour mises en avant (highlighted updates). Source : portfolio.properties.controller.ts.

Tous les endpoints requièrent un JWT investisseur valide (JwtAuthGuard) et le rôle CUSTOMER (UserRoleGuard).

Tous les endpoints sont préfixés par /investor/portfolio/properties (cf. @Controller).

GET /investor/portfolio/properties/

Liste les propriétés de l'investisseur, séparées en ongoing / refunded, avec totaux agrégés (nombre de bricks et valeur totale du portefeuille).

Handler : getPortfolioProperties.

Response

{
  "ongoing": [
    {
      "propertyId": "uuid",
      "brickCount": 10,
      "investorContractType": "obligation",
      "refundStatus": "none",
      "contractRemainingMonths": 24,
      "...": "autres champs PortfolioProperties"
    }
  ],
  "refunded": [
    {
      "propertyId": "uuid",
      "refundStatus": "total",
      "...": "autres champs PortfolioProperties"
    }
  ],
  "total": {
    "brickCount": 42,
    "value": 420000
  }
}

Typé GetPortfolioPropertiesResponse (depuis @bricks-common/api-communication). Le refundStatus peut valoir none, partial ou total.

GET /investor/portfolio/properties/highlighted-updates

Retourne les mises à jour mises en avant des propriétés détenues par l'investisseur, optionnellement filtrées sur une plage de dates.

Handler : getMyPropertiesUpdatesHighlighted.

Query params

?startDate=2025-01-01&endDate=2025-12-31

Validé via dateRangeValidatorFilter (startDate et endDate optionnels, format YYYY-MM-DD). Si les deux sont fournis, startDate doit être ≤ endDate.

Response

Tableau de mises à jour :

[
  {
    "date": "2025-03-15",
    "propertyImageUrl": "https://...",
    "propertyId": "uuid",
    "propertyName": "Le Marais",
    "description": "Travaux finalisés..."
  }
]

Erreurs

Code Statut Cause
Validation idonttrustlikethat 400 Query params invalides (format dates, ou startDate > endDate)

GET /investor/portfolio/properties/highlighted-updates/last-30-days-count

Retourne le nombre de mises à jour mises en avant sur les 30 derniers jours pour les propriétés de l'investisseur.

Handler : getMyLast30DaysPropertiesUpdatesHighlightedCount.

Response

{
  "count": 7
}

GET /investor/portfolio/properties/my-properties-last-30-days-highlighted-monthly-updates

Retourne les mises à jour mensuelles des 30 derniers jours pour les propriétés détenues. Limité aux 5 dernières mises à jour, avec le compteur total.

Handler : getMyPropertiesLast30DaysHighlightedMonthlyUpdates.

Response

{
  "updates": [
    {
      "date": "2025-04-12",
      "propertyId": "uuid",
      "propertyName": "Le Marais",
      "description": "Loyer encaissé..."
    }
  ],
  "totalCount": 12
}

updates est tronqué aux 5 premiers ; totalCount reflète l'ensemble des updates des 30 derniers jours.

GET /investor/portfolio/properties/my-projects-and-bricks-count

Retourne le nombre total de projets distincts financés et de bricks détenus par l'investisseur.

Handler : getMyProjectsAndBricksCount.

Response

{
  "brickCount": 42,
  "projectsCount": 8
}

GET /investor/portfolio/properties/:propertyId

Retourne le détail d'une propriété détenue par l'investisseur. Le payload est polymorphe selon le type de contrat (obligation / loan / royalty).

Handler : getPortfolioProperty.

Path param

  • propertyId — UUID v4 (validé via ParseUUIDPipe({ version: '4' }))

Pré-conditions

  • L'investisseur doit détenir au moins 1 brick sur la property — sinon 404 property.no-bricks-owned

Response

Selon investorContractType :

  • obligation / loanPortfolioProperties.ObligationProperty : bricks détenus, valeur courante, date d'investissement, prochain coupon (nextRevenue), historique des revenus (pastRevenues), résumé fiscal (revenuesSummary), durée du contrat (contractDuration), échéancier de remboursement du capital (principalRepayments)
  • royaltyPortfolioProperties.RoyaltyProperty : bricks détenus, valeur courante, durée du contrat, revenus cumulés, charts (brickPriceChart, dividendsChart), résiles, transactions, historique des revenus

Validé via PortfolioProperties.property.

Erreurs

Code Statut Cause
property.no-bricks-owned 404 L'investisseur ne possède pas de brick sur cette property
Autres erreurs métier 400 Erreurs renvoyées par le service (cf. BadRequestException dans le match exhaustif)
Validation 400 propertyId n'est pas un UUID v4

Liens