rleger / covidrea Goto Github PK
View Code? Open in Web Editor NEWLicense: GNU Affero General Public License v3.0
License: GNU Affero General Public License v3.0
Ajout de balises meta title & description (avec textes SEO) sur la home
Awful thing I wrote very quickly. Refactoring would be most welcome.
One thing in particular from a practical standpoint I keep getting exceptions from old emails I openned after having cleared the DB of the corresponding prospect (or invite) record.. this is annoying. If the firstOrCreate fails we should log one line with the failure and not the whole exception (my slack is going to go crazy otherwise).
Thanks !
v1 : rapide avec liste des articles
-> Date article
-> Nom du média (les echos, macommune, ..)
-> Titre article
-> Lien vers article
v2 : idem mais administrable en BO
Place un lien dans le footer vers la page créée
Je n'ai pas encore développé les fonctionnalités de ces routes qui sont destinés a l'administrateur de l'établissement (qui est etablissement.user_id
)
// Gestion des établissements
Route::get('user/{user}/etablissement/', 'UserEtablissementController@index')->name('user.etablissement.index');
Route::get('user/{user}/etablissement/{etablissement}/edit', 'UserEtablissementController@edit')->name('user.etablissement.edit');
Route::patch('user/{user}/etablissement/{etablissement}/update', 'UserEtablissementController@update')->name('user.etablissement.update');
Il s'agit de permettre à un utilisateur de modifier les données d'un établissement (nom, type). Les autres champs = l'adresse, long et lat ne doivent pas changer donc inutile de se compliquer la vie.
Il faut surtout que cet utilisateur puisse CRUD des services qui sont liés à cet établissement sur cette page.
Concrètement dans cette crise, de nouveaux services vont être affectés par les établissements, ce sera l'administrateur de l'établissement qui pourra interagir.
Il faut qu'il reste toujours au minimum 1 service et donc ne pas autoriser la suppression du dernier service par exemple.
L'idée initiale est de ne pas utiliser de JS a ce stade. (dans un 2eme temps il pourrait être question de faire une api et une SPA mais nous n'en sommes pas la).
Créer et installer un favicon
Créer alerte utilisateur lorsqu'on quitte la page modifier les lits sans enregistrer
I've installed https://github.com/GeneaLabs/laravel-caffeine to prevent 419 errors (page expired) which is very annoying to users.. but I still get 419 from time to time so there must me smthg wrong
Lors de l'importation des mails, le format attendu est mail1, mail2 ou séparé par un ;
Il faudrait que les directeurs puissent copier/coller depuis les mails de leur messagerie qui en général sortent des choses type "nom" [email protected]
On pourrait d'ailleurs ajouter une colone NOM a la table invite (sans le rendre obligatoire) et préremplir le champ s'il n'est pas vide dans la vue finalize.blade.
L'importation des mails est dans InviteController @process.
Bonus extraire tout ca dans une class
Bonus write unit tests for that
(désolé pour ce code affreux.. mais dans l'urgence :) )
En mobile, on ne voit pas a pagination 1,2,3... mais next et previous qui ne fonctionne pas (et qu'il faudrait traduire si c'est à garder
Quand un établissement enregistre une disponibilité de lits, nous pourrions notifier les établissements dans un rayon X kms. Cela éviterait aux personnes en recherche de lits d'avoir à aller en permanence sur l'application pour connaître les disponibilités.
Peut-être que la fonctionalité existe déjà mais je ne l'ai pas vue. On peut imaginer une notification par mail ou sms.
Sur l'affichage de multiples formulaire, tous les champs ont les mêmes IDs, ce qui a pour effet que tous les labels renvoient vers les input du 1er formulaire.
J'ai crée un webhook (routes/api) entre mailgun et nous ce qui fait que on sait si le mail a été reçuu, ouvert etc..
j'ai crée un modele pour Invite -> InviteNotification et un pour Prospect -> ProspectNotification
il faudrait écrire les liens qui nous permettent de voir depuis un Prospect (ou un Invite) les mails reçus ou pas.. ceux qui ont échoué etc. pour que l'on puisse nous agir et les renvoyer..
Il faudra aussi a terme une petite UI qui nous permette de visualiser tout ca (uniquement pour les superadmin..) PR précédente.
On pourrait avoir un AdminController avec un middleware a l'entrée qui nous donne acces a une section..
NB : pour mémoire prospect est la liste initiale des directeurs que l'on va inviter. Invite est la liste des futurs utliisateurs qu'ils vont inviter a leur tour
Dans le cas d'une couverture médiatique nationale, il faut que le site tienne la charge, notamment la homepage.
Est-on prêt à absorber un "effet capital" du nom de la célébre émission qui crash régulièrement tous les sites de startup présentés.
Steps to reproduce:
--> It is due to the middleware app/Http/Middleware/CheckUserHasAHospital.php registered in app/Http/Controllers/UserServiceController.php
User should not be disconnected, the page should be displayed with an error message.
Sur la home, pour afficher les chiffres, on fait 4 requêtes MySQL :
En terme de performance, et lorsque le serveur sera chargé, il est possible que le dashboard rame à cause de ça.
Plusieurs possibilités pour essayer d'y remédier :
I would like the cancel button on the views/service/edit.blade page
to go back to a previous page.. not a specific url depending on where you're coming from
Stackoverflowed it and found window.location...
ok
but it submits the form (default behaviour), so inserted preventDefault()
anyway it's not working :)
Afin d'être clair avec les développeurs contribuants au repository ainsi qu'aux éventuels futurs partenaires (pour qui, ce point sera décisif), je pense qu'il est nécessaire que le projet se déclare sous licence AGPL V3, qui indiquera que le code est open-source à but non commercial.
Si ok pour toi @rleger, je peux m'en occuper.
Google analytics ou autre, permettra d'avoir des stats de connexion notamment géographique (anticipation de demande par région ?)
Lors de mon inscription, je n'ai demandé que 3 services sur les 10 de l'établissement existant.
Lorsque je suis connecté et que je clique sur "Modifier mes lits disponibles", j'atterris sur la page
https://covid-moi-un-lit.com/user/120/service
où je vois mes services et la possibilité de modifier les chiffres.
En modifiant l'URL pour être
https://covid-moi-un-lit.com/user/119/service
Les services affichés ne sont pas les mêmes (mais du même établissement).
Les 2 premiers que je vois sont des services auxquels j'ai accès, mais pas le dernier.
J'ai testé, j'ai pu modifier les chiffres de cet autre service.
Plusieurs choses :
Si l'utilisateur est admin sans être admin d'un hopital ou sans etre un utilisateur régulier avec des services alors erreur car pas d'établissement de référence
il faut qu'un admin non rattaché puisse accéder.. meme si on doit lui masquer le tableau de bord.. ou encore mieux lui donner une version non géoloc.
[2020-04-01 18:56:35] local.ERROR: Trying to get property 'lat' of non-object {"userId":87,"exception":"[object] (ErrorException(code: 0): Trying to get property 'lat' of non-object at /Users/romainleger/Sites/covidrea/app/Http/Controllers/HomeController.php:42)
[stacktrace]
#0 /Users/romainleger/Sites/covidrea/app/Http/Controllers/HomeController.php(42): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'Trying to get p...', '/Users/romainle...', 42, Array)
Il s'agit du mode d'entrée dans le système
Pour mémoire voici le processus d'invitation complet à nous rejoindre :
nous allons remplir la table "etablissement" avec une BD existante, créer les utilisateurs correspondants et les lier à la table établissement. Nous aurons donc pour chaque établissement un utilisateur référent (etablissement.user_id).
Envoyer un mail d'invitation a ces utilisateurs référents (chefs d'établissement) en leur demandant de 1. créer les services de leur établissement et 2. inviter leurs utilisateurs à nous rejoindre. Dans ce mail ils auront un lien vers la page "invite/{token}". (token étant la colonne token de la table user).
ensuite les utilisateurs cliquent sur le lien qui leur a été envoyé et terminent leur inscription
Important : ce sont les utilisateurs qui sélectionneront (et pourront modifier dans leur profil) dans quel service ils travaillent lors de leur inscription (et pas le chef d'établissement).
Problématique :
L'étape 2) n'est pas complète, actuellement il y a une page (invite/{token}) qui permet d'inviter les utilisateurs mais rien pour créer les services avant de les inviter.. donc pas fonctionnel en l'état
Ce qu'il nous faut :
Il faut permettre aux chefs d'établissement de créer un ou plusieurs services avec les champs suivants par service (nom, place_totales, place_disponible, place_bientot_disponible, contact (tel)).
les champs "gravité" et "type" sont abandonnés pour l'instant, a suivre si jamais..
Les 3 champs de place doivent pouvoir être remplis ou laissé vides (0) à ce stade.
Idéalement il faudrait qu'il n'y ait pas de JS non plus pour avoir une version entièrement "web classique". Meme si c'est un peu frustrant j'en conviens.
**Ma vision d'une solution : **
Une section au dessus de celle crée actuellement dans invite/{token} qui permette d'ajouter et supprimer des services qui seront préinitialisés avec un nombre de place (en précisant pour l'utilisateur qu'il n'était pas impératif d'entrer les nombres de place a ce stade) En effet il n'est pas certain que le chef d'établissement ait toutes ces infos et ca pourrait le rebuter a poursuivre.
Donc une liste avec dans chaque ligne
"Service" "place totale" "place dispo" "place bientot dispo" "bouton supprimer"
"Service" "place totale" "place dispo" "place bientot dispo" "bouton supprimer"
"Service" "place totale" "place dispo" "place bientot dispo" "bouton supprimer"
----
ligne avec des <input> pour les champs avec un bouton "+" a la fin de la ligne
Section du dessous comme actuellement, les champs pour inviter les utilisateurs pour cet établissement.
Il faudrait qu'il ne soit pas possible de soumettre le formulaire d'envoi de mail aux praticiens tant que au moins un service n'est pas saisi.
Le but ici est de pouvoir rendre interopérable les données entre applications.
A priori la source de données: http://finess.sante.gouv.fr/fininter/jsp/rechercheSimple.jsp?coche=ok
Certains utils (comme moi et vincent par ex) vont avoir besoin de fonctions d'administrateur.
Nous n'avons a ce stade pas besoin d'un systeme complexe de role mais juste un champ role dans la table utile et peut être un scope dans User model
on fera les modifs sur la BD inutile de prévoir ca en UI
J'imagine qu'il n'y a pas beaucoup d'hopitaux avec un si grand nombre de lits en réanimation, donc 100 parait-être un bon chiffre, mais est-ce voulu ?
Sur mobile, si je rentre un chiffre plus grand ( exemple 101 ) et que je clique sur "Enregister", je n'ai pas de message d'erreur. Il faut que je change le focus sur un autre champ pour voir le champ précédent en erreur.
Sur un ordinateur, j'ai bien un message d'erreur m'indiquant de renseigner une valeur inférieure à 100
Une fois que la table établissement sera saisie nous pourrons commencer a inviter les chefs d'établissements (etablissement.user_id) par email.
Il faudrait écrire ce job (la faire avec un job permet de le mettre en Queue plus facilement),
Si pas familier il existe une commande :
php artisan make:job Nomdujob
Ce job va envoyer un email aux chefs d'établissement les invitant a nous rejoindre en cliquant sur un lien (/invite/{token}). Je vais demander a Vincent de faire le mail si possible.
Pour le mail en lui meme on utilise le template Markdown qui nous simplifie la vie
https://laravel.com/docs/7.x/mail#generating-markdown-mailables
Il faudra aussi un tracking des mails et communications envoyés (pourquoi pas un modèle Notification (ManyToMany) avec type {email, sms..}, timestamps, title: {invitation_initiale, relance_invitation_1, .... })
comme ca lorsqu'on ouvrira a d'autres région on ne renverra pas le mail a ceux qui l'ont déjà eut.
Est-ce envisagé/able d'ajouter les régions d'Outre-Mer sur l'application ?
Plusieurs suggestion d'amélioration sur la fiche d'un établissement :
Ajout des balises opengraph meta pour facebook
Je vais détailler (plus tard) mais je pense qu'il est très important d'écrire quelques test (unit et feature) avant la mise en production
Ajouter à la page Lit disponible une carte sur laquelle apparaissent les établissements avec le nombre de lits totaux, disponibles et bientot disponibles.
On affiche en vert ceux qui ont encore des lits et rouge ceux qui n'en ont plus. En orange ceux qui n'ont plus de lit dispo mais simplement des lits bientot dispo.
En cliquant sur le "pin" on sera redirigé vers la page de l'établissement (/etablissement/{etablissement_id})
Je peux comprendre à la limite d'afficher tous les établissements, ils sont ordonnés par distance.
Mais pourquoi ne pas afficher la liste filtrée directement en dessous des chiffres du dashboard ?
Quand on invite des utilisateurs (table invite) depuis la console du directeur d'établissmeent, une fois les invitations parties, on lui dit qu'on va lui envoyer un mail de confirmation (au directeur)
-> il faudrait créer un mail rapide disant quelquechose comme :
Nous avons envoyé un email aux utilisateurs suivants (adresses email) pour les inviter à nous rejoindre
Gates are now defined in AuthServiceProvider, this will become messy with time
It would be nicer to extract them to Policy classes
I recently created a UserPolicy.
La page qui liste les établissement présente un gros problème de requête n+1. Pour chaque établissement dans la page, plusieurs requêtes sont exécutées depuis le render de la page
Voici ce que l'on a quand on loggue toutes les requêtes sur cette page.
On voit donc qu'on peut dépasser les 20 requêtes juste pour afficher 10 éléments.
Il faut retravailler le controller pour qu'il crée un value object plutôt que de renvoyer le modèle directement.
Il suffit d'aller sur une adresse du genre :
https://covid-moi-un-lit.com/user/1/etablissement
et tout est modifiable.
Ticket provenant du Slack et proposé par Joffrey P. :
vu avec Vincent Bailly : ajout d’une bande de logos “soutiens / participations” sur la home (pour l’instant, HHB / CCI / SC) ?
-> la page suivante ne s'affiche pas, en effet le lien est : "http://localhost:8000/etablissements#"
Auto-héberger les fonts inter-roman actuellement sur https://rsms.me
Sur la page d'acceuil, on affiche les soutiens, les liens vers les site webs ne fonctionnent pas
Pour ceux qui n'ont pas encore de login / pass : mettre un lien vers le form d'inscription
"pas encore inscrit ?"
Initialement le systeme a été prévu pour que ce soit les chefs d'établissement qui
1- recoivent une invit
2- se connecte
3- crée l'établissement et les services
4- lance des invitations aux utilisateurs finaux
on voudrait pouvoir nous meme faire l'ensemble depuis une console superadmin
1- choisir un étab (dropdown(?) qui contienne le nom de la clinique et la ville) pour l'instant ca suffit. A changer quand il y aura +
2- choir un des service de cet établissement, si y'en a pas alors il faut les créer (comme dans user/etablissement/edit.blade)
3- accéder a l'invitation (comme dans invite.blade)
Attention :
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.