---
type: archive
source: OneNote PA-Perso
periode: 2019-2026
---

# Notes techniques - Import OneNote

## SQL (22 mai 2020)

Index clustered :
Index ordonné, 1 index par table

Plan de formation

Bonnes pratiques

- : Limiter le nombre de colonnes retournés

  - idéal

- Over Indexing : Ne jamais créer des index pour rien
- Duplicate Index :

Management -

---

## Linux Ubuntu (25 avril 2024)

Formation 1

---

## WSL (4 novembre 2025)

Installation

wsl.exe --install Ubuntu-24.04

sudo apt install -y curl git zip unzip

sudo apt install php

  - PHP & extensions indispensables

sudo apt update

sudo apt install -y php php-cli php-xml php-mbstring php-zip php-curl php-intl php-sqlite3 php-mysql unzip git

php -v

  - Composer

composer -V || {

cd ~

php -r "copy('https://getcomposer.org/installer','composer-setup.php');"

php composer-setup.php

sudo mv composer.phar /usr/local/bin/composer

composer -V

}

  - Symfony CLI (recommandé)

curl -sS https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh | sudo bash

sudo apt install -y symfony-cli

symfony -v

1) Installer Composer (si besoin)

composer -V || {

cd ~

php -r "copy('https://getcomposer.org/installer','composer-setup.php');"

php composer-setup.php

sudo mv composer.phar /usr/local/bin/composer

composer -V

}

2) Installer les vendors du projet

Place-toi à la racine du projet (celle qui contient composer.json) :

cd /mnt/d/travail/cockpit/cockpit-api

  # Si tu as un composer.lock :

composer install --no-interaction

  # S’il n’y a PAS de composer.lock (ou projet tout neuf) :

  # composer update --no-interaction

---

## EfCore (9 mai 2022)

Amorcage des données
- Data Seed : https://docs.microsoft.com/en-us/ef/core/modeling/data-seeding

set ASPNETCORE_ENVIRONMENT='Development.PA'

Update-database
20220818151253_Alerte_V2

Installation
du tool global

---

## Dapper (26 janvier 2023)

Products/GetProductById

I6TM47

(4673.7
ms)

Thu, 26 Jan 2023 16:35:30 GMT

duration (ms)

sql (ms)

https://prod.yeswehome.6tm.eu/api/v1.0/products/645a334c-70d4-4d04-8d2d-614f9d0dac44

2.9

0.9 (1)

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

4667.9

4200.9 (10)

sql:

89.9 %

more columns show trivial

Call Type

Step

Duration (from start)

Call Stack

Command

sql - Open

https://prod.yeswehome.6tm.eu/api/v1.0/products/645a334c-70d4-4d04-8d2d-614f9d0dac44

