Skip to content

danielebarbaro/express-note-mongo-app

Repository files navigation

ExpressJs Note APP

Creare un server che permetta di gestire un app di note con express-js

Note:

  • Le response menzionate sotto sono a titolo esemplificativo, i dati possono cambiare in base allo user.
  • La struttura delle response deve essere rispettata. Non devono essere inventante nuove chiavi e attenzione agli status code
  • I query params e i params devono essere VALIDATI
  • Il progetto deve avere un file .env (ATTENZIONEEE!!!)
  • Il progetto deve avere un middleware di auth
  • Il progetto deve avere un middleware di log per tracciar e tutte le rotte chiamate (${method}: ${url} [${time}])
  • Il progetto deve prendere i dati delle note dall'api https://its.dbdevelopment.tech/notes
  • Utilizzare il file .env.sample per gestire le variabili del server

Init del progetto

Ogni utente deve richiedere un APIKEY al link https://its.dbdevelopment.tech/key/{user}

Per ottenere la chiave bisogna chiamare in GET la url https://its.dbdevelopment.tech/key/@nomeutenteGitHub con il vostro utente.

Salvatevi la chiave da usare nella seconda chiamata.

la response sara:

{
  "status": "success",
  "data": "chiave-personale-da-usare"
}

Per ottenere il file delle note bisogna chiamare in POST la url https://its.dbdevelopment.tech/notes con payload

{
  "user": "@nomeutenteGitHub"
}

e con header:

{
  "token": "chiave-personale-da-usare"
}

La chiamata deve salvare il data in database/githubnotes.json.

Rotte da implementare:

  • [GET] - api/notes - Restituisce tutte le note

    • La rotta NON deve essere Autenticata
    • La risposta della rotta deve essere:
    {
      "success": true,
      "list": true,
      "data": [
        {
          "id": "e1960fc6-4d45-4b10-a333-7f90041e17c7",
          "user": "spacex",
          "date": "2022-05-20",
          "title": "Corso Node",
          "body": "Crea app Note",
          "created_at": "2022-05-31 09:04:34"
        },
        {
          "id": "8be856f4-67d5-4c3f-95bd-e98e00799bb3",
          "user": "puppy",
          "date": "2022-05-11",
          "title": "Corso Node",
          "body": "Crea app Note",
          "created_at": "2022-05-31 09:04:34"
        }
      ]
    }
  • [GET] - api/notes/:uuid - Restituisce la nota con uuid passato come parametro

    • La rotta NON deve essere Autenticata
    • La risposta della rotta deve essere:
    {
      "success": true,
      "single": true,
      "data": [
        {
          "id": "e1960fc6-4d45-4b10-a333-7f90041e17c7",
          "user": "spacex",
          "date": "2022-05-20",
          "title": "Corso Node",
          "body": "Crea app Note"
        }
      ]
    }
  • [GET] - api/notes?date=2023-10-01 - Restituisce tutte le note con data maggiore di date

    • La risposta della rotta deve essere:
      {
        "success": true,
        "filtered": true,
        "data": [
          {
            "id": "e1960fc6-4d45-4b10-a333-7f90041e17c7",
            "user": "spacex",
            "date": "2023-11-20",
            "title": "Corso Node",
            "body": "Crea app Note"
          }
        ]
      }
  • [GET] - api/notes?limit=2 - Restituisce un numero di limit note

    • Le note devono essere ordinate per data, il limit deve prendere le ultime 2
    • La risposta della rotta deve essere:
      {
        "success": true,
        "data": [
          {
            "id": "e1960fc6-4d45-4b10-a333-7f90041e17c7",
            "user": "spacex",
            "date": "2022-05-20",
            "title": "Corso Node",
            "body": "Crea app Note"
          },
          {
            "id": "8be856f4-67d5-4c3f-95bd-e98e00799bb3",
            "user": "puppy",
            "date": "2022-05-11",
            "title": "Corso Node",
            "body": "Crea app Note"
          }
        ]
      }
  • [POST] - api/notes - Aggiunge una nota

    • La rotta DEVE essere Autenticata
    • id aka uuid DEVE essere autogenerato
    • id aka uuid NON DEVE essere passato nel body
    • Il body deve essere:
    {
      "user": "spacex",
      "date": "2022-05-20",
      "title": "Corso Node",
      "body": "Crea app Note"
    }
    • la response deve essere l'oggetto creato
    • lo status code deve essere 201.
  • [PUT] - api/notes/:uuid - Aggiorna la nota

    • La rotta DEVE essere Autenticata
    • NON posso aggiornare data, id aka uuid e user
    • Il body deve essere:
      {
        "title": "Corso Node",
        "body": "Crea app Note"
      }
    • la response deve essere indentica a quella di [GET] - api/notes con la nuova nota aggiornata
    • lo status code deve essere 200.

Specifiche Generiche da rispettare:

  1. Se visito uno rotta non corretta devo ricevere la seguente risposta.

    {
      "success": false,
      "code": 1001,
      "error": "Server Error"
    }

    con status Code 500.

  2. Se NON trovo una risorsa.

{
  "success": false,
  "code": 4001,
  "error": "Resource not found"
}

con status Code 404.

  1. Se visito una rotta auth senza codice auth devo ottenere

    {
      "success": false,
      "code": 2001,
      "error": "Unauthorized"
    }

    con status Code 401.

  2. Se visito una rotta auth con codice auth SBAGLIATO devo ottenere

    {
      "success": false,
      "code": 2002,
      "error": "Forbidden"
    }

    con status Code 403.

Per installare il progetto:

npm install

Per usare il server:

npm start

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published