Costruisci un'app JavaScript full-stack che sia funzionalmente simile a questa: <https://issue-tracker.freecodecamp.rocks/>. Lavorare su questo progetto ti porterà a scrivere il tuo codice utilizzando uno dei seguenti metodi:
- Clonare [questo repository GitHub](https://github.com/freeCodeCamp/boilerplate-project-issuetracker/) e completare il tuo progetto localmente.
- Usare [la nostra bozza di progetto su Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-issuetracker) per completare il tuo progetto.
- Usare un costruttore di siti a tua scelta per completare il progetto. Assicurati di incorporare tutti i file del nostro repository GitHub.
Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente del tuo progetto nel campo `GitHub Link`.
- Completa le rotte necessarie in `/routes/api.js`
- Crea tutti i test funzionali in `tests/2_functional-tests.js`
- Copia il file `sample.env` su `.env` e imposta le variabili in modo appropriato
- Per eseguire i test togli i commenti dalla riga `NODE_ENV=test` nel tuo file `.env`
- Per eseguire i test nella console, utilizza il comando `npm run test`. Per aprire la console di Replit, premi Ctrl+Maiusc+P (Cmd se su un Mac) e digita "open shell"
Scrivi i seguenti test in `tests/2_functional-tests.js`:
- Crea un'issue con ogni campo: richiesta POST a `/api/issues/{project}`
- Crea un'issue con soli campi obbligatori: richiesta POST a `/api/issues/{project}`
- Crea un'issue con i campi obbligatori mancanti: richiesta POST a `/api/issues/{project}`
- Visualizza i gli issue di un progetto: richiesta GET a `/api/issues/{project}`
- Visualizza gli issue di un progetto con un filtro: richiesta GET a `/api/issues/{project}`
- Visualizza gli issue di un progetto con più filtri: richiesta GET a `/api/issues/{project}`
- Aggiorna un campo in un issue: richiesta PUT a `/api/issues/{project}`
- Aggiorna più campi in un issue: richiesta PUT a `/api/issues/{project}`
- Aggiorna un issue con `_id` mancante: richiesta PUT a `/api/issues/{project}`
- Aggiorna un issue che non ha campi da aggiornare: richiesta PUT a `/api/issues/{project}`
- Aggiorna un issue con `_id` invalido: richiesta PUT a `/api/issues/{project}`
- Elimina un issue: richiesta DELETE a `/api/issues/{project}`
- Elimina un issue con `_id` invalido: richiesta DELETE a `/api/issues/{project}`
- Elimina un issue con `_id` mancante: richiesta DELETE a `/api/issues/{project}`
Puoi inviare una richiesta `POST` a `/api/issues/{projectname}` con i dati del modulo contenenti i campi obbligatori `issue_title`, `issue_text`, `created_by`, e opzionalmente `assigned_to` e `status_text`.
La richiesta `POST` a `/api/issues/{projectname}` restituirà l'oggetto creato, e deve includere tutti i campi inviati. I campi opzionali esclusi saranno restituiti come stringhe vuote. Inoltre, includi `created_on` (data/ora), `updated_on` (data/ora), `open` (booleano, `true` per open - valore predefinito, `false` per chiuso), e `_id`.
Se invii una richiesta `POST` a `/api/issues/{projectname}` senza i campi richiesti, deve essere restituito un errore `{ error:'required field(s) missing' }`
È possibile inviare una richiesta `GET` a `/api/issues/{projectname}` per un array di tutti gli issue per quel specifico `projectname`, con tutti i campi presenti per ogni issue.
Puoi inviare una richiesta `GET` a `/api/issues/{projectname}` e filtrare la richiesta passando anche qualsiasi campo e valore come una query di URL (es. `/api/issues/{project}?open=false`). È possibile passare una o più coppie di campo/valore contemporaneamente.
Puoi inviare una richiesta `PUT` a `/api/issues/{projectname}` con un `_id` e uno o più campi da aggiornare. Al successo, il campo `updated_on` dovrebbe essere aggiornato, e dovrebbe essere restituito `{ result:'successfully updated', '_id':_id }`.
Quando la richiesta `PUT` inviata a `/api/issues/{projectname}` non include campi da aggiornare, deve essere restuito `{ error:'no update field(s) sent', '_id':_id }`. Su qualsiasi altro errore, il valore restituito deve essere `{ error:'could not update', '_id':_id }`.
Puoi inviare una richiesta `DELETE` a `/api/issues/{projectname}` con un `_id` per eliminare un issue. Se non viene inviato un `_id` , deve essere restuito `{ error:'missing _id' }`. Al successo, deve essere restituito `{ result:'successfully deleted', '_id':_id }`. Al fallimento, il valore restituito deve essere `{ error:'could not delete', '_id':_id }`.