Lancer le serveur (Express + Typescript) :
cd ./api
npm install
npm run dev
Lancer l'application (Vite + Vue 3 + Typescript) :
cd ./webapp
npm install
npm run dev
-
Org :
{ id: string, name: string }
-
User :
{ id: string, first_name: string, last_name: string, email: string, org: string (org id), labels: string[], }
-
GET /orgs?page&per_page
- Query params :
- page : index de la page à récupérer
- per_page : nombre de réponses par page (limité à 50)
- Response schema :
{ meta: { count: number, first: number, prev: number | undefined, next: number | undefined, last: number, }, data: Org[] }
- Query params :
-
GET /orgs/:orgId/users?page&per_page
- Path params :
- orgId : Identifiant de l'organisation
- Query params :
- page : index de la page à récupérer
- per_page : nombre de réponses par page (limité à 50)
- Response schema :
{ meta: { count: number, first: number, prev: number | undefined, next: number | undefined, last: number, }, data: User[] }
- Path params :
-
PATCH /orgs/:oid/users/:uid?mask=first_name,email
- Path params :
- orgId : Identifiant de l'organisation
- uId : Identifiant de l'utilisateur
- Query params :
- mask : liste des champs à modifier
- Body params :
- seuls les champs du mask seront mis à jours, exemple :
{ first_name: "edfnsk", email: "edfnsk@bla.com" }
- seuls les champs du mask seront mis à jours, exemple :
- Path params :
-
DELETE /orgs/:oid/users/:uid
- Path params :
- orgId : Identifiant de l'organisation
- uId : Identifiant de l'utilisateur
- Path params :
-
GET /orgs/:oid/labels
- Path params :
- orgId : Identifiant de l'organisation
- Response schema : string[]
- Path params :
POST /orgs/:oid/labels
- Path params :
- orgId : Identifiant de l'organisation
- Body params :
label : string
- Path params :
Cette vue est un tableau qui liste les utilisateurs sans distinction d'organisation :
first name
last name
email
org
labels
action
:- bouton d'affichage de l'utilisateur (readonly) (icône: oeil)
- bouton d'édition de l'utilisateur (icône: crayon)
- bouton de suppression de l'utilisateur (icône: poubelle)
-
Style du vertical menu : md-2/3, sm-100
-
Bouton d'édition en bas du menu
-
Bouton de suppresion en bas du menu
-
Lorsque l'ops clique sur la ligne de l'utilisateur (ou sur le bouton d'affichage de la colonne
action
), un vertical menu s'ouvre à droite avec les données en readonly -
Lorsque l'ops clique sur le bouton d'edition de la colonne
action
ou sur le bouton d'édition en bas du menu, les données deviennent éditables (sauf l'id). Le formulaire s'il estdirty
peut-être soumis à l'API via un boutonModifier
. -
Lorsque l'ops clique sur le bouton de supression de la colonne
action
ou sur le bouton de supression en bas du menu, l'utilisateur doit être supprimé. Lorsque l'utilisateur est supprimé le menu se ferme, et le tableau se met à jour dès le retour de l'API. -
Quand le menu est ouvert, on voit encore le tableau users donc le vertical menu doit être mis à jour si on clique sur un autre utilisateur (avec les données en read only)
first name
: input textlast name
: input textemail
: input textlabels
: combobox qui permet de :- de choisir parmis les labels existants
- de filtrer les labels existants on keypress
- de créer un nouveau label (tab / enter) si la value n'existe pas dans les labels
- de faire du multiselect
- de deselect un label, soit qui était déjà présent, soit qui vient d'être ajouté