0.2 ms (T+1.5 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

https://prod.yeswehome.6tm.eu/api/v1.0/products/645a334c-70d4-4d04-8d2d-614f9d0dac44

0.5 ms (T+1.7 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECTTOP(1) [c].[Id], [c].[Actif], [c].[AdresseID], [c].[ClientParentID], [c].[DateCreation], [c].[DateLastSynchro], [c].[DateUpdate], [c].[DistributeurID], [c].[FormeJuridique], [c].[IdentifiantExterne], [c].[IsSynchronizationRunning], [c].[Logo], [c].[Nom], [c].[PaysID], [c].[TypesDeStructure]

FROM[Clients] AS[c]

WHERE[c].[Id] = 2de82684-e644-418f-9385-9c7d574ec15e

sql - Close

https://prod.yeswehome.6tm.eu/api/v1.0/products/645a334c-70d4-4d04-8d2d-614f9d0dac44

0.2 ms (T+2.4 ms)

SingleOrDefault > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4.8 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.6 ms (T+5.1 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[t].[Id], [t].[Actif], [t].[AffichageDimensionEpaisseur], [t].[CatalogueID], [t].[ClasseEnergetique], [t].[CodeEAN], [t].[CodeEANDeRemplacement], [t].[CodeEANEquivalent], [t].[CodeTransport], [t].[DateCreation], [t].[DateUpdate], [t].[Description], [t].[Duree], [t].[Hashtags], [t].[IdentifiantExterne], [t].[IsDecline], [t].[Libelle], [t].[MarqueID], [t].[ParentId], [t].[PiecesDetachesCommentaire], [t].[PiecesDetachesDuree], [t].[Points], [t].[PointsDePose], [t].[PointsDeSacem], [t].[PrixConseille], [t].[ReferenceCommande], [t].[ReferenceFabriquant], [t].[ReferenceInterne], [t].[Relation], [t].[Sens], [t].[Statut], [t].[TvaTaux], [t].[TvaTauxReduit], [t].[UniteDeVente], [p0].[Id], [p0].[Actif], [p0].[AffichageDimensionEpaisseur], [p0].[CatalogueID], [p0].[ClasseEnergetique], [p0].[CodeEAN], [p0].[CodeEANDeRemplacement], [p0].[CodeEANEquivalent], [p0].[CodeTransport], [p0].[DateCreation], [p0].[DateUpdate], [p0].[Description], [p0].[Duree], [p0].[Hashtags], [p0].[IdentifiantExterne], [p0].[IsDecline], [p0].[Libelle], [p0].[MarqueID], [p0].[ParentId], [p0].[PiecesDetachesCommentaire], [p0].[PiecesDetachesDuree], [p0].[Points], [p0].[PointsDePose], [p0].[PointsDeSacem], [p0].[PrixConseille], [p0].[ReferenceCommande], [p0].[ReferenceFabriquant], [p0].[ReferenceInterne], [p0].[Relation], [p0].[Sens], [p0].[Statut], [p0].[TvaTaux], [p0].[TvaTauxReduit], [p0].[UniteDeVente]

FROM(

SELECTTOP(1) [p].[Id], [p].[Actif], [p].[AffichageDimensionEpaisseur], [p].[CatalogueID], [p].[ClasseEnergetique], [p].[CodeEAN], [p].[CodeEANDeRemplacement], [p].[CodeEANEquivalent], [p].[CodeTransport], [p].[DateCreation], [p].[DateUpdate], [p].[Description], [p].[Duree], [p].[Hashtags], [p].[IdentifiantExterne], [p].[IsDecline], [p].[Libelle], [p].[MarqueID], [p].[ParentId], [p].[PiecesDetachesCommentaire], [p].[PiecesDetachesDuree], [p].[Points], [p].[PointsDePose], [p].[PointsDeSacem], [p].[PrixConseille], [p].[ReferenceCommande], [p].[ReferenceFabriquant], [p].[ReferenceInterne], [p].[Relation], [p].[Sens], [p].[Statut], [p].[TvaTaux], [p].[TvaTauxReduit], [p].[UniteDeVente]

FROM[Produits] AS[p]

WHERE[p].[Id] = 645a334c-70d4-4d04-8d2d-614f9d0dac44

) AS[t]

LEFTJOIN[Produits] AS[p0] ON[t].[Id] = [p0].[ParentId]

ORDERBY[t].[Id], [p0].[Id]

232.70 ms

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync — 232.70 ms

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+238.4 ms)

SingleOrDefault > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.3 ms (T+240.1 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

189.4 ms (T+240.5 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[t0].[Libelle], [t0].[CaracteristiquesDistributeurID] AS[Id], [t0].[Valeur], [t0].[Ordre]

FROM(

SELECTDISTINCT[c].[Libelle], [p1].[CaracteristiquesDistributeurID], [p1].[Valeur], [c].[Ordre]

FROM[Produits] AS[p]

INNERJOIN[Produits] AS[p0] ON[p].[Id] = [p0].[ParentId]

INNERJOIN[ProduitCaracteristiqueDistributeurs] AS[p1] ON[p0].[Id] = [p1].[ProduitID]

INNERJOIN[CaracteristiqueDistributeurs] AS[c] ON[p1].[CaracteristiquesDistributeurID] = [c].[Id]

WHERE(([p].[Id] = 645a334c-70d4-4d04-8d2d-614f9d0dac44) AND([p].[Actif] = CAST(1ASbit))) ANDEXISTS(

SELECT1FROM[Produits] AS[p2]

INNERJOIN(

SELECT[p3].[ProduitID], [p3].[CaracteristiquesDistributeurID], [p3].[DateCreation], [p3].[DateUpdate], [p3].[Id], [p3].[IsDeclinable], [p3].[Valeur]

FROM[ProduitCaracteristiqueDistributeurs] AS[p3]

WHERE[p3].[IsDeclinable] = CAST(1ASbit)

) AS[t] ON[p2].[Id] = [t].[ProduitID]

WHERE([p2].[Id] = 645a334c-70d4-4d04-8d2d-614f9d0dac44) AND([t].[CaracteristiquesDistributeurID] = [p1].[CaracteristiquesDistributeurID]))

) AS[t0]

ORDERBY[t0].[Ordre]

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+430.4 ms)

GetDeclinableCaract > ToList > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

37.20 ms

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync — 37.20 ms

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+468.0 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

4.30 ms

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync — 4.30 ms

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

383.8 ms (T+472.7 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[t].[Id], [t].[Actif], [t].[AffichageDimensionEpaisseur], [t].[CatalogueID], [t].[ClasseEnergetique], [t].[CodeEAN], [t].[CodeEANDeRemplacement], [t].[CodeEANEquivalent], [t].[CodeTransport], [t].[DateCreation], [t].[DateUpdate], [t].[Description], [t].[Duree], [t].[Hashtags], [t].[IdentifiantExterne], [t].[IsDecline], [t].[Libelle], [t].[MarqueID], [t].[ParentId], [t].[PiecesDetachesCommentaire], [t].[PiecesDetachesDuree], [t].[Points], [t].[PointsDePose], [t].[PointsDeSacem], [t].[PrixConseille], [t].[ReferenceCommande], [t].[ReferenceFabriquant], [t].[ReferenceInterne], [t].[Relation], [t].[Sens], [t].[Statut], [t].[TvaTaux], [t].[TvaTauxReduit], [t].[UniteDeVente], [t].[Id0], [p2].[ProduitID], [p2].[CaracteristiquesDistributeurID], [p2].[DateCreation], [p2].[DateUpdate], [p2].[Id], [p2].[IsDeclinable], [p2].[Valeur]

FROM(

SELECTTOP(1) [p0].[Id], [p0].[Actif], [p0].[AffichageDimensionEpaisseur], [p0].[CatalogueID], [p0].[ClasseEnergetique], [p0].[CodeEAN], [p0].[CodeEANDeRemplacement], [p0].[CodeEANEquivalent], [p0].[CodeTransport], [p0].[DateCreation], [p0].[DateUpdate], [p0].[Description], [p0].[Duree], [p0].[Hashtags], [p0].[IdentifiantExterne], [p0].[IsDecline], [p0].[Libelle], [p0].[MarqueID], [p0].[ParentId], [p0].[PiecesDetachesCommentaire], [p0].[PiecesDetachesDuree], [p0].[Points], [p0].[PointsDePose], [p0].[PointsDeSacem], [p0].[PrixConseille], [p0].[ReferenceCommande], [p0].[ReferenceFabriquant], [p0].[ReferenceInterne], [p0].[Relation], [p0].[Sens], [p0].[Statut], [p0].[TvaTaux], [p0].[TvaTauxReduit], [p0].[UniteDeVente], [p].[Id] AS[Id0]

FROM[Produits] AS[p]

INNERJOIN[Produits] AS[p0] ON[p].[Id] = [p0].[ParentId]

WHERE([p].[Id] = 645a334c-70d4-4d04-8d2d-614f9d0dac44) AND((

SELECTCOUNT(*)

FROM[ProduitCaracteristiqueDistributeurs] AS[p1]

WHERE([p0].[Id] = [p1].[ProduitID]) ANDEXISTS(

SELECT1FROM(

SELECTTOP(<R><V Guid0="b9ce7697-d3c7-4a3b-b06c-2e3db6b1f255"String0="2"/><V Guid0="00659f66-65d7-433a-ba8a-29f926b77d99"String0="Gauche"/><V Guid0="bebb9f7b-5c97-40f0-82e4-9b2730a67910"String0="J&#x20;-&#x20;Jazz"/><V Guid0="fc6af0c1-66c5-4ba3-a858-ea50110f6165"String0="DON&#x20;GIOVANNI"/></R>)

I.value('@Guid0[1] cast as xs:string?', 'uniqueidentifier') AS[Guid0],

I.value('@String0[1] cast as xs:string?', 'varchar(max)') AS[String0]

FROM<R><V Guid0="b9ce7697-d3c7-4a3b-b06c-2e3db6b1f255"String0="2"/><V Guid0="00659f66-65d7-433a-ba8a-29f926b77d99"String0="Gauche"/><V Guid0="bebb9f7b-5c97-40f0-82e4-9b2730a67910"String0="J&#x20;-&#x20;Jazz"/><V Guid0="fc6af0c1-66c5-4ba3-a858-ea50110f6165"String0="DON&#x20;GIOVANNI"/></R>.nodes('/R/V') N(I)

) AS[q]

WHERE([q].[Guid0] = [p1].[CaracteristiquesDistributeurID]) AND([q].[String0] = [p1].[Valeur]))) = 4)

ORDERBY[p0].[DateCreation]

) AS[t]

LEFTJOIN[ProduitCaracteristiqueDistributeurs] AS[p2] ON[t].[Id] = [p2].[ProduitID]

ORDERBY[t].[DateCreation], [t].[Id0], [t].[Id], [p2].[ProduitID], [p2].[CaracteristiquesDistributeurID]

40.00 ms

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync — 40.00 ms

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+896.5 ms)

SingleOrDefault > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

8.80 ms

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync — 8.80 ms

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.3 ms (T+905.7 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

1551.1 ms (T+906.4 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[t0].[Libelle], [t0].[CaracteristiquesDistributeurID] AS[Id], [t0].[Valeur], [t0].[Ordre]

FROM(

SELECTDISTINCT[c].[Libelle], [p1].[CaracteristiquesDistributeurID], [p1].[Valeur], [c].[Ordre]

FROM[Produits] AS[p]

INNERJOIN[Produits] AS[p0] ON[p].[Id] = [p0].[ParentId]

INNERJOIN[ProduitCaracteristiqueDistributeurs] AS[p1] ON[p0].[Id] = [p1].[ProduitID]

INNERJOIN[CaracteristiqueDistributeurs] AS[c] ON[p1].[CaracteristiquesDistributeurID] = [c].[Id]

WHERE((([p].[Id] = 645a334c-70d4-4d04-8d2d-614f9d0dac44) AND([p].[Actif] = CAST(1ASbit))) AND((

SELECTCOUNT(*)

FROM[ProduitCaracteristiqueDistributeurs] AS[p2]

WHERE([p0].[Id] = [p2].[ProduitID]) ANDEXISTS(

SELECT1FROM(

SELECTTOP(<R><V Guid0="b9ce7697-d3c7-4a3b-b06c-2e3db6b1f255"String0="2"/><V Guid0="00659f66-65d7-433a-ba8a-29f926b77d99"String0="Gauche"/><V Guid0="bebb9f7b-5c97-40f0-82e4-9b2730a67910"String0="J&#x20;-&#x20;Jazz"/><V Guid0="fc6af0c1-66c5-4ba3-a858-ea50110f6165"String0="DON&#x20;GIOVANNI"/></R>)

I.value('@Guid0[1] cast as xs:string?', 'uniqueidentifier') AS[Guid0],

I.value('@String0[1] cast as xs:string?', 'varchar(max)') AS[String0]

FROM<R><V Guid0="b9ce7697-d3c7-4a3b-b06c-2e3db6b1f255"String0="2"/><V Guid0="00659f66-65d7-433a-ba8a-29f926b77d99"String0="Gauche"/><V Guid0="bebb9f7b-5c97-40f0-82e4-9b2730a67910"String0="J&#x20;-&#x20;Jazz"/><V Guid0="fc6af0c1-66c5-4ba3-a858-ea50110f6165"String0="DON&#x20;GIOVANNI"/></R>.nodes('/R/V') N(I)

) AS[q]

WHERE([q].[Guid0] = [p2].[CaracteristiquesDistributeurID]) AND([q].[String0] = [p2].[Valeur]))) = 4)) ANDEXISTS(

SELECT1FROM[Produits] AS[p3]

INNERJOIN(

SELECT[p4].[ProduitID], [p4].[CaracteristiquesDistributeurID], [p4].[DateCreation], [p4].[DateUpdate], [p4].[Id], [p4].[IsDeclinable], [p4].[Valeur]

FROM[ProduitCaracteristiqueDistributeurs] AS[p4]

WHERE[p4].[IsDeclinable] = CAST(1ASbit)

) AS[t] ON[p3].[Id] = [t].[ProduitID]

WHERE([p3].[Id] = 645a334c-70d4-4d04-8d2d-614f9d0dac44) AND([t].[CaracteristiquesDistributeurID] = [p1].[CaracteristiquesDistributeurID]))

) AS[t0]

ORDERBY[t0].[Ordre]

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+2457.7 ms)

GetDeclinableCaract > ToList > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.3 ms (T+2460.0 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

2067.3 ms (T+2460.4 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[t3].[c], [t3].[Id], [t3].[Libelle], [t3].[Id0], [t3].[Libelle0], [t3].[Id1], [t3].[Nom], [t3].[c0], [t3].[Points], [t3].[Id2], [t3].[Libelle1], [t3].[PrixConseille], [t3].[ParentId], [t3].[c1], [t3].[ReferenceFabriquant], [t3].[c2], [t3].[ReferenceCommande], [t3].[Id3], [t3].[Libelle2], [t3].[c3], [t3].[c4], [t3].[Libelle3], [t3].[Description], [t3].[ReferenceFabriquant0], [t3].[c5], [t3].[Id4], [t3].[Id5], [t3].[Id6], [t3].[RegroupementID], [t3].[ProduitID], [t3].[Id7], [t4].[Id], [t4].[DateCreation], [t4].[DateUpdate], [t4].[DistributeurId], [t4].[HasValues], [t4].[IdentifiantExterne], [t4].[Libelle], [t4].[Ordre], [t4].[Theme], [t4].[TypeMetier], [t4].[ProduitID], [t4].[CaracteristiquesDistributeurID], [t4].[CaracteristiquePimID], [t4].[CaracteristiqueDistributeurID], [t4].[DateCreation0], [t4].[DateUpdate0], [t4].[Id0], [t5].[TypeDeFichier], [t5].[Ordre], [t5].[URL], [t5].[Description], [t5].[Libelle], [t5].[Id], [p4].[Id], [p4].[Actif], [p4].[ClientAcheteurID], [p4].[DateCreation], [p4].[DateUpdate], [p4].[Description], [p4].[Libelle], [p4].[Ordre], [p4].[ProduitID], [p4].[TypeDeFichier], [p4].[URL], [t6].[TypeDeFichier], [t6].[Ordre], [t6].[URL], [t6].[Description], [t6].[Libelle], [t6].[Id], [p6].[Id], CAST([p6].[TypeEcotaxeId] ASint), [p6].[Code], [p6].[MontantHt], [p6].[MontantTtc], [p6].[ProduitID], [p6].[TypeEcotaxeId], [t7].[Id], [t7].[ClientID], [t7].[DateCreation], [t7].[DateUpdate], [t7].[IdentifiantExterne], [t7].[Libelle], [t7].[Ordre], [t7].[Theme], [t7].[Valeur], [t7].[IsDeclinable], [t7].[Id0], [t8].[Id], [t8].[DateCreation], [t8].[DateUpdate], [t8].[DistributeurId], [t8].[HasValues], [t8].[IdentifiantExterne], [t8].[Libelle], [t8].[Ordre], [t8].[Theme], [t8].[TypeMetier], [t8].[Valeur], [t8].[IsDeclinable], [t8].[ProduitID], [t8].[CaracteristiquesDistributeurID], [t8].[CaracteristiquePimID], [t8].[CaracteristiqueDistributeurID], [t8].[DateCreation0], [t8].[DateUpdate0], [t8].[Id0], [t10].[Id], [t10].[Code], [t10].[ProduitID], [t10].[NomenclatureID], [t10].[Id0], [t10].[NomenclaturePimID], [t10].[NomenclatureDistributeurID], [c5].[Id], [c5].[ClientID], [c5].[DateCreation], [c5].[DateUpdate], [c5].[Description], [c5].[Libelle], [c5].[PrixConseille], [c5].[ProduitID], [c5].[ReferenceFabriquant]

FROM(

SELECTTOP(1) CASEWHEN[p].[ParentId] ISNULLTHENCAST(1ASbit)

ELSECAST(0ASbit)

ENDAS[c], [p0].[Id], [p0].[Libelle], [m].[Id] AS[Id0], [m].[Libelle] AS[Libelle0], [c0].[Id] AS[Id1], [c0].[Nom], COALESCE([p].[Description], N'') AS[c0], [p].[Points], [p].[Id] AS[Id2], [p].[Libelle] AS[Libelle1], [p].[PrixConseille], [p].[ParentId], COALESCE([p].[Hashtags], N'') AS[c1], [p].[ReferenceFabriquant], CASEWHEN[p1].[Id] ISNOTNULLTHENCAST(1ASbit)

ELSECAST(0ASbit)

ENDAS[c2], [p].[ReferenceCommande], [t0].[Id] AS[Id3], [t0].[Libelle] AS[Libelle2], [t0].[c] AS[c3], CASEWHENEXISTS(

SELECT1FROM[ClientProduitSurcharge] AS[c]

WHERE[p].[Id] = [c].[ProduitID]) THENCAST(1ASbit)

ELSECAST(0ASbit)

ENDAS[c4], [t2].[Libelle] AS[Libelle3], [t2].[Description], [t2].[ReferenceFabriquant] AS[ReferenceFabriquant0], [t2].[c] AS[c5], [d].[Id] AS[Id4], [a].[Id] AS[Id5], [p1].[Id] AS[Id6], [t0].[RegroupementID], [t0].[ProduitID], [t2].[Id] AS[Id7]

FROM[Produits] AS[p]

INNERJOIN[Catalogues] AS[c0] ON[p].[CatalogueID] = [c0].[Id]

INNERJOIN[Distributeurs] AS[d] ON[c0].[DistributeurID] = [d].[Id]

INNERJOIN[Adresses] AS[a] ON[d].[AdresseID] = [a].[Id]

INNERJOIN[Pays] AS[p0] ON[a].[PaysID] = [p0].[Id]

INNERJOIN[Marques] AS[m] ON[p].[MarqueID] = [m].[Id]

LEFTJOIN[Produits] AS[p1] ON[p].[ParentId] = [p1].[Id]

LEFTJOIN(

SELECT[t].[Id], [t].[Libelle], [t].[c], [t].[RegroupementID], [t].[ProduitID]

FROM(

SELECT[r0].[Id], [r0].[Libelle], 1AS[c], [r].[RegroupementID], [r].[ProduitID], ROW_NUMBER() OVER(PARTITIONBY[r].[ProduitID] ORDERBY[r].[RegroupementID], [r].[ProduitID], [r0].[Id]) AS[row]

FROM[RegroupementProduits] AS[r]

INNERJOIN[Regroupement] AS[r0] ON[r].[RegroupementID] = [r0].[Id]

) AS[t]

WHERE[t].[row] <= 1) AS[t0] ON[p].[Id] = [t0].[ProduitID]

LEFTJOIN(

SELECT[t1].[Libelle], [t1].[Description], [t1].[ReferenceFabriquant], [t1].[c], [t1].[Id], [t1].[ProduitID]

FROM(

SELECT[c1].[Libelle], [c1].[Description], [c1].[ReferenceFabriquant], 1AS[c], [c1].[Id], [c1].[ProduitID], ROW_NUMBER() OVER(PARTITIONBY[c1].[ProduitID] ORDERBY[c1].[Id]) AS[row]

FROM[ClientProduitSurcharge] AS[c1]

) AS[t1]

WHERE[t1].[row] <= 1) AS[t2] ON[p].[Id] = [t2].[ProduitID]

WHERE([p].[Id] = 1188a6a4-9558-4d63-b180-c76016bb7ef4) AND([p].[Actif] = CAST(1ASbit))

) AS[t3]

LEFTJOIN(

SELECT[c2].[Id], [c2].[DateCreation], [c2].[DateUpdate], [c2].[DistributeurId], [c2].[HasValues], [c2].[IdentifiantExterne], [c2].[Libelle], [c2].[Ordre], [c2].[Theme], [c2].[TypeMetier], [p2].[ProduitID], [p2].[CaracteristiquesDistributeurID], [m0].[CaracteristiquePimID], [m0].[CaracteristiqueDistributeurID], [m0].[DateCreation] AS[DateCreation0], [m0].[DateUpdate] AS[DateUpdate0], [m0].[Id] AS[Id0]

FROM[ProduitCaracteristiqueDistributeurs] AS[p2]

INNERJOIN[CaracteristiqueDistributeurs] AS[c2] ON[p2].[CaracteristiquesDistributeurID] = [c2].[Id]

LEFTJOIN[MappageCaracteristiquePimCaracteristiqueDistributeur] AS[m0] ON[c2].[Id] = [m0].[CaracteristiqueDistributeurID]

) AS[t4] ON[t3].[Id2] = [t4].[ProduitID]

LEFTJOIN(

SELECT[p3].[TypeDeFichier], [p3].[Ordre], [p3].[URL], [p3].[Description], [p3].[Libelle], [p3].[Id], [p3].[ProduitID]

FROM[ProduitFichiers] AS[p3]

WHERE[p3].[Actif] = CAST(1ASbit)

) AS[t5] ON[t3].[Id2] = [t5].[ProduitID]

LEFTJOIN[ProduitFichiers] AS[p4] ON[t3].[Id6] = [p4].[ProduitID]

LEFTJOIN(

SELECT[p5].[TypeDeFichier], [p5].[Ordre], [p5].[URL], [p5].[Description], [p5].[Libelle], [p5].[Id], [p5].[ProduitID]

FROM[ProduitFichiers] AS[p5]

WHERE[p5].[Actif] = CAST(1ASbit)

) AS[t6] ON[t3].[Id6] = [t6].[ProduitID]

LEFTJOIN[ProduitEcotaxe] AS[p6] ON[t3].[Id2] = [p6].[ProduitID]

LEFTJOIN(

SELECT[c3].[Id], [c3].[ClientID], [c3].[DateCreation], [c3].[DateUpdate], [c3].[IdentifiantExterne], [c3].[Libelle], [c3].[Ordre], [c3].[Theme], [p7].[Valeur], [p7].[IsDeclinable], [p7].[Id] AS[Id0], [p7].[ProduitID]

FROM[ProduitCaracteristiqueAcheteur] AS[p7]

INNERJOIN[CaracteristiquesAcheteur] AS[c3] ON[p7].[CaracteristiquesAcheteurID] = [c3].[Id]

) AS[t7] ON[t3].[Id2] = [t7].[ProduitID]

LEFTJOIN(

SELECT[c4].[Id], [c4].[DateCreation], [c4].[DateUpdate], [c4].[DistributeurId], [c4].[HasValues], [c4].[IdentifiantExterne], [c4].[Libelle], [c4].[Ordre], [c4].[Theme], [c4].[TypeMetier], [p8].[Valeur], [p8].[IsDeclinable], [p8].[ProduitID], [p8].[CaracteristiquesDistributeurID], [m1].[CaracteristiquePimID], [m1].[CaracteristiqueDistributeurID], [m1].[DateCreation] AS[DateCreation0], [m1].[DateUpdate] AS[DateUpdate0], [m1].[Id] AS[Id0]

FROM[ProduitCaracteristiqueDistributeurs] AS[p8]

INNERJOIN[CaracteristiqueDistributeurs] AS[c4] ON[p8].[CaracteristiquesDistributeurID] = [c4].[Id]

LEFTJOIN[MappageCaracteristiquePimCaracteristiqueDistributeur] AS[m1] ON[c4].[Id] = [m1].[CaracteristiqueDistributeurID]

) AS[t8] ON[t3].[Id2] = [t8].[ProduitID]

LEFTJOIN(

SELECT[t9].[Id], [t9].[Code], [p9].[ProduitID], [p9].[NomenclatureID], [n].[Id] AS[Id0], [t9].[NomenclaturePimID], [t9].[NomenclatureDistributeurID]

FROM[ProduitNomenclatureDistributeurs] AS[p9]

INNERJOIN[NomenclatureDistributeurs] AS[n] ON[p9].[NomenclatureID] = [n].[Id]

INNERJOIN(

SELECT[n0].[Id], [n0].[Code], [m2].[NomenclaturePimID], [m2].[NomenclatureDistributeurID]

FROM[MappageNomenclaturePimNomenclatureDistributeur] AS[m2]

INNERJOIN[NomenclaturePIMs] AS[n0] ON[m2].[NomenclaturePimID] = [n0].[Id]

) AS[t9] ON[n].[Id] = [t9].[NomenclatureDistributeurID]

) AS[t10] ON[t3].[Id2] = [t10].[ProduitID]

LEFTJOIN[ClientProduitSurcharge] AS[c5] ON[t3].[Id2] = [c5].[ProduitID]

ORDERBY[t3].[Id2], [t3].[Id1], [t3].[Id4], [t3].[Id5], [t3].[Id], [t3].[Id0], [t3].[Id6], [t3].[RegroupementID], [t3].[ProduitID], [t3].[Id3], [t3].[Id7], [t4].[ProduitID], [t4].[CaracteristiquesDistributeurID], [t4].[Id], [t4].[CaracteristiquePimID], [t4].[CaracteristiqueDistributeurID], [t5].[Id], [p4].[Id], [t6].[Id], [p6].[ProduitID], [p6].[TypeEcotaxeId], [t7].[Id0], [t7].[Id], [t8].[ProduitID], [t8].[CaracteristiquesDistributeurID], [t8].[Id], [t8].[CaracteristiquePimID], [t8].[CaracteristiqueDistributeurID], [t10].[ProduitID], [t10].[NomenclatureID], [t10].[Id0], [t10].[NomenclaturePimID], [t10].[NomenclatureDistributeurID], [t10].[Id], [c5].[Id]

135.10 ms

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync — 135.10 ms

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+4662.8 ms)

SingleOrDefault > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4664.4 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.9 ms (T+4664.8 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECTTOP(1) [g].[Id], [g].[Actif], [g].[CatalogueID], [g].[ClientAcheteurID], [g].[CoefficientAchatParDefaut], [g].[CoefficientAjustementAchatParDefaut], [g].[CoefficientDeVenteParDefaut], [g].[DateCreation], [g].[DateDeDebutDeValidite], [g].[DateDeFinDeValidite], [g].[DateUpdate], [g].[Description], [g].[Exclu], [g].[GrilleTarifaireMaitreID], [g].[IdentifiantExterne], [g].[Libelle]

FROM[Clients] AS[c]

INNERJOIN[ClientTarifs] AS[c0] ON[c].[Id] = [c0].[ClientID]

INNERJOIN[GrilleTarifaires] AS[g] ON[c0].[TarifID] = [g].[Id]

WHERE(([c].[Id] = 2de82684-e644-418f-9385-9c7d574ec15e) AND([c0].[Actif] = CAST(1ASbit))) AND(((([g].[CatalogueID] = 75549207-8571-4d2a-a74f-2437d9d9dd51) AND([g].[Actif] = CAST(1ASbit))) AND([g].[DateDeFinDeValidite] >= GETDATE())) AND([g].[DateDeDebutDeValidite] <= GETDATE()))

ORDERBY[g].[DateDeDebutDeValidite] DESC

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4665.9 ms)

SingleOrDefault > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

sql - Open

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4666.3 ms)

InitializeReader > ExecuteReader > Open > OpenInternal > ConnectionOpening > BroadcastConnectionOpening > DispatchEventData > Write

Connection Open()

sql - ExecuteReader

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+4666.6 ms)

Execute > InitializeReader > ExecuteReader > CommandReaderExecuting > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[g].[ProduitID], [g].[GrilleTarifaireID], [g].[CodeEAN], [g].[CoefficientAchat], [g].[CoefficientAjustementAchat], [g].[CoefficientDeVente], [g].[DateCreation], [g].[DateReappro], [g].[DateUpdate], [g].[Exclu], [g].[Id], [g].[IdentifiantExterne], [g].[IsAvailable], [g].[QuantiteEnReappro], [g].[QuantiteEnReliquat], [g].[ReferenceFabriquant], [g].[Stock]

FROM[GrilleTarifaireProduits] AS[g]

WHERE([g].[GrilleTarifaireID] = 740e759c-e245-4c88-8cd3-2562f9a6f356) AND([g].[ProduitID] = 1188a6a4-9558-4d63-b180-c76016bb7ef4)

sql - Close

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4667.1 ms)

ToArray > AddRange > Dispose > Dispose > Close > ConnectionClosing > BroadcastConnectionClosing > DispatchEventData > Write

Connection Close()

sql - OpenAsync

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.3 ms (T+4667.8 ms)

OpenInternalAsync > Start > Start > MoveNext > ConnectionOpeningAsync > BroadcastConnectionOpening > DispatchEventData > Write

Connection OpenAsync()

sql - ExecuteReader (Async)

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

1.1 ms (T+4668.2 ms)

ExecuteReaderAsync > Start > Start > MoveNext > CommandReaderExecutingAsync > BroadcastCommandExecuting > DispatchEventData > Write

SELECT[t].[Id], [t].[Actif], [t].[CatalogueID], [t].[ClientAcheteurID], [t].[CoefficientAchatParDefaut], [t].[CoefficientAjustementAchatParDefaut], [t].[CoefficientDeVenteParDefaut], [t].[DateCreation], [t].[DateDeDebutDeValidite], [t].[DateDeFinDeValidite], [t].[DateUpdate], [t].[Description], [t].[Exclu], [t].[GrilleTarifaireMaitreID], [t].[IdentifiantExterne], [t].[Libelle], [t0].[Id], [t0].[Actif], [t0].[CatalogueID], [t0].[ClientAcheteurID], [t0].[CoefficientAchatParDefaut], [t0].[CoefficientAjustementAchatParDefaut], [t0].[CoefficientDeVenteParDefaut], [t0].[DateCreation], [t0].[DateDeDebutDeValidite], [t0].[DateDeFinDeValidite], [t0].[DateUpdate], [t0].[Description], [t0].[Exclu], [t0].[GrilleTarifaireMaitreID], [t0].[IdentifiantExterne], [t0].[Libelle]

FROM(

SELECTTOP(1) [g].[Id], [g].[Actif], [g].[CatalogueID], [g].[ClientAcheteurID], [g].[CoefficientAchatParDefaut], [g].[CoefficientAjustementAchatParDefaut], [g].[CoefficientDeVenteParDefaut], [g].[DateCreation], [g].[DateDeDebutDeValidite], [g].[DateDeFinDeValidite], [g].[DateUpdate], [g].[Description], [g].[Exclu], [g].[GrilleTarifaireMaitreID], [g].[IdentifiantExterne], [g].[Libelle]

FROM[GrilleTarifaires] AS[g]

WHERE[g].[Id] = 740e759c-e245-4c88-8cd3-2562f9a6f356

) AS[t]

LEFTJOIN(

SELECT[g0].[Id], [g0].[Actif], [g0].[CatalogueID], [g0].[ClientAcheteurID], [g0].[CoefficientAchatParDefaut], [g0].[CoefficientAjustementAchatParDefaut], [g0].[CoefficientDeVenteParDefaut], [g0].[DateCreation], [g0].[DateDeDebutDeValidite], [g0].[DateDeFinDeValidite], [g0].[DateUpdate], [g0].[Description], [g0].[Exclu], [g0].[GrilleTarifaireMaitreID], [g0].[IdentifiantExterne], [g0].[Libelle]

FROM[GrilleTarifaires] AS[g0]

WHERE([g0].[ClientAcheteurID] = 2de82684-e644-418f-9385-9c7d574ec15e) AND([g0].[GrilleTarifaireMaitreID] = 740e759c-e245-4c88-8cd3-2562f9a6f356)

) AS[t0] ON[t].[Id] = [t0].[GrilleTarifaireMaitreID]

ORDERBY[t].[Id], [t0].[Id]

sql - CloseAsync

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4669.6 ms)

MoveNext > CloseAsync > Start > Start > MoveNext > ConnectionClosingAsync > BroadcastConnectionClosing > DispatchEventData > Write

Connection CloseAsync()

sql - OpenAsync

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4670.0 ms)

