# Esercitazione Node JS
Si richiede al candidato di scrivere il codice di backend per un semplice gestionale di Project Management.
Il sistema dovrà permettere di creare **dipendenti**, **task** e gestire l'assegnazione dei task ai dipendenti.
Ogni **dipendente** è descritto dalla seguente anagrafica:
- matricola a 5 cifre,
- nome,
- cognome,
- email,
- ruolo,
- data di assunzione,
- data di licenziamento.
I **task** sono invece descritti da:
- id,
- titolo,
- descrizione,
- stato di avanzamento (new, in progress, done),
- data di creazione,
- data di modifica,
- data di eliminazione,
- possono essere associati a un dipendente (o a nessuno).
Il sistema deve permettere le operazioni di CRUD su dipendenti e task.
Sia i dipendenti che i task possono essere rimossi solo in **soft delete**.
**N.B.** **Non è richiesta alcuna interfaccia grafica**: il server verrà interrogato tramite chiamate HTTP.
## Richieste tecniche
Il codice dovrà essere sviluppato in **TypeScript** con l'utilizzo di **Express.js**, i dati dovranno essere salvati su un Database **MySQL**.
## Funzionalità
- Il server dovrà esporre gli endpoint REST necessari per la **gestione degli utenti** (CRUD).
- Il server dovrà esporre gli endpoint REST necessari per la **gestione dei task** (CRUD).
- Il server dovrà, inoltre, permettere il **retrieve dei task** assegnati a un dipendente.
- **Non è richiesto alcun meccanismo di autenticazione**.
- Il sistema, a regime, **prevederà un alto numero di utenti e task**, è quindi necessario porre un'occhio di riguardo all'ottimizzazione delle risposte verso il client (paginazione).
- Per qualsiasi dettaglio mancante si richiede al candidato di eseguire delle assunzioni, debitamente commentate.
## Evolutive
### Evolutive per senior Backend
- proteggere tramite autenticazione
- aggiunta permessi (admin che può creare e assegnare task, editor che possa solo editare lo status, viewer che possa vedere i propri task)
- API che restituisce tutti gli utenti con i loro task
### Evolutive per mid Backend
- introdurre paginazione alle due api
- documentazione OpenAPI tramite annotation
- API che crea in un colpo solo utente con un già un task assegnato
- API che restituisce tutti gli utenti con i loro task
### Evolutive per junior Backend
- API che restituisce tutti gli utenti con i loro task
- Aggiunta validazione API di creazione task e di creazione dipendente
Lato frontend web ci sarà già un frontend che presenta la lista dei dipendenti
### Evolutiva junior Frontend
- schermata di Dettaglio utente (clicchi e si apre, vedi profilo e i task che l'utente ha assegnato)
### Evolutiva mid Frontend
- Schermata di Dettaglio utente al cui interno c'è la creazione di un task (con validazione)
### Evolutiva senior Frontend
- Kanban board del singolo utente con drag & drop per il cambio di status dei task
Lato frontend Mobile, impostare da zero il progetto
### Junior
- lista utenti, schermata di dettaglio utente con lista task
### Mid
- lista utenti, schermata di dettaglio utente con lista task
- schermata di creazione di un task con validazione
### Senior
- segmented controller sullo stato dei task, con la lista di tutti i task in quello stato
- filtro per utente
- versione iphone e ipad
Lato CT creare un design in figma mobile e frontend