diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3729ff0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000..91933b3 --- /dev/null +++ b/.env @@ -0,0 +1,6 @@ +DATABASE_HOSTNAME=localhost +DATABASE_PORT=3306 +DATABASE_NAME=collaborateur_epa +APP_DB_USERNAME=root +APP_DB_PASSWORD=root +APP_DB_ROOT_PASSWORD=root diff --git a/.gitignore b/.gitignore index 4b7ddec..bfe7987 100644 --- a/.gitignore +++ b/.gitignore @@ -302,9 +302,6 @@ node_modules/ *.dsw *.dsp -# Visual Studio 6 technical files -*.ncb -*.aps # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts @@ -401,6 +398,7 @@ FodyWeavers.xsd # ---> JetBrains # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +.idea # User-specific stuff .idea/**/workspace.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/Documentation Services Collaborateur EPA/BackEnd/Exemple_de_route.mdj b/Documentation Services Collaborateur EPA/BackEnd/Exemple_de_route.mdj new file mode 100644 index 0000000..8f7f4db --- /dev/null +++ b/Documentation Services Collaborateur EPA/BackEnd/Exemple_de_route.mdj @@ -0,0 +1,1606 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true + } + ] + }, + { + "_type": "UMLActivity", + "_id": "AAAAAAF9UqPaoReu618=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Activity1", + "ownedElements": [ + { + "_type": "UMLActivityDiagram", + "_id": "AAAAAAF9UqPaohevzgU=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "ActivityDiagram1", + "ownedViews": [ + { + "_type": "UMLControlNodeView", + "_id": "AAAAAAF9UqPuPRe1h8I=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqPuPBezyCs=" + }, + "font": "Arial;13;0", + "containerChangeable": true, + "left": 336, + "top": 80, + "width": 20, + "height": 20 + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9UqP1EBe6MME=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqP1EBe4vXY=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9UqP1ERe75dc=", + "_parent": { + "$ref": "AAAAAAF9UqP1EBe6MME=" + }, + "model": { + "$ref": "AAAAAAF9UqP1EBe4vXY=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9UqP1ERe8yZg=", + "_parent": { + "$ref": "AAAAAAF9UqP1ERe75dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 112, + "top": -80, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqP1ERe9YSY=", + "_parent": { + "$ref": "AAAAAAF9UqP1ERe75dc=" + }, + "font": "Arial;13;1", + "left": 205, + "top": 111, + "width": 288.20263671875, + "height": 13, + "text": "CollaborateursController - GetAllCollaborateur" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqP1ERe+fJg=", + "_parent": { + "$ref": "AAAAAAF9UqP1ERe75dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 112, + "top": -80, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqP1ERe/o60=", + "_parent": { + "$ref": "AAAAAAF9UqP1ERe75dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 112, + "top": -80, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 200, + "top": 104, + "width": 298.20263671875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqP1ERe8yZg=" + }, + "nameLabel": { + "$ref": "AAAAAAF9UqP1ERe9YSY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9UqP1ERe+fJg=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqP1ERe/o60=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 200, + "top": 104, + "width": 298.20263671875, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9UqP1ERe75dc=" + } + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9UqQLeRfT6XE=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqQLeBfR2Fw=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9UqQLeRfUQz4=", + "_parent": { + "$ref": "AAAAAAF9UqQLeRfT6XE=" + }, + "model": { + "$ref": "AAAAAAF9UqQLeBfR2Fw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQLeRfVrzI=", + "_parent": { + "$ref": "AAAAAAF9UqQLeRfUQz4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -144, + "top": 80, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQLeRfWhxM=", + "_parent": { + "$ref": "AAAAAAF9UqQLeRfUQz4=" + }, + "font": "Arial;13;1", + "left": 109, + "top": 327, + "width": 247, + "height": 13, + "text": "GenericsServices - GetAll - CollabApi" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQLeRfXk0U=", + "_parent": { + "$ref": "AAAAAAF9UqQLeRfUQz4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -144, + "top": 80, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQLeRfYpjA=", + "_parent": { + "$ref": "AAAAAAF9UqQLeRfUQz4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -144, + "top": 80, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 104, + "top": 320, + "width": 257, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqQLeRfVrzI=" + }, + "nameLabel": { + "$ref": "AAAAAAF9UqQLeRfWhxM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9UqQLeRfXk0U=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqQLeRfYpjA=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 104, + "top": 320, + "width": 257, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9UqQLeRfUQz4=" + } + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9UqQRXxfsPZ4=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqQRXxfqx+o=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9UqQRXxftz+w=", + "_parent": { + "$ref": "AAAAAAF9UqQRXxfsPZ4=" + }, + "model": { + "$ref": "AAAAAAF9UqQRXxfqx+o=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQRXxfukrI=", + "_parent": { + "$ref": "AAAAAAF9UqQRXxftz+w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": 16, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQRXxfv2NY=", + "_parent": { + "$ref": "AAAAAAF9UqQRXxftz+w=" + }, + "font": "Arial;13;1", + "left": 109, + "top": 447, + "width": 247, + "height": 13, + "text": "GenericRepository - GetAll - CollabSql" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQRXxfwA5A=", + "_parent": { + "$ref": "AAAAAAF9UqQRXxftz+w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": 16, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqQRXxfx7/E=", + "_parent": { + "$ref": "AAAAAAF9UqQRXxftz+w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": 16, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 104, + "top": 440, + "width": 257, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqQRXxfukrI=" + }, + "nameLabel": { + "$ref": "AAAAAAF9UqQRXxfv2NY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9UqQRXxfwA5A=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqQRXxfx7/E=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 104, + "top": 440, + "width": 257, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9UqQRXxftz+w=" + } + }, + { + "_type": "UMLTextView", + "_id": "AAAAAAF9UqR2bBgEPg0=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "font": "Arial;13;0", + "left": 264, + "top": 56, + "width": 167.5361328125, + "height": 25, + "text": "localhost/api/collaborateurs" + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9UqjGqBgmCNk=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqjGpxgks9w=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9UqjGqBgnWgs=", + "_parent": { + "$ref": "AAAAAAF9UqjGqBgmCNk=" + }, + "model": { + "$ref": "AAAAAAF9UqjGpxgks9w=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9UqjGqBgoEdY=", + "_parent": { + "$ref": "AAAAAAF9UqjGqBgnWgs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": 272, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqjGqBgpxLM=", + "_parent": { + "$ref": "AAAAAAF9UqjGqBgnWgs=" + }, + "font": "Arial;13;1", + "left": 205, + "top": 591, + "width": 271.62890625, + "height": 13, + "text": "Database Collaborateur_epa - Collaborateur" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqjGqBgqbOw=", + "_parent": { + "$ref": "AAAAAAF9UqjGqBgnWgs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": 272, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqjGqBgrP+g=", + "_parent": { + "$ref": "AAAAAAF9UqjGqBgnWgs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": 272, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 200, + "top": 584, + "width": 281.62890625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqjGqBgoEdY=" + }, + "nameLabel": { + "$ref": "AAAAAAF9UqjGqBgpxLM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9UqjGqBgqbOw=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqjGqBgrP+g=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 200, + "top": 584, + "width": 281.62890625, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9UqjGqBgnWgs=" + } + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9Uqo6JhhBUAg=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9Uqo6JRg/Jv0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9Uqo6JhhC0/Y=", + "_parent": { + "$ref": "AAAAAAF9Uqo6JhhBUAg=" + }, + "model": { + "$ref": "AAAAAAF9Uqo6JRg/Jv0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqo6JhhD3hE=", + "_parent": { + "$ref": "AAAAAAF9Uqo6JhhC0/Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 144, + "top": 304, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqo6JhhEYuc=", + "_parent": { + "$ref": "AAAAAAF9Uqo6JhhC0/Y=" + }, + "font": "Arial;13;1", + "left": 517, + "top": 447, + "width": 146.6181640625, + "height": 13, + "text": "All CollaborateurSqlDto" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqo6JhhFiw4=", + "_parent": { + "$ref": "AAAAAAF9Uqo6JhhC0/Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 144, + "top": 304, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqo6JhhGzPI=", + "_parent": { + "$ref": "AAAAAAF9Uqo6JhhC0/Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 144, + "top": 304, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 512, + "top": 440, + "width": 156.6181640625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9Uqo6JhhD3hE=" + }, + "nameLabel": { + "$ref": "AAAAAAF9Uqo6JhhEYuc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9Uqo6JhhFiw4=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9Uqo6JhhGzPI=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 512, + "top": 440, + "width": 156.6181640625, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9Uqo6JhhC0/Y=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9UqrDlxhco0E=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqrDlhhbSu4=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrDlxhdrBE=", + "_parent": { + "$ref": "AAAAAAF9UqrDlxhco0E=" + }, + "model": { + "$ref": "AAAAAAF9UqrDlhhbSu4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 303, + "top": 233, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrDlxhco0E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrDlxhecTk=", + "_parent": { + "$ref": "AAAAAAF9UqrDlxhco0E=" + }, + "model": { + "$ref": "AAAAAAF9UqrDlhhbSu4=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 316, + "top": 240, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9UqrDlxhco0E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrDlxhffNg=", + "_parent": { + "$ref": "AAAAAAF9UqrDlxhco0E=" + }, + "model": { + "$ref": "AAAAAAF9UqrDlhhbSu4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 276, + "top": 218, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrDlxhco0E=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9UqQLeRfT6XE=" + }, + "tail": { + "$ref": "AAAAAAF9UqP1EBe6MME=" + }, + "lineStyle": 1, + "points": "337:145;243:319", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9UqrDlxhdrBE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqrDlxhecTk=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqrDlxhffNg=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9UqrG0Rhtxm4=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqrG0RhskJg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrG0RhuitQ=", + "_parent": { + "$ref": "AAAAAAF9UqrG0Rhtxm4=" + }, + "model": { + "$ref": "AAAAAAF9UqrG0RhskJg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 246, + "top": 393, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrG0Rhtxm4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrG0Rhv+eM=", + "_parent": { + "$ref": "AAAAAAF9UqrG0Rhtxm4=" + }, + "model": { + "$ref": "AAAAAAF9UqrG0RhskJg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 261, + "top": 393, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9UqrG0Rhtxm4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrG0Rhwx0w=", + "_parent": { + "$ref": "AAAAAAF9UqrG0Rhtxm4=" + }, + "model": { + "$ref": "AAAAAAF9UqrG0RhskJg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 217, + "top": 394, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrG0Rhtxm4=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9UqQRXxfsPZ4=" + }, + "tail": { + "$ref": "AAAAAAF9UqQLeRfT6XE=" + }, + "lineStyle": 1, + "points": "232:361;232:439", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9UqrG0RhuitQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqrG0Rhv+eM=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqrG0Rhwx0w=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9UqrLjxh+WOQ=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqrLjhh95Ds=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrLjxh/kDg=", + "_parent": { + "$ref": "AAAAAAF9UqrLjxh+WOQ=" + }, + "model": { + "$ref": "AAAAAAF9UqrLjhh95Ds=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 298, + "top": 517, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrLjxh+WOQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrLjxiAS+8=", + "_parent": { + "$ref": "AAAAAAF9UqrLjxh+WOQ=" + }, + "model": { + "$ref": "AAAAAAF9UqrLjhh95Ds=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 310, + "top": 508, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9UqrLjxh+WOQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrLjxiBYzY=", + "_parent": { + "$ref": "AAAAAAF9UqrLjxh+WOQ=" + }, + "model": { + "$ref": "AAAAAAF9UqrLjhh95Ds=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 273, + "top": 534, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrLjxh+WOQ=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9UqjGqBgmCNk=" + }, + "tail": { + "$ref": "AAAAAAF9UqQRXxfsPZ4=" + }, + "lineStyle": 1, + "points": "248:481;324:583", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9UqrLjxh/kDg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqrLjxiAS+8=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqrLjxiBYzY=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9UqrQSxiPj+I=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqrQSxiOmvU=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrQTBiQXNw=", + "_parent": { + "$ref": "AAAAAAF9UqrQSxiPj+I=" + }, + "model": { + "$ref": "AAAAAAF9UqrQSxiOmvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 456, + "top": 512, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrQSxiPj+I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrQTBiR49s=", + "_parent": { + "$ref": "AAAAAAF9UqrQSxiPj+I=" + }, + "model": { + "$ref": "AAAAAAF9UqrQSxiOmvU=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 449, + "top": 499, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9UqrQSxiPj+I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9UqrQTBiSB7E=", + "_parent": { + "$ref": "AAAAAAF9UqrQSxiPj+I=" + }, + "model": { + "$ref": "AAAAAAF9UqrQSxiOmvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 471, + "top": 539, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9UqrQSxiPj+I=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9Uqo6JhhBUAg=" + }, + "tail": { + "$ref": "AAAAAAF9UqjGqBgmCNk=" + }, + "lineStyle": 1, + "points": "376:583;553:481", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9UqrQTBiQXNw=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqrQTBiR49s=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqrQTBiSB7E=" + } + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9Uqrl6xihHYk=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9Uqrl6xif0eU=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9Uqrl6xiiFF4=", + "_parent": { + "$ref": "AAAAAAF9Uqrl6xihHYk=" + }, + "model": { + "$ref": "AAAAAAF9Uqrl6xif0eU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqrl6xijlVE=", + "_parent": { + "$ref": "AAAAAAF9Uqrl6xiiFF4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": 384, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqrl6xiklgQ=", + "_parent": { + "$ref": "AAAAAAF9Uqrl6xiiFF4=" + }, + "font": "Arial;13;1", + "left": 509, + "top": 351, + "width": 207.74609375, + "height": 13, + "text": "All CollaborateurSqlDto.ToApiDto" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqrl6xilnV4=", + "_parent": { + "$ref": "AAAAAAF9Uqrl6xiiFF4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": 384, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9Uqrl6ximV7Q=", + "_parent": { + "$ref": "AAAAAAF9Uqrl6xiiFF4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": 384, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 504, + "top": 344, + "width": 217.74609375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9Uqrl6xijlVE=" + }, + "nameLabel": { + "$ref": "AAAAAAF9Uqrl6xiklgQ=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9Uqrl6xilnV4=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9Uqrl6ximV7Q=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 504, + "top": 344, + "width": 217.74609375, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9Uqrl6xiiFF4=" + } + }, + { + "_type": "UMLActionView", + "_id": "AAAAAAF9UqvRRxjBdHk=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9UqvRRhi/uso=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAF9UqvRRxjCjr0=", + "_parent": { + "$ref": "AAAAAAF9UqvRRxjBdHk=" + }, + "model": { + "$ref": "AAAAAAF9UqvRRhi/uso=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAF9UqvRRxjDO3Y=", + "_parent": { + "$ref": "AAAAAAF9UqvRRxjCjr0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -48, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqvRRxjEK3A=", + "_parent": { + "$ref": "AAAAAAF9UqvRRxjCjr0=" + }, + "font": "Arial;13;1", + "left": 509, + "top": 295, + "width": 147.33544921875, + "height": 13, + "text": "All CollaborateurApiDto" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqvRRxjFpcI=", + "_parent": { + "$ref": "AAAAAAF9UqvRRxjCjr0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -48, + "width": 86.6708984375, + "height": 13, + "text": "(from Activity1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAF9UqvRRxjGq/A=", + "_parent": { + "$ref": "AAAAAAF9UqvRRxjCjr0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -48, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 504, + "top": 288, + "width": 157.33544921875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAF9UqvRRxjDO3Y=" + }, + "nameLabel": { + "$ref": "AAAAAAF9UqvRRxjEK3A=" + }, + "namespaceLabel": { + "$ref": "AAAAAAF9UqvRRxjFpcI=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9UqvRRxjGq/A=" + } + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 504, + "top": 288, + "width": 157.33544921875, + "height": 41, + "nameCompartment": { + "$ref": "AAAAAAF9UqvRRxjCjr0=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9Uq0TphjdGfM=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9Uq0TpRjcQV0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0Tphje4vQ=", + "_parent": { + "$ref": "AAAAAAF9Uq0TphjdGfM=" + }, + "model": { + "$ref": "AAAAAAF9Uq0TpRjcQV0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 585, + "top": 402, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9Uq0TphjdGfM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0Tphjf4lM=", + "_parent": { + "$ref": "AAAAAAF9Uq0TphjdGfM=" + }, + "model": { + "$ref": "AAAAAAF9Uq0TpRjcQV0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 570, + "top": 398, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9Uq0TphjdGfM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0TphjgmXs=", + "_parent": { + "$ref": "AAAAAAF9Uq0TphjdGfM=" + }, + "model": { + "$ref": "AAAAAAF9Uq0TpRjcQV0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 614, + "top": 409, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9Uq0TphjdGfM=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9Uqrl6xihHYk=" + }, + "tail": { + "$ref": "AAAAAAF9Uqo6JhhBUAg=" + }, + "lineStyle": 1, + "points": "594:439;607:385", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9Uq0Tphje4vQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9Uq0Tphjf4lM=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9Uq0TphjgmXs=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9Uq0ZNxjuB4g=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9Uq0ZNxjtMCI=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0ZNxjvH6o=", + "_parent": { + "$ref": "AAAAAAF9Uq0ZNxjuB4g=" + }, + "model": { + "$ref": "AAAAAAF9Uq0ZNxjtMCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 583, + "top": 337, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9Uq0ZNxjuB4g=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0ZNxjwCLU=", + "_parent": { + "$ref": "AAAAAAF9Uq0ZNxjuB4g=" + }, + "model": { + "$ref": "AAAAAAF9Uq0ZNxjtMCI=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 570, + "top": 344, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9Uq0ZNxjuB4g=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0ZNxjxtGg=", + "_parent": { + "$ref": "AAAAAAF9Uq0ZNxjuB4g=" + }, + "model": { + "$ref": "AAAAAAF9Uq0ZNxjtMCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 610, + "top": 322, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9Uq0ZNxjuB4g=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9UqvRRxjBdHk=" + }, + "tail": { + "$ref": "AAAAAAF9Uqrl6xihHYk=" + }, + "lineStyle": 1, + "points": "601:343;593:329", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9Uq0ZNxjvH6o=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9Uq0ZNxjwCLU=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9Uq0ZNxjxtGg=" + } + }, + { + "_type": "UMLControlFlowView", + "_id": "AAAAAAF9Uq0i6xj/UIM=", + "_parent": { + "$ref": "AAAAAAF9UqPaohevzgU=" + }, + "model": { + "$ref": "AAAAAAF9Uq0i6xj+Nqc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0i6xkA/b8=", + "_parent": { + "$ref": "AAAAAAF9Uq0i6xj/UIM=" + }, + "model": { + "$ref": "AAAAAAF9Uq0i6xj+Nqc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 455, + "top": 221, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9Uq0i6xj/UIM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0i6xkBe1s=", + "_parent": { + "$ref": "AAAAAAF9Uq0i6xj/UIM=" + }, + "model": { + "$ref": "AAAAAAF9Uq0i6xj+Nqc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 446, + "top": 233, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAF9Uq0i6xj/UIM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAF9Uq0i6xkCwto=", + "_parent": { + "$ref": "AAAAAAF9Uq0i6xj/UIM=" + }, + "model": { + "$ref": "AAAAAAF9Uq0i6xj+Nqc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 474, + "top": 198, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAF9Uq0i6xj/UIM=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAF9UqP1EBe6MME=" + }, + "tail": { + "$ref": "AAAAAAF9UqvRRxjBdHk=" + }, + "lineStyle": 1, + "points": "555:287;375:145", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAF9Uq0i6xkA/b8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAF9Uq0i6xkBe1s=" + }, + "propertyLabel": { + "$ref": "AAAAAAF9Uq0i6xkCwto=" + } + } + ] + } + ], + "nodes": [ + { + "_type": "UMLInitialNode", + "_id": "AAAAAAF9UqPuPBezyCs=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "InitialNode1" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9UqP1EBe4vXY=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "CollaborateursController - GetAllCollaborateur" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9UqQLeBfR2Fw=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "GenericsServices - GetAll - CollabApi" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9UqQRXxfqx+o=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "GenericRepository - GetAll - CollabSql" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9UqjGpxgks9w=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "Database Collaborateur_epa - Collaborateur" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9Uqo6JRg/Jv0=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "All CollaborateurSqlDto" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9Uqrl6xif0eU=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "All CollaborateurSqlDto.ToApiDto" + }, + { + "_type": "UMLAction", + "_id": "AAAAAAF9UqvRRhi/uso=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "name": "All CollaborateurApiDto" + } + ], + "edges": [ + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9UqrDlhhbSu4=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9UqP1EBe4vXY=" + }, + "target": { + "$ref": "AAAAAAF9UqQLeBfR2Fw=" + } + }, + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9UqrG0RhskJg=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9UqQLeBfR2Fw=" + }, + "target": { + "$ref": "AAAAAAF9UqQRXxfqx+o=" + } + }, + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9UqrLjhh95Ds=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9UqQRXxfqx+o=" + }, + "target": { + "$ref": "AAAAAAF9UqjGpxgks9w=" + } + }, + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9UqrQSxiOmvU=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9UqjGpxgks9w=" + }, + "target": { + "$ref": "AAAAAAF9Uqo6JRg/Jv0=" + } + }, + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9Uq0TpRjcQV0=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9Uqo6JRg/Jv0=" + }, + "target": { + "$ref": "AAAAAAF9Uqrl6xif0eU=" + } + }, + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9Uq0ZNxjtMCI=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9Uqrl6xif0eU=" + }, + "target": { + "$ref": "AAAAAAF9UqvRRhi/uso=" + } + }, + { + "_type": "UMLControlFlow", + "_id": "AAAAAAF9Uq0i6xj+Nqc=", + "_parent": { + "$ref": "AAAAAAF9UqPaoReu618=" + }, + "source": { + "$ref": "AAAAAAF9UqvRRhi/uso=" + }, + "target": { + "$ref": "AAAAAAF9UqP1EBe4vXY=" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/Documentation Services Collaborateur EPA/MCD/Compte rendu de réunion sur le MCD/QuestionsRéponses MCD.docx b/Documentation Services Collaborateur EPA/MCD/Compte rendu de réunion sur le MCD/QuestionsRéponses MCD.docx new file mode 100644 index 0000000..801bdfd Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/Compte rendu de réunion sur le MCD/QuestionsRéponses MCD.docx differ diff --git a/Documentation Services Collaborateur EPA/MCD/images/MCD original/MCD Original avec Suggestions.jpg b/Documentation Services Collaborateur EPA/MCD/images/MCD original/MCD Original avec Suggestions.jpg new file mode 100644 index 0000000..6b4f735 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/images/MCD original/MCD Original avec Suggestions.jpg differ diff --git a/Documentation Services Collaborateur EPA/MCD/images/MCD original/MCD Original.jpg b/Documentation Services Collaborateur EPA/MCD/images/MCD original/MCD Original.jpg new file mode 100644 index 0000000..c75c107 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/images/MCD original/MCD Original.jpg differ diff --git a/Documentation Services Collaborateur EPA/MCD/images/MCD v1/Looping MCD v1.jpg b/Documentation Services Collaborateur EPA/MCD/images/MCD v1/Looping MCD v1.jpg new file mode 100644 index 0000000..035df55 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/images/MCD v1/Looping MCD v1.jpg differ diff --git a/Documentation Services Collaborateur EPA/MCD/images/MCD v2/Looping MCD v2.jpg b/Documentation Services Collaborateur EPA/MCD/images/MCD v2/Looping MCD v2.jpg new file mode 100644 index 0000000..bc013a9 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/images/MCD v2/Looping MCD v2.jpg differ diff --git a/Documentation Services Collaborateur EPA/MCD/images/MCD v2/mysqlWorkbenchImage v2.png b/Documentation Services Collaborateur EPA/MCD/images/MCD v2/mysqlWorkbenchImage v2.png new file mode 100644 index 0000000..79f40fc Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/images/MCD v2/mysqlWorkbenchImage v2.png differ diff --git a/Documentation Services Collaborateur EPA/MCD/images/MCD v3/Looping MCD.jpg b/Documentation Services Collaborateur EPA/MCD/images/MCD v3/Looping MCD.jpg new file mode 100644 index 0000000..1bb6b47 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/images/MCD v3/Looping MCD.jpg differ diff --git a/Documentation Services Collaborateur EPA/MCD/looping/MCD v1/Looping MCD.lo1 b/Documentation Services Collaborateur EPA/MCD/looping/MCD v1/Looping MCD.lo1 new file mode 100644 index 0000000..5722842 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/looping/MCD v1/Looping MCD.lo1 differ diff --git a/Documentation Services Collaborateur EPA/MCD/looping/MCD v1/Looping MCD.loo b/Documentation Services Collaborateur EPA/MCD/looping/MCD v1/Looping MCD.loo new file mode 100644 index 0000000..8a8c976 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/looping/MCD v1/Looping MCD.loo differ diff --git a/Documentation Services Collaborateur EPA/MCD/looping/MCD v2/Looping MCD.lo1 b/Documentation Services Collaborateur EPA/MCD/looping/MCD v2/Looping MCD.lo1 new file mode 100644 index 0000000..cda4440 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/looping/MCD v2/Looping MCD.lo1 differ diff --git a/Documentation Services Collaborateur EPA/MCD/looping/MCD v2/Looping MCD.loo b/Documentation Services Collaborateur EPA/MCD/looping/MCD v2/Looping MCD.loo new file mode 100644 index 0000000..cda4440 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/looping/MCD v2/Looping MCD.loo differ diff --git a/Documentation Services Collaborateur EPA/MCD/looping/MCD v3/Looping MCD.lo1 b/Documentation Services Collaborateur EPA/MCD/looping/MCD v3/Looping MCD.lo1 new file mode 100644 index 0000000..4d6b13f Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/looping/MCD v3/Looping MCD.lo1 differ diff --git a/Documentation Services Collaborateur EPA/MCD/looping/MCD v3/Looping MCD.loo b/Documentation Services Collaborateur EPA/MCD/looping/MCD v3/Looping MCD.loo new file mode 100644 index 0000000..70b75bb Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/looping/MCD v3/Looping MCD.loo differ diff --git a/Documentation Services Collaborateur EPA/MCD/workbench/EPA.mwb b/Documentation Services Collaborateur EPA/MCD/workbench/EPA.mwb new file mode 100644 index 0000000..79b0c5c Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/workbench/EPA.mwb differ diff --git a/Documentation Services Collaborateur EPA/MCD/workbench/mysqlWorkbenchModel.mwb.bak b/Documentation Services Collaborateur EPA/MCD/workbench/mysqlWorkbenchModel.mwb.bak new file mode 100644 index 0000000..220eef9 Binary files /dev/null and b/Documentation Services Collaborateur EPA/MCD/workbench/mysqlWorkbenchModel.mwb.bak differ diff --git a/README.md b/README.md index 3fd1e29..c430b2b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,174 @@ -# Collaborateur_Epa_Compose_Doc +# Application Collaborateur-EPA -Regroupe la documentation ainsi que les fichiers communs du projet collaborateur-EPA, notamment le docker-compose. \ No newline at end of file +**Ce git contient la documentation de l'application Collaborateur-EPA de l'agence Tours-Orléans-Poitiers d'Apside. Il +contient également le docker-compose permettant de rapidement build le front et le back, ainsi que le script permettant +d'initialiser la base de données.** + +## Mise en préproduction + +Cette documentation contient les informations nécessaires pour déployer le front et le back de l'application +Collaborateur-EPA. + +Assurez-vous d'avoir bien cloné les 3 repositories du Git à la racine d'un dossier commun.Vous devez donc avoir un +dossier racine contenant ces dossiers : + +- Collaborateur_Epa_Compose_Doc +- Collaborateur_Epa_Back +- Collaborateur_Epa_Front + +:warning: **Il est très important de respecter le nommage ci-dessus, car docker-compose va naviguer entre vos fichiers +afin de build l'application. Si vos dossiers ne respectent pas ce nommage, docker-compose ne pourra pas build les image +sans être modifié** :warning: + +Sélectionnez bien les branches que vous souhaitez déployer dans les Git Front & Back + +Avant de commencer le déploiement, nous allons vérifiez que les routes utilisées dans l'application front sont bien +celles de la préproduction, et que le back utilise bien la base de données de la préproduction. + +Ensuite, nous verrons comment accéder à la base données. Enfin, vous verrez la procédure pour build, push et déployer +votre nouvelle version sur la préproduction d'Apside. + +## Vérification des configurations + +Il y a plusieurs façons de savoir si le front et bien lié au back de la préproduction : + +- si les données que vous récupérez sont identiques à la préproduction, +- si les routes dans les services de l'application sont bien celles de la préproduction, +- l'application doit pouvoir démarrer sans avoir un back local en route. + +Il est possible de voir si le back est lié à la BDD de préproduction en vérifiant le fichier appsettings.json. Dans ce +fichier, il y aura 2 lignes "ConnectionString", dont 1 commentée. A la fin de chaque ligne, vous verrez un commentaire +indiquant à quoi correspond celle-ci. Pour build en préproduction, dé-commentez la ligne de la préproduction et +commentez celle du déploiement local. + +Les images des applications front et back sont maintenant prêtes à être build. + +## Changements dans la base de données (optionnel) + +Avant de déployer une nouvelle version, il faut effectuer les changements **si nécessaire** dans la base de données de +la préproduction. L'accès à la base de données se fait sur Rancher, dans le cluster "Collaborateur-EPA", dans le +conteneur "database" du namespace "dev-collaborateur-epa" à l'aide de l'option "Execute Shell". Ensuite, la connection à +MySQL se fait avec : + +``` +mysql -uroot -proot collaborateur_epa +``` + +"collaborateur_epa" étant la base de données utilisée, il n'est pas obligatoire de l'ajouter à la commande, vous pouvez +choisir cette base dans un second temps. + +Il ne vous reste plus qu'à faire les modifications souhaitées afin que cette base corresponde à la nouvelle version. + +Passons maintenant au build des images front et back + +## Build les images + +Vous l'avez compris, nous utiliserons docker et surtout docker-compose dans la phase de build. Ceci est très fortement +recommandé, car divers problèmes auront lieu si vous tentez de build les images sans docker-compose, notamment pour +l'image du back. + +À partir d'un terminal, rendez-vous dans le dossier "Collaborateur_Epa_Compose_Doc". Lancez ensuite la commande : + +```docker-compose up --build``` + +Les images vont se build et vont se lancer selon la configuration du docker-compose. Vous pouvez bien entendu tester les +applications lancées individuellement, mais elles sont normalement configurées pour fonctionner avec la préproduction. + +Maintenant, couper les conteneurs (ctrl+c dans le terminal), une fois fait, entrez la commande : + +```docker-compose down``` + +Ceci détruira les conteneurs afin de vous éviter une surconsommation de ressource inutile, puisque nous nous intéressons +ici aux images, pas aux conteneurs. + +Nous allons voir comment push vos images sur le registry d'Apside, Harbor. + +## Push les images + +### Authentification sur Harbor + +:warning: Votre compte devra être autorisé sur le projet "collaborateur-epa" avant de pouvoir vous y connecter. +Renseignez-vous auprès de la DSI et des responsables du projet pour obtenir les accès.:warning: + +Afin de vous authentifier à Harbor, entrez la commande suivante : + +``` +docker login harbor.apsdigit.lan +``` + +Vous devrez ensuite entrer vos identifiants apsdigit (première lettre du prénom suivi du nom de famille en général), +puis votre mot de passe apsdigit correspondant. Pour rappel, il s'agit généralement du même mot de passe que celui de +votre poste. + +### Publication sur Harbor + +[Lien vers Harbor](https://harbor.apsdigit.lan/harbor/projects) + +Une fois authentifié, vous pouvez uploadez vos images sur Harbor en entrant la commande suivante : + +*Image Front* + +``` +docker push harbor.apsdigit.lan/collaborateur-epa/preprod/front:beta +``` + +*Image Back* + +``` +docker push harbor.apsdigit.lan/collaborateur-epa/preprod/api:beta +``` + +Si vous souhaitez changer le tag des images (ici "beta"), assurez-vous de le faire dans le docker-compose, et de le +faire également lors du push des images, vous aurez sinon des erreurs. + +Si une erreur d'authentification vous est retournée, assurez-vous que vos credentials ne soient pas expirés en +réeffectuant l'étape d'authentification expliquée plus tôt. + +Maintenant que les images sont sur Harbor, nous devons indiquer au namespace Kubernetes d'utiliser cette image. + +:warning: Sur Harbor il est possible de vérifier les vulnérabilités de chaque image du repository. Il est fortement +recommandé de ne déployer sur Kubernetes que des versions dont les vulnérabilités ont été reparées au maximum possible. +Il s'agit souvent de mises à jour de dépendances des packages utilisés par les applications.:warning: + +## Déploiement Kurbernetes sur Rancher + +[Lien vers le cluster Kubernetes sur Rancher](https://rancher.apsdigit.lan/p/c-cxs28:p-f7tpc/workloads) +[Lien vers la préproduction](https://collaborateur-epa.apsdigit.lan/) + +Il y a deux cas à différencier sur Kubernetes lorsque l'on veut déployer une nouvelle version de l'application. + +Placez-vous dans Rancher dans le cluster Collaborateur-EPA pour suivre la procédure suivante. + +### Cas 1 : Tags identiques + +Si les tags de vos images sont identiques, alors la manipulation est si simple qu'on a pas besoin d'utiliser notre +cerveau, la moelle épinière suffit ! + +- Cliquez sur les 3 petits points verticaux sur la ligne de l'application que vous voulez mettre à jour, +- Cliquez sur "Redeploy", +- C'est terminé, attendez quelques minutes, puis rafraichissez le site dans votre navigateur pour vérifier que tout + s'est bien passé. + +### Cas 2 : Tags différents + +Si les tags de vos images sont différents, alors la manipulation est à peine plus complexe : + +- Cliquez sur les 3 petits points verticaux sur la ligne de l'application que vous voulez mettre à jour, +- Cliquez sur "Edit", +- Dans le champs de texte sous "Docker Image" modifiez le tag pour qu'il corresponde à celui de votre image, +- En bas de la page cliquez sur le bouton "Save", +- C'est terminé, attendez quelques minutes, puis rafraichissez le site dans votre navigateur pour vérifier que tout + s'est bien passé. + +Pour rappel, le tag d'une image docker est la partie **après** les ":" . +Il n'est pas recommandé de modifier le nom complet de l'image, puisque tout est déjà configuré pour fonctionner tel +quel. Le tag peut être modifié pour indiquer différentes versions, et peut s'avérer utile en cas d'audit ou de +déploiement versionné. + +A l'instant où votre manipulation est terminée, vous devriez voir deux pods sur le conteneur que vous avez mis à jour, +un en cours de fermeture (removing) et un en déploiement. Kubernetes gère automatiquement les redéploiements afin que le +service ne soit pas ou peu interrompu. Par exemple, si le front n'arrive pas à compiler sur votre nouvelle version, le +conteneur gardera l'ancienne version et vous pourrez accéder aux logs du pod n'ayant pas réussi à se lancer afin +d'identifier le problème. + +En cas de problème avec Rancher ou Harbor, vous pouvez contacter la DSI d'Apside afin d'obtenir de l'aide. diff --git a/db/init_db.sql b/db/init_db.sql new file mode 100644 index 0000000..b8386da --- /dev/null +++ b/db/init_db.sql @@ -0,0 +1,99 @@ +SET @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS, UNIQUE_CHECKS = 0; +SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0; +SET @OLD_SQL_MODE = @@SQL_MODE, SQL_MODE = + 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +DROP DATABASE IF EXISTS collaborateur_epa; +CREATE DATABASE IF NOT EXISTS collaborateur_epa /*!40100 DEFAULT CHARACTER SET latin1 */; +USE collaborateur_epa; + +DROP TABLE IF EXISTS businessunit; +CREATE TABLE IF NOT EXISTS businessunit +( + Id int NOT NULL AUTO_INCREMENT, + Name varchar(100) NOT NULL UNIQUE, + PRIMARY KEY (Id) +); + +DROP TABLE IF EXISTS agence; +CREATE TABLE IF NOT EXISTS agence +( + Id int NOT NULL AUTO_INCREMENT, + Name varchar(100) NOT NULL UNIQUE, + BusinessUnitId int NOT NULL, + CONSTRAINT FK_BUSINESS_UNIT_AGENCE FOREIGN KEY (BusinessUnitId) references businessunit (Id), + PRIMARY KEY (Id) +); + +DROP TABLE IF EXISTS collaborateur; +CREATE TABLE IF NOT EXISTS collaborateur +( + Id int NOT NULL AUTO_INCREMENT, + Name varchar(100) NOT NULL, + FirstName varchar(100) NOT NULL, + BirthDate date NOT NULL, + Gender ENUM ('masculin','feminin','autre') NOT NULL DEFAULT 'masculin', + Status ENUM ('cadre','noncadre','alternant','stagiaire') NOT NULL DEFAULT 'noncadre', + ChildrenNumber smallint NOT NULL, + Address varchar(200) NOT NULL, + Telephone varchar(15) NOT NULL, + PersonalMail varchar(100) NOT NULL, + ApsideMail varchar(100) NOT NULL UNIQUE, + ResignationDate date, + businessunitId int NOT NUll, + CONSTRAINT FK_COLLABORATEUR_BUSINESSUNIT FOREIGN KEY (businessunitId) REFERENCES businessunit (Id), + PRIMARY KEY (Id) +); + +DROP TABLE IF EXISTS referencement; +CREATE TABLE IF NOT EXISTS referencement +( + Id int NOT NULL AUTO_INCREMENT, + StartingDate date NOT NULL, + EndingDate date, + ReferredId int NOT NULL, + ReferrerId int NOT NULL, + CONSTRAINT FK_REFERENCEMENT_REFERRED FOREIGN KEY (ReferredId) REFERENCES collaborateur (Id), + CONSTRAINT FK_REFERENCEMENT_REFERRER FOREIGN KEY (ReferrerId) REFERENCES collaborateur (Id), + PRIMARY KEY (Id) +); + +DROP TABLE IF EXISTS periodeessai; +CREATE TABLE IF NOT EXISTS `periodeessai` +( + `Id` int(11) NOT NULL AUTO_INCREMENT, + `StartingDate` date NOT NULL, + `PlannedEndingDate` date NOT NULL, + `RealEndingDate` date, + `Comment` varchar(100), + `Issue` enum ('VALIDEE','PROLONGEE_COLLAB','PROLONGEE_APSIDE','ARRETEE_COLLAB','ARRETEE_APSIDE','INDETERMINEE'), + `CollaborateurId` int(11) NOT NULL, + PRIMARY KEY (`Id`), + KEY `FK_COLLABORATEUR_PERIODEESSAI` (`CollaborateurId`), + CONSTRAINT `FK_COLLABORATEUR_PERIODEESSAI` FOREIGN KEY (`CollaborateurId`) REFERENCES `collaborateur` (`Id`) +); + + +INSERT INTO businessunit(Name) +VALUES ('Business Unit Clermont-Ferrand'); +INSERT INTO agence(Name, BusinessUnitId) +VALUES ('Cournon', 1); + +INSERT INTO businessunit(Name) +VALUES ('Business Unit TOP'); +INSERT INTO agence(Name, BusinessUnitId) +VALUES ('Tours', 2); + + +INSERT INTO collaborateur(Name, FirstName, BirthDate, Gender, Status, ChildrenNumber, Address, Telephone, PersonalMail, + ApsideMail, ResignationDate, businessunitId) +VALUES ('RUIZ', 'Alexandre', '1990-07-07', 'masculin', 'cadre', 0, 'adresse', 'tel', 'alexandre.ruiz@gmail.com', 'alexandre.ruiz@apside-groupe.com', null, 1), + ('FERRERE', 'Clément', '2000-08-30', 'masculin', 'noncadre', 0, 'adresse', 'tel', 'clement.ferrere@gmail.com', + 'clement.ferrere@apside-groupe.com', null, 1); + +INSERT INTO referencement(StartingDate, EndingDate, ReferredId, ReferrerId) +VALUES ('2021-08-09', null, 1, 2); + +SET SQL_MODE = @OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS = @OLD_UNIQUE_CHECKS; \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 0000000..12f1cd6 --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,11 @@ +version: '3.4' + +services: + api: + environment: + - ASPNETCORE_ENVIRONMENT=Development + - ASPNETCORE_URLS=https://+:443;http://+:80 + - ASPNETCORE_Kestrel__Certificates__Default__Password=password + - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx + volumes: + - ~/.aspnet/https:/https:ro \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e074589 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: '3.4' + +volumes: + data-volume: {} + +services: + + database: + image: "mariadb:10.7.1" + restart: always + ports: + - "3307:3306" + environment: + - MYSQL_DATABASE=${DATABASE_NAME} + - MYSQL_USERNAME=${APP_DB_USERNAME} + - MYSQL_PASSWORD=${APP_DB_PASSWORD} + - MYSQL_ROOT_PASSWORD=${APP_DB_ROOT_PASSWORD} + volumes: + - data-volume:/var/lib/mysql + - ./db/init_db.sql:/docker-entrypoint-initdb.d/init.sql + + api: + image: ${DOCKER_REGISTRY-}harbor.apsdigit.lan/collaborateur-epa/preprod/api:beta + build: + context: ./../Collaborateur_Epa_Back/Collaborateur_Epa_Back + dockerfile: espacecollab.backend.api/Dockerfile + ports: + - "5000:80" + - "5001:443" + links: + - database + environment: + - DATABASE_HOSTNAME=database + - DATABASE_PORT=3307 + - DATABASE_NAME=${DATABASE_NAME} + - DATABASE_USERNAME=${APP_DB_USERNAME} + - DATABASE_PASSWORD=${APP_DB_PASSWORD} + + + front: + image: ${DOCKER_REGISTRY-}harbor.apsdigit.lan/collaborateur-epa/preprod/front:beta + build: + context: ./../Collaborateur_Epa_Front + dockerfile: ./Dockerfile + ports: + - "8083:80" + links: + - api \ No newline at end of file