OpenInternalAsync > Start > Start > MoveNext > ConnectionOpeningAsync > BroadcastConnectionOpening > DispatchEventData > Write

Connection OpenAsync()

sql - ExecuteReader (Async)

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.4 ms (T+4670.3 ms)

ExecuteReaderAsync > Start > Start > MoveNext > CommandReaderExecutingAsync > BroadcastCommandExecuting > DispatchEventData > Write

SELECTTOP(1) [g].[ProduitID], [g].[GrilleTarifaireID], [g].[CodeEAN], [g].[CoefficientAchat], [g].[CoefficientAjustementAchat], [g].[CoefficientDeVente], [g].[DateCreation], [g].[DateReappro], [g].[DateUpdate], [g].[Exclu], [g].[Id], [g].[IdentifiantExterne], [g].[IsAvailable], [g].[QuantiteEnReappro], [g].[QuantiteEnReliquat], [g].[ReferenceFabriquant], [g].[Stock]

FROM[GrilleTarifaireProduits] AS[g]

WHERE([g].[GrilleTarifaireID] = 740e759c-e245-4c88-8cd3-2562f9a6f356) AND([g].[ProduitID] = 1188a6a4-9558-4d63-b180-c76016bb7ef4)

sql - CloseAsync

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.1 ms (T+4670.8 ms)

