loicsalou / ma-cave

consultation de ma cave
MIT License
1 stars 0 forks source link

ma-cave

Gestion d'une cave à vins. consultation, mise à jour, rangement, création de casiers etc.

Notes de développement

Le répertoire assets qui contient les images est accessible depuis n'importe quel template, n'importe quel SCSS via le path "../assets". La raison est que, au build, ionic crée en guis de contexte de serveur un répertoire "www" dans lequel on trouve, au premier niveau, le répertoire build et le répertoire assets. Dans le répertoire build, tout a été transpilé, minifié et webpackisé dans main.js, main.css. Tous les chemins indiqués à ce niveau doivent donc remonter d'un répertoire et redescendre dans assets. Conclusion: toutes les images, tous les fichiers contenus dans assets sont inclus via un chemin "../assets".

Features

Feature description implémentée
liste des bouteilles lister les bouteilles de la cave oui
recherche recherche multicritères, par région, couleur, appellation, millésime... oui
recherche recherche par mot clé oui
importer importer la cave depuis cavus sous forme CSV oui
importer importer la cave depuis cavus sous forme XLS oui
statistiques gérer quelques statistiques oui
statistiques les montrer graphiquement oui
importer idéalement automatiser la connexion à cavus et récupérer le flux XLS non
stocker les factures photographier une facture et l'associer à un lot de bouteilles non
gérer le login identifier l'utilisateur (FB, tweeter, mail...) mail, FB, ano
authentifier l'utilisateur gérer l'empreinte digitale non
mise à jour mise à jour d'un lot de bouteille partiel
détail lister les photos liées à une bouteille non
retirer une bouteille mettre à jour le nombre de bouteilles restantes, saisir un court formulaire d'impression sur la bouteille oui
ranger les bouteilles faciliter le travail pour retrouver les bouteilles rangées. pointer les emplacements, d'n'd pour déplacer ? etc. oui
recherche compléter avec options 'bouteilles actuellement en cave' et 'vaforites seulement' oui
chargement effectuer le chargement en background pour plus de fluidité, par blocs de 50 ? non

Conception

Notes techniques

Ionic

L'application repose sur le framework Ionic 3.20.x à fin mai 2018.

Angular

Ionic repose sur Angular 5.2.10 à fin mai 2018. Le routeur d'Angular n'est pour l'instant pas utilisable dans Ionic, Ionic fournit le sien, plus simple mais plus limité (notamment en terme de gardes, resolvers et children pages)

Firebase

Firebase est une DB NoSql hébergée par Google. Gratuite pour les petits volumes, elle est très intéressante car elle permet le databinding direct entre le GUI et la DB. Aucun backend n'est nécessaire. Elle s'appuie énormément sur les Promises et donc les observables.

RXJS

Angular est bâti sur RXJS. Je me suis très fortement appuyé sur RXJS afin d'améliorer au mieux les performances de l'application Angular sous-jacente (ChangeDetectionStrategy.OnPush) et également pour respecter la philosophie "réactive" d'Angular

NGRX

L'application était devenue trop complexe et difficilement maintenable. Les données étaient manipulées dans toutes les pages, tous les composants, les observables émettaient depuis n'importe où (services, composants, pages...) et cela parfois partait en boucle. La liste des bouteilles, des casiers, dégustations etc. était stockée en plusieurs endroits de l'application: DB, services, pages, et partiellement composants. Les filtres étaient créés dans le browse et modifiés partout.

Il fallait mettre en place une vraie gestion d'état. Pour cela j'ai donc choisi d'utiliser NGRX. Il reste des défauts dans son utilisation: les bouteilles et casiers sont modifiables dans certianes pages. Il y a donc création d'objets Bottle et Locker en plusieurs endroits (updatePage, cellar page quand on déplace des bouteilles ou qu'on redimensionne un casier qui n'est pas vide. Ces pages sont comme des formulaires, qui émettent des actions de modifications.

Login FB

plutôt compliqué ! une fois suivi le tutorial https://javebratt.com/ionic-2-facebook-login/ il faut impératibvement

Login Google

==> ça a marché...

cordova plugin add cordova-plugin-facebook4 --save --variable APP_ID="253712085111353" --variable APP_NAME="cellar-explorer"

Optimisation des performances

J'utilise le plugin Chrome "Lighthouse" de Google pour analyser la home page et dégager les principaux problèmes. Grâce à ce plugin j'ai déjà changé:

ajouter une font maison

Dans src/app/scss/icons/fonts se trouve une police générée spécialement pour le projet. Voir le fichier README_FONT.txt

A REVOIR

il reste des choses à modifier pour améliorer l'application: