-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
04f3e5a
commit ba1148a
Showing
13 changed files
with
799 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
--- | ||
title: "Kibokast" | ||
date: 2020-08-04 | ||
icon: "ti-light-bulb" | ||
description: "Les Kibokast sont des mini-formations effectués par un membre de Kiboko pour le reste de l'équipe." | ||
type : "docs" | ||
--- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
--- | ||
title: "Code review" | ||
date: 2020-05-05 | ||
type : "docs" | ||
--- | ||
|
||
## 1. Cycle de vie des PRs | ||
- Pour la création des PRs, se reporter à la [procédure décrite dans les usages Github](usage.md#3-pull-request-pr) | ||
- **Pas plus de 2 PRs ouvertes par personne** : tant que j'ai encore une PR non mergée, je n'entame pas de nouvelle tâche. | ||
- **Tout le monde relit les PRs** de tout le monde | ||
- Afin de fluidifier les développements, **il est important de relire les PRs plusieurs fois par jour** (ex : le matin en arrivant, puis après la pause déjeuner. Possibilité de relire à 2 si besoin) | ||
- **Tout le monde peut merger** les PRs en respectant les règles de validité ci-dessous | ||
|
||
## 2. Règles de validité d'une PR | ||
### Prérequis | ||
- Chaque branche doit contenir un numéro de ticket : `feature/XXX-new-feature` | ||
- **Chaque commentaire de commit doit contenir un numéro de ticket** : `#XXX : Add new feature` | ||
- Les tests unitaires doivent passer | ||
- La PR doit avoir le libellé "GTM" | ||
- La PR doit avoir une taille raisonnable | ||
- Les commits doivent être bien découpés (pas de "fix, re-re-fix, wip") | ||
|
||
### Règles de merge | ||
Je merge une PR si elle respecte les critères suivants : | ||
- Respect des prérequis décrits ci-dessus | ||
- Déjà **2 autres personnes** ont approuvé la PR **dont un dev expérimenté** | ||
- **Toutes les discussions sont marquées comme résolues** | ||
- ⚠️ **Elle pointe sur la branche develop** ⚠️ | ||
- Je vérifie que le milestone est le bon pour faciliter la rédaction des notes de version | ||
|
||
### Approbation et correction | ||
#### En tant que relecteur | ||
- Lorsque j'ai une question ou un retour à faire sur une PR, **je mets un commentaire** sur la ligne concernée (en restant courtois dans mes insultes) | ||
- Lorsque je n'ai plus de retours à faire, **j'approuve la PR**. Si elle respecte les règles de validité, **je la merge sur develop**. | ||
|
||
#### En tant que développeur | ||
- Lorsque je corrige ma PR, **je réponds** au commentaire (en restant courtois dans mes insultes) et **je marque la discussion comme résolue** |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
--- | ||
title: "Collections Doctrine" | ||
date: 2020-04-01 | ||
type : "docs" | ||
--- | ||
|
||
* [Documentation](https://www.doctrine-project.org/projects/doctrine-collections/en/1.6/index.html) | ||
* [Github](https://github.com/doctrine/collections/) | ||
|
||
La collection sert à adresser le besoin de fournir des listes d'objets. Doctrine fournit une implémentation utilisée dans son ORM et ses ODM. | ||
|
||
La collection permet de gérer une liste d'objets du même type, pour : | ||
|
||
* filtrer | ||
* trier | ||
* appliquer un traitement (map) | ||
* calculer un résultat d'après le contenu de la liste (reduce) | ||
|
||
L'interface `Collection` | ||
--- | ||
|
||
Il s'agit du contrat "Collection" de Doctrine, toute collection devra implémenter cette interface. | ||
|
||
Cette interface implémente elle-même les contrats suivants : | ||
|
||
* [`\Countable`](https://www.php.net/manual/fr/class.countable.php) : la collection pourra être utilisée avec la fonction `count()`, ce qui permettra de connaitre le nombre d'éléments contenus par la collection. | ||
* [`\IteratorAggregate`](https://www.php.net/manual/fr/class.iteratoraggregate.php) : la collection pourra être parcourue dans une structure `foreach` | ||
* [`\ArrayAccess`](https://www.php.net/manual/fr/class.arrayaccess.php) : la collection pourra être utilisée avec les opérateurs `[]`, de la même manière qu'on le fait avec un tableau | ||
|
||
Les méthodes | ||
--- | ||
|
||
### `map` | ||
|
||
La méthode `map( callable $callback )` va appliquer la fonction de rappel passée en argument sur chaque | ||
élément qu'elle contient et retournera une copie de la collection. Dans cette copie | ||
chaque élément aura été remplacé avec le résultat de cette fonction. | ||
|
||
```php | ||
<?php | ||
$collection = new ArrayCollection(['SKU001', 'SKU002', 'SKU003']); | ||
|
||
$mappedCollection = $collection->map(function(string $value): Product { | ||
return new Product($value); | ||
}); // Retournera : [object (Product) { $sku = 'SKU001' }, object (Product) { $sku = 'SKU002' }, object (Product) { $sku = 'SKU003' }] | ||
``` | ||
|
||
### `filter` | ||
|
||
La méthode `filter( callable $callback )` va appliquer la fonction de rappel passée en argument sur chaque | ||
élément qu'elle contient et retournera une copie de la collection. Dans cette copie, ne | ||
restera que les éléments pour lesquels la fonction de rappel a renvoyé `true` | ||
|
||
```php | ||
<?php | ||
$collection = new ArrayCollection([new Product('SKU001'), new Product('SKU002'), new Product('SKU003')]); | ||
|
||
$mappedCollection = $collection->filter(function(Product $value): bool { | ||
return in_array($value->sku, ['SKU001', 'SKU003', 'SKU005']); | ||
}); // Retournera : [object (Product) { $sku = 'SKU001' }, object (Product) { $sku = 'SKU003' }] | ||
``` | ||
|
||
### `slice` | ||
|
||
La méthode `slice( int $start, null|int $length )` va retourner une nouvelle copie de la collection contenant | ||
uniquement les éléments commençant à la position `$start`, avec au maximum `$length` éléments à partir | ||
de ce point si ce paramètre est fourni. | ||
|
||
```php | ||
<?php | ||
$collection = new ArrayCollection([new Product('SKU001'), new Product('SKU002'), new Product('SKU003'), new Product('SKU004'), new Product('SKU005')]); | ||
|
||
$mappedCollection = $collection->slice(2, 3); | ||
// Retournera : [object (Product) { $sku = 'SKU002' }, object (Product) { $sku = 'SKU003' }, object (Product) { $sku = 'SKU004' }] | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
--- | ||
title: "Commandes Debug" | ||
date: 2020-04-07 | ||
type : "docs" | ||
--- | ||
|
||
# Commandes Symfony | ||
|
||
Articles officiels présentants certaines fonctionnalités : | ||
|
||
- https://symfony.com/blog/new-in-symfony-3-4-debug-autowiring-command | ||
- https://symfony.com/blog/new-in-symfony-3-4-debug-form-command | ||
|
||
Pour avoir la liste complete : | ||
`bin/console list debug` | ||
|
||
### Debug Router | ||
|
||
Doc officiel : https://symfony.com/doc/3.4/routing/debug.html | ||
|
||
Pour avoir l'ensemble des routes avec leur nom et les URLs qui correspondent | ||
|
||
`bin/console debug:router` | ||
|
||
Exemple pour rechercher une route "produit" dans des controllers : | ||
|
||
`bin/console debug:router --show-controllers | grep /product` | ||
|
||
### Debug Container | ||
|
||
Doc officiel : https://symfony.com/doc/3.4/service_container/debug.html | ||
|
||
Pour avoir l'ensemble des services publiques | ||
|
||
`bin/console debug:container` | ||
|
||
- Pour rechercher un service par son nom : `bin/console debug:container validator` | ||
- Pour rechercher un service par tag : `bin/console debug:container --tag=form.type` | ||
- Pour rechercher un service par parametre : `bin/console debug:container --parameter=kernel.debug` | ||
|
||
### Debug Config | ||
|
||
Doc officiel : https://symfony.com/doc/3.4/reference/configuration/debug.html | ||
|
||
Pour avoir l'ensemble des configuration | ||
|
||
`bin/console debug:config` | ||
|
||
- Pour rechercher pour un bundle : `bin/console debug:config AppBundle` | ||
|
||
### Debug Twig | ||
|
||
Pour avoir l'ensemble des fonctions des filtres, des tests et des globales disponibles ainsi que les chemins chargés par l'application | ||
|
||
`bin/console debug:twig` | ||
|
||
### Debug Swiftmailer | ||
|
||
Doc officiel : https://symfony.com/doc/3.4/reference/configuration/swiftmailer.html | ||
|
||
Pour avoir les mailers disponibles | ||
|
||
`bin/console debug:swiftmailer` | ||
|
||
### Debug Autowiring | ||
|
||
Doc officiel : https://symfony.com/doc/3.4/service_container/debug.html | ||
|
||
Pour avoir l'ensemble des services déclarés en auto-wiring : | ||
|
||
`bin/console debug:autowiring` | ||
|
||
### Debug Forms | ||
|
||
Pour avoir l'ensemble des formulaires (Type, Extension, Type Guessers) disponibles : | ||
|
||
`bin/console debug:form` | ||
|
||
### Debug Translations | ||
|
||
Pour avoir l'ensemble des traductions par locale ou bundle : | ||
|
||
`bin/console debug:translation` | ||
|
||
### Debug routes JS | ||
|
||
`bin/console fos:js-routing:debug` | ||
|
||
|
||
# Commandes Oro | ||
|
||
### Entity config Oro | ||
|
||
Permet de récupérer la configuration d'une entité : | ||
|
||
`bin/console oro:entity-config:debug AppBundle\\Entity\\Norm` | ||
|
||
Permet de récupérer la configuration d'un champ d'une entité : | ||
|
||
`bin/console oro:entity-config:debug AppBundle\\Entity\\Norm code` | ||
|
||
### Layout | ||
|
||
_à compléter_ | ||
|
||
`bin/console oro:debug:layout` | ||
|
||
### Workflow | ||
|
||
_à compléter_ | ||
|
||
`bin/console oro:debug:workflow:definitions` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
--- | ||
title: "Migrations Oro" | ||
date: 2020-02-21 | ||
type : "docs" | ||
--- | ||
|
||
Il y a 2 types de migrations dans Oro : | ||
1. Migrations Schema | ||
2. Migrations Data | ||
|
||
Doc. Oro : https://github.com/oroinc/platform/tree/master/src/Oro/Bundle/MigrationBundle | ||
|
||
Cours "Entities" de Yevhen (=> drive Kiboko)) | ||
|
||
## 1. Migrations Schema | ||
|
||
Modification de schéma Doctrine => DBAL | ||
|
||
- Pas d'utilisation d'entité/ORM dans le schéma | ||
|
||
#### 1.1. implémentation de l'interface `Installation` | ||
|
||
utilise des numéros de versions (=> `getVersion()`) | ||
|
||
/!\ regroupement de l'ensemble des migrations pour créer le schéma | ||
|
||
=> cf Schéma de Yevhen | ||
|
||
#### 1.2. implémentation de l'interface `Migration` | ||
|
||
/!\ quand on ajoute une Migration, il faut systématiquement : | ||
- ajouter la migration dans l'installation en adaptant le schéma désiré | ||
- changer le numéro de version | ||
|
||
#### 1.3. Cas spécifiques : champs non null | ||
|
||
utilisation des "OrderedMigration" => `getOrder():int` | ||
|
||
Ex : ajout champ UNIQUE + NOT NULL | ||
> migration A avec `up()` methode `alterTable()` avec ajout de la colonne déclarée en `NULL` => ajout addPostQuery() | ||
> migration B avec `up()` methode `alterTable()` avec ajout de la colonne `NOTNULL` | ||
#### 1.4. Cas spécifiques : modification de colonne existante | ||
|
||
utilisation de requêtes .SQL avec la méthode `addPostQuery()` | ||
|
||
#### 1.5. Cas spécifiques : Oro options | ||
|
||
Utilisation de "Oro_Options" | ||
|
||
#### 1.6. Cas spécifiques : OroConfigField | ||
|
||
OroConfigField uniquement pour les entités crées par ce bundle | ||
|
||
#### 1.7. Cas spécifiques : entity extend | ||
|
||
Implements : ExtendExtensionInterface | ||
|
||
|
||
#### 1.8. Cas spécifiques : dépendance des migrations | ||
|
||
utilisation des "DependentMigration" | ||
|
||
|
||
## 2. Migrations Data | ||
|
||
Migration pour créer de la donnée. | ||
|
||
Exécuter après les migrations de schéma => ORM | ||
|
||
Usage : initialiser une environnement avec des données | ||
|
||
/!\ Si Schema est mis a jour, il faut impacter les migrations de data | ||
|
||
## 3. Nomenclature des migrations | ||
|
||
#### 3.1. Installer | ||
|
||
Format : `{nom_du_bundle}Installer` | ||
|
||
ex : KibokoBarcodeBundleInstaller | ||
|
||
#### 3.2. Migration | ||
|
||
Le nom de la migration doit correspondre au fonctionnel de la migration. | ||
Si le domaine est différent, on créé des fichiers différents par domaine. | ||
|
||
ex : AddBudgetMigration ou FixProductsNorms | ||
|
||
|
||
## 4. Tests pour vérifier la migration | ||
|
||
- `bin/console oro:platform:update --force` | ||
- `bin/console oro:migration:load` (si fixture en plus de `main`) | ||
- `bin/console oro:entity-extend:cache:clear` => si erreur, PR refusée | ||
|
||
(prochainement ajouté à la CI) |
Oops, something went wrong.