Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
ruben.sitbon committed Sep 21, 2023
0 parents commit daecbed
Show file tree
Hide file tree
Showing 66 changed files with 18,884 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/tests-back.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Backend tests

on:
push:
branches: [ main ]
paths:
- 'mymoni-backend/**'
pull_request:
paths:
- 'mymoni-backend/**'

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build with Maven
working-directory: mymoni-backend
run: mvn --batch-mode --update-snapshots package
29 changes: 29 additions & 0 deletions .github/workflows/tests-front.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Frontend tests

on:
push:
branches: [ main ]
paths:
- 'my-moni-frontend/**'
pull_request:
paths:
- 'my-moni-frontend/**'

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
working-directory: my-moni-frontend
- run: npm run build --if-present
working-directory: my-moni-frontend
- run: npm test
working-directory: my-moni-frontend
54 changes: 54 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Directories
node_modules/
build/
target/
.idea/

# Files
*.log
*.iml

# IDE-specific
.vscode/
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.idea

# React-specific
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/.pnp
.pnp.js

# Compiled Java classes
*.class

# Spring Boot-specific
# Target folder
/target/
# Spring Boot property file
/application.properties

# IDE-specific files (IntelliJ IDEA)
.idea/
*.iws
*.ipr
*.iws
*.iml

# Compiled binary
/out/
/dist/

# Environment files
.env.local
.env.development.local
.env.test.local
.env.production.local
/test-results/
/playwright-report/
/playwright/.cache/
7 changes: 7 additions & 0 deletions .prettierrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overrides:
- files: "*.java"
options:
tabWidth: 4

plugins:
- prettier-plugin-java
10 changes: 10 additions & 0 deletions .run/Start Backend.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Start Backend" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="backend" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.mymoni.BackendApplication" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
53 changes: 53 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# dojo-mymoni

Dojo DDD conçu par Sipios

## Votre objectif

L'application MyMoni permet de proposer une stratégie d'investissement en fonction du profil du client.

Aujourd'hui, votre Product Owner vient vous voir avec un nouveau besoin : des utilisateurs remontent qu'ils souhaiteraient
investir uniquement dans des fonds avec un véritable engagement écologique.
Votre objectif sera de déterminer avec lui quel est ce nouveau besoin et implémenter cette nouvelle fonctionnalité. Vous pouvez vous aider d'un Event Storming afin de conceptualiser votre développement.


D'autre part, certains utilisateurs ont remonté certaines anomalies. Saurez-vous les spotter et apporter une correction ?

## Installation

### Pré-requis

- Avoir Node installé sur sa machine
- Avoir Java 17 installé sur sa machine


### Installation du Frontend

- Éxecuter : `cd my-moni-frontend/` pour aller dans le dossier du front
- Éxecuter : `npm install` pour installer les dépendances
- Éxecuter : `npm test` pour lancer les tests de l'app
- Éxecuter : `npm run dev` pour lancer l'application (appuyer sur o pour l'ouvrir dans le navigateur)


### Installation du Backend

Avec IntellJ (recommandé) :

- ouvrir le projet dans IntellJ
- Attendre l'indexation :)
- Ouvrir le fichier `BackendApplication.java`
- Cliquer sur le bouton play vert pour lancer l'application

En ligne de commande :

- Éxecuter : `cd my-moni-backend/` pour aller dans le dossier du back
- Éxecuter : `./mvnw test` pour compiler et lancer les tests
- Éxecuter : `./mvnw spring-boot:run` pour compiler et démarrer l'application


### Lancer les tests E2E

