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¶
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¶
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¶
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é viaParseUUIDPipe({ 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/loan—PortfolioProperties.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)royalty—PortfolioProperties.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¶
- Service :
portfolio.properties.service.ts - Repository :
portfolio.properties.repository.ts - Logique obligation / royalty :
obligation/ - Validators de réponse :
portfolio/properties.ts,endpoints/getPortfolioProperties.endpoints.ts