MoveNext > CloseAsync > Start > Start > MoveNext > ConnectionClosingAsync > BroadcastConnectionClosing > DispatchEventData > Write

Connection CloseAsync()

sql - OpenAsync

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.2 ms (T+4671.1 ms)

OpenInternalAsync > Start > Start > MoveNext > ConnectionOpeningAsync > BroadcastConnectionOpening > DispatchEventData > Write

Connection OpenAsync()

sql - ExecuteReader (Async)

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.5 ms (T+4671.4 ms)

ExecuteReaderAsync > Start > Start > MoveNext > CommandReaderExecutingAsync > BroadcastCommandExecuting > DispatchEventData > Write

SELECTTOP(1) [g].[ProduitID], [g].[GrilleTarifaireID], [g].[CodeEAN], [g].[CoefficientAchat], [g].[CoefficientAjustementAchat], [g].[CoefficientDeVente], [g].[DateCreation], [g].[DateReappro], [g].[DateUpdate], [g].[Exclu], [g].[Id], [g].[IdentifiantExterne], [g].[IsAvailable], [g].[QuantiteEnReappro], [g].[QuantiteEnReliquat], [g].[ReferenceFabriquant], [g].[Stock]

FROM[GrilleTarifaireProduits] AS[g]

WHERE([g].[GrilleTarifaireID] = 551ec3f9-169f-4534-9c5d-8e6d3e810b22) AND([g].[ProduitID] = 1188a6a4-9558-4d63-b180-c76016bb7ef4)