- Lancer le front + le back
- Se placer à la racine du projet
- Éxecuter : `npm install` pour installer les dépendances
- Éxecuter : `npm run e2e:ui` pour lancer les tests E2E
110 changes: 110 additions & 0 deletions docs/MyMoni-Modelisation.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<mxfile host="app.diagrams.net" modified="2023-09-21T12:14:42.152Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0" etag="-SuZOMYxyRs7-vfErqdw" version="21.7.2" type="device">
<diagram name="Page-1" id="6133507b-19e7-1e82-6fc7-422aa6c4b21f">
<mxGraphModel dx="1735" dy="935" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="78961159f06e98e8-17" value="Investment" style="swimlane;html=1;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fillColor=none;fontFamily=Verdana;fontSize=12" parent="1" vertex="1">
<mxGeometry x="760" y="120" width="160" height="118" as="geometry" />
</mxCell>
<mxCell id="78961159f06e98e8-23" value="+ fund: Fund" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="78961159f06e98e8-17" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="78961159f06e98e8-24" value="+ share: BigDecimal" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="78961159f06e98e8-17" vertex="1">
<mxGeometry y="52" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="78961159f06e98e8-19" value="" style="line;html=1;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="78961159f06e98e8-17" vertex="1">
<mxGeometry y="78" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="b94bc138ca980ef-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=oval;startFill=1;startSize=8;endArrow=ERmany;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;exitX=-0.016;exitY=0.92;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dclm5cD4FVZjjemQaw-i-16" target="78961159f06e98e8-17" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="980" y="269" />
<mxPoint x="980" y="200" />
</Array>
<mxPoint x="665" y="201.0000000000001" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-3" value="InvestorProfileFilter" style="swimlane;html=1;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fillColor=none;fontFamily=Verdana;fontSize=12" parent="1" vertex="1">
<mxGeometry x="360" y="425" width="290" height="190" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-4" value="+ revenue: Revenue" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="26" width="290" height="26" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-8" value="+ savings: Savings" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="52" width="290" height="26" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-9" value="+ goal: Goal" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="78" width="290" height="26" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-10" value="+ vision: Vision" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="104" width="290" height="26" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-5" value="+ availability: Availability" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="130" width="290" height="26" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-6" value="" style="line;html=1;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="156" width="290" height="8" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-7" value="+ investorProfile(): ProfileName" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="dclm5cD4FVZjjemQaw-i-3" vertex="1">
<mxGeometry y="164" width="290" height="26" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-16" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;Enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;ProfileName&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ SECURE&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ RESPONSIBLE &lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ DYNAMIC&lt;br&gt;+ ADVENTURER&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ investments(): List&amp;lt;Investment&amp;gt;&lt;br&gt;&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1035" y="140" width="235" height="140" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="dclm5cD4FVZjjemQaw-i-17" target="dclm5cD4FVZjjemQaw-i-10" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="270" y="445" />
<mxPoint x="270" y="542" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-17" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;Enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;Goal&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ RETIREMENT&lt;br&gt;+ GROW_MY_ASSET&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ PROFESSIONAL_PROJECT&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ PRINCIPAL_RESIDENCE&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ weight(): int&lt;br&gt;&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="40" y="340" width="190" height="210" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="dclm5cD4FVZjjemQaw-i-18" target="dclm5cD4FVZjjemQaw-i-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-18" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;Enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;Vision&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ WEDDING&lt;br&gt;+ COMPANY&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ RETIREMENT&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ PRINCIPAL_RESIDENCE&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ weight(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="40" y="580" width="190" height="210" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="dclm5cD4FVZjjemQaw-i-19" target="dclm5cD4FVZjjemQaw-i-9" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="290" y="205" />
<mxPoint x="290" y="516" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-19" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;Enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;Availability&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ LESS_THAN_TWO_YEARS&lt;br&gt;+ THREE_TO_FIVE_YEARS&lt;/p&gt;&lt;hr size=&quot;1&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ weight(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="40" y="100" width="190" height="210" as="geometry" />
</mxCell>
<mxCell id="dclm5cD4FVZjjemQaw-i-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="dclm5cD4FVZjjemQaw-i-7" target="dclm5cD4FVZjjemQaw-i-16" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-1fPGYo0YrilThlYORLr-1" value="Fund" style="swimlane;html=1;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fillColor=none;fontFamily=Verdana;fontSize=12" vertex="1" parent="1">
<mxGeometry x="470" y="120" width="160" height="118" as="geometry" />
</mxCell>
<mxCell id="-1fPGYo0YrilThlYORLr-2" value="+ label: String" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="-1fPGYo0YrilThlYORLr-1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="-1fPGYo0YrilThlYORLr-3" value="+ riskLevel: RiskLevel" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="-1fPGYo0YrilThlYORLr-1">
<mxGeometry y="52" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="-1fPGYo0YrilThlYORLr-4" value="" style="line;html=1;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" vertex="1" parent="-1fPGYo0YrilThlYORLr-1">
<mxGeometry y="78" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="-1fPGYo0YrilThlYORLr-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=oval;startFill=1;startSize=8;endArrow=ERmany;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="78961159f06e98e8-23">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="690" y="160" />
</Array>
<mxPoint x="741" y="229" as="sourcePoint" />
<mxPoint x="630" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
4 changes: 4 additions & 0 deletions docs/MyMoni-Modelisation.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions my-moni-e2e/adventurer-profile.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { test, expect } from "@playwright/test";
import checkFunds from "./utils/checkFunds";

test("Adventurer profile", async ({ page }) => {
await page.goto("http://127.0.0.1:5173/");
await page.getByLabel("Votre revenu fiscal du foyer").fill("50000");
await page.getByLabel("Le montant de votre épargne actuelle").fill("70000");
await page.getByLabel("Fructifier mon patrimoine").first().check();
await page.getByLabel("Un mariage / PACS").check();
await page.getByLabel("Dans les deux ans").check();
await page.getByRole("button", { name: "Faire ma simulation" }).click();

await expect(page.getByText("ADVENTURER")).toBeVisible();

await checkFunds(page, [
{ label: "ESG Obligation europe", repartition: "15 %" },
{ label: "Duration ESG", repartition: "25 %" },
{ label: "Echiquier positif impact Europe", repartition: "15 %" },
{ label: "Sustainable Equity", repartition: "22.5 %" },
{ label: "Choix solidaire", repartition: "22.5 %" },
]);
});
Loading

0 comments on commit daecbed

Please sign in to comment.