Realizzare un web server in NodeJs e Typescript che esponga la seguente lista di endpoint:
POST /importDataFromFile
: permette di caricare un file da processare come indicato di seguitoGET /pendingData
: restituisce in formato JSON la lista dei dati non ancora processatiGET /data
: restituisce in formato JSON la lista dei dati già processati, ordinati secondo il timestamp di elaborazione. In query string potranno essere passati 2 parametrifrom
: se presente si dovranno restituire i dati elaborati da questo valore (inteso come timestamp) in poilimit
: se presente dovrà essere limitato a questo valore il numero di messaggi restituiti
Il file da processare avrà il seguente formato:
- La prima riga contiene due numeri
A
eB
- Successive
N
righe contenenti ognuna un numeroP
(con1 <= P <= 5
) che rappresenta la priorità, un secondo valoreK
seguito da stringaD
. Dovranno essere considerate solo le righe comprese tra gli indici 1-based indicati daA
eB
esempio:
3 5
1 128 ... dummy data ...
4 65 ... dummy data ...
3 0 prima riga utile
5 -165 seconda riga
3 0 terza riga
5 -165 ... dummy data ...
I dati importati non dovranno essere processati immediatamente, ma si dovrà seguire la seguente logica:
- il processing dei dati deve avvenire in blocchi di massimo
15
messaggi ogni10
secondi - si devono processare i dati in ordine di priorità: prima le priorità alte, in seguito le priorità basse. Ad esempio, se è presente almeno un dato con priorità
3
, questo dovrà essere processato prima di passare ai dati con priorità2
o1
- se viene effettuato un import prima che il precedente sia concluso, si dovranno accorpare i nuovi dati all'interno dei precedenti
- l'elaborazione di un messaggio consiste nel salvare i valori
K
eD
su un DB relazionale, associando il timestamp di elaborazione (che dovrà essere lo stesso per tutti i messaggi dello stesso blocco)
Realizzare un semplice pannello web che permetta di:
- Caricare file da far processare al backend
- Recuperare i dati processati, con la possibilità di impostare i filtri sopra citati
Dovrà essere realizzato uno script di utility che, quando lanciato, generi un file random (con 1 <= N <= 50
e 0 <= A < B <= N
) che segua la struttura del file riportato in precedenza.
Utilizzare docker-compose per orchestrare la soluzione di sviluppo locale che dovrà contenere:
- Backend
- Frontend
- Database relazionale
Tutto quello che non è specificato nella consegna è intenzionalmente lasciato alla libera interpretazione del candidato.