sql - CloseAsync

Controller Action:
A6tm.Gesteos.Pim.GatewayApi.Controllers.ProductsController.GetProductByIdAsync

0.1 ms (T+4672.0 ms)

MoveNext > CloseAsync > Start > Start > MoveNext > ConnectionClosingAsync > BroadcastConnectionClosing > DispatchEventData > Write

Connection CloseAsync()

toggle trivial gaps

À
partir de l’adresse <https://prod.yeswehome.6tm.eu/api/profiler/results?id=10b93f89-19e8-4f19-b984-d721e68f921a>

Connexion

---

## auto parallels (28 juin 2022)

https://gearupwindows.com/windows11-missing-checkbox-users-must-enter-a-user-name-and-password-to-use-this-computer/

Passer la valeur à 0

---

## Linux (29 juin 2022)

Mise en place ubuntu
: https://doc.ubuntu-fr.org/wsl

Tuto: Mettre en place un
environnement de développement avec wsl2 + Docker + VSCode + PhpStorm.

Ubuntu

---

## VSCode (4 juin 2022)

Plugins :
  - Émet
  - EsLint
  - Prettier
  - Es7 react redux
  - Raccourcis composant: rfc
  - GitLens
  - MarkDownLint
  - Docker

Config Eslint and Prettier in Visual Studio Code for React js development | by Manish Mandal | How To React | Medium

yarn add eslint
  --dev

yarn run eslint
  --init

yarn global add prettier

---

## Hooks (4 août 2022)

UseRef pour avoir la
ref d’un composant

---

## pnpm (5 février 2023)

  - npm install -g pnpm
  - pnpm config set store-dir D:/.pnpm-store

Vite

pnpm create vite
app.checkandimprove

Choisir React +
TypeScript

Disque -

---

## nettoyage espace purgeable (18 mai 2022)

Cd /volumes
&& ls

Cd Donnees

for d in
$(tmutil listlocalsnapshotdates | grep "-"); do sudo tmutil
deletelocalsnapshots $d; done

---

## AzureAd (14 juillet 2022)

  - Install-Module -Name

---

## Rappel ES6 (25 juillet 2022)

Différence entre var, let, const

- var a une portée globale  => il faut éviter de l'utiliser (exemple si on utilise le même nom qu'une variable d'une bilbiothèque
- let a une portée de block

=> utiliser
systématiquement let

Fonctions fléchées :

- Facilite la syntaxe, notamment pour les callbacks
- Attention dans une fonction fléchées this est le contexte englobant (window par exemple), this dans une fontion classique est le contexte appelant (l'objet par exemple)

Spread operator = > étendre

   console.log(…arr) => renvoie tous les
élements du tableau

   arr2 […arr1,4]

Rest operator => dans les paramètres d'une
fonction

Function
add(a,b,…args) => tous les aarguments qui restent

Fonctions pures : ne dépendent pas d'un
contexte exterieurs, renvoi toujours la même chose

=> évite les
erreurs, paradigmes de la programmation fonctionnelle.

Fonctions d'ordre supérieur : prend une
fonction en paramètre ou en retourne une ou les 2.

=> fait partie de
la programmation fonctionnelle, permet d'avoir des fonctions pouvant faire plus
de choses.

Exemple de fonctions
d'ordre >  : map,filter, foreach

Destructuring ;

const {nom,
population} = pays;

Const GetNomPays =
({nom} =>  nom;

Console.log(data(pays));

---

## Documentation (6 août 2022)

Quel est le pb :

- Peu de doc, rarement à jour

Résultats attendus :

- La doc est générée automatiquement et permet de comprendre le projet

Living Documentation : vo

us allez aimer la documentation ! (Cyrille Martraire)

But de la
documentation :

- Transmettre la connaissance
- Rendre accessible
- Peut être obligatoire
- Garder la connaissance dans le temps

=>
Le savoir

Transmission
d'info

- La + efficace : la conversation : maximum de bande passante, d'interaction, juste à temps (pas de travail à l'avance, pas de stock = pas de gaspillage)
- Pair Programming : investissement sur la documentation et la transformation
- Le Code est de la documentation

  - Est-ce qu'en lisant le code je comprends le métier

Idée : Investing
Wall, Obession Wall => savoir stable

Savoir Stable :
EverGreenDocument => uniquement les éléments stables

Pour les
comportements métier => BDD : conversation
- scénario

A voir SpecFlow,
pciklesdoc, cucumber

Mermaid : dPlaintext
- diagram

Docx fx :

- Installer le zip dans  d:\travail\_doc\docfx\
- Dans le projet : d:\travail\_doc\docfx\docfx init -q
-  d:\travail\_doc\docfx\docfx "D:\Travail\6tm\prod.6tm.com\docs\docfx\docfx_project\docfx.json"
     --serve

Docusaurus :

npx
create-docusaurus@latest docs.prod.6tm.com classic --typescript

Y

Quels sont les pbs :

- Doc xml de visual studio => trop technique, la valeur ajoutée est noyée
- SpecFlow et gherkin => les

---

## Architecture (6 août 2022)

DDD, en vrai pour le
développeur (Cyrille Martraire)

---

## Code Legacy (25 décembre 2022)

[Software Crafts·wo·manship] Dette technique et entropie du logiciel (Arnaud Lemaire)

Code Legacy :
  - Il coûte plus cher à maintenir qu'il ne rapporte
  - Ajouter une fonctionnalité coûte plus cher qu'elle ne rapporte

---

## Micro-services (25 décembre 2022)

On achète de la complexité obligatoire :

Ca répond à quel besoin :
  - Au fait qu'on a des charges très différentes en fonction des zones du SI

C'est rarement le cas et encore mieux ce n'est jamais le cas en début de projet
  - Vidéo à 22 minutes

[Software Crafts·wo·manship] Dette technique et entropie du logiciel (Arnaud Lemaire)

Vérifier si la complexité de la solution est bien fonction de  la complexité du problème

Faire simple ce n'est pas facile :
  - ne pas confondre simplicite et facilité, complexite et compliqué
  - La facilité est subjective quand  la simplicité est objective

Visual

---

## Studio 2022 (10 août 2022)

- IIS à jour
- Visual studio 2022 avec module linguistique

  - Codemaid
  - Markdown

- Visual studio code
- SQL 2019
- Node
- SourceTree

  - Configuration des droits

- Powershell 7
- Copier le fichier nuget

Visual

---

## Flux (28 août 2022)

Valeur ajoutée = ce
que le client  est prêt à payer

Pour développer le
CA : augmenter les capacités en supprimant les goulots du flux

---

## Docker (29 août 2022)

Portainer.io :  piloter swarm, docker pour les nuls

Swarm : cluser de
docker

- Stack = 1 ensemble de service et 1 service = un ensemble de docker

Traefik : 2eme
rupture protocolaire route vers le port qui va bien, gère les certificats
letsencrypt

- 10K / an

Thomas :

3 vms

- clusters

Résultats attendus :

- Utiliser sur des preprods :
- Utilisable sur les environnements de dev <->

=>
Comprendre les limites et bonnes pratiques de Docker :

- Debug : compliqué
- Test - windows / IIS

1
- Haute disponibilité : crash de VM => reprise sur un autre nœud

      Exemple gitLab avec maj

2
- PRA - PCA : Datacenter => Restau -

3
- Optimiser déploiment

4

---

## runner (14 septembre 2023)

Suivre les étapes
depuis gitlab

Elastic

---

## Pull request (8 janvier 2026)

Rebase avec
l’update-ref

Fowler met en avant
l’approche Ship / Show / Ask comme compromis pour garder une intégration
fréquente tout en profitant des PR :

- Ship : merge direct (pas de PR)
- Show : merge tout de suite, mais ouvre une PR pour review/visibilité
- Ask : PR avant merge (quand tu as besoin d’accord/discussion)

r = rebase
--interactive --update-refs --autosquash

Gîtlens dans vscode

https://github.com/benoitmasson/stacked-prs-demo

Dan north ce qu’on
veut tester c’est ce qui apporte de la valeur au produit

 Valeur Produit : quelle est le prochain
comportement que mon utilisateur attend

Garantit que la
valeur produite est toujours présente

Exemple concret

Prompt de l’ia
questionner le test

Créé avec OneNote.

---
