Skip to content

A school project teaching fullstack development with Nuxt, Express, and MongoDB. An open library platform for uploading and downloading books, humorously styled like a piracy site.

Notifications You must be signed in to change notification settings

MrTartuf0/pirate-library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

search_logo

Important

Questo progetto deve essere considerato solo a scopo educativo

Introduzione

Il progetto "pirate-library" è un'applicazione web basata su Nuxt.js, progettata per creare una biblioteca aperta a tutti, con un tocco giocoso ispirato ai pirati. L'obiettivo principale è consentire agli utenti di scaricare libri liberamente, ma anche di registrarsi, accedere, aggiungere nuovi libri, effettuare ricerche globali, visualizzare libri recenti e accedere a dettagli specifici tramite il codice ISBN.

Struttura delle Pagine

index.vue - Homepage

La homepage presenta i libri aggiunti di recente e include la barra di ricerca per consentire agli utenti di cercare titoli specifici. La barra di ricerca è presente su tutte le pagine, tranne quelle dedicate alla login, registrazione e upload.

book/[isbn].vue - Pagina Dettaglio Libro

Questa pagina consente agli utenti di visualizzare in dettaglio un libro utilizzando il codice ISBN come identificatore unico. Gli utenti possono anche scaricare il libro dalla stessa pagina. Se si dispone l'accesso a questa pagina da amministratore, sarà possibile eliminare e modificare il libro selezionato.

search/[query].vue - Pagina Ricerca Libri

Questa pagina fornisce un'interfaccia per effettuare ricerche globali basate sui nomi dei libri. Gli utenti possono inserire il titolo desiderato e visualizzare i risultati corrispondenti.

login.vue - Pagina Login

La pagina di login consente agli utenti registrati di accedere al sistema. Tuttavia, l'accesso è richiesto solo per aggiungere nuovi libri. La consultazione e il download dei libri sono aperti a tutti gli utenti, senza necessità di autenticazione.

register.vue - Pagina Registrazione

La pagina di registrazione consente agli utenti di creare nuovi account. Questo è necessario solo per coloro che desiderano contribuire aggiungendo nuovi libri alla biblioteca.

upload.vue - Pagina Caricamento Libri

Questa pagina consente agli utenti autenticati di caricare informazioni e risorse relative a un nuovo libro. L'upload comprende dettagli come il titolo, l'autore, la copertina, il codice ISBN e il file del libro stesso.

Flusso Operativo

Business process flow example (1)

  1. Homepage

    • Visualizzazione dei libri recenti.
    • Barra di ricerca per ricerche rapide.
  2. Dettaglio Libro

    • Accesso alle informazioni dettagliate utilizzando il codice ISBN.
    • Possibilità di scaricare il libro direttamente dalla pagina.
  3. Ricerca Libri

    • Effettuare ricerche globali basate sui nomi dei libri.
    • Visualizzazione dei risultati corrispondenti.
  4. Login

    • Accesso riservato agli utenti registrati.
    • Richiesto solo per l'aggiunta di nuovi libri.
  5. Registrazione

    • Creazione di nuovi account utente.
    • Necessario solo per coloro che desiderano contribuire con nuovi libri.
  6. Caricamento Libri

    • Accesso consentito solo agli utenti autenticati.
    • Caricamento di informazioni e risorse relative a un nuovo libro.

Architettura ad alto livello

                +-----------------------+
                |                       |
                |   Frontend            |
                |   (localhost:3001)    |
                +-----------+-----------+
                            |
                            | HTTP Requests
                            |
                +-----------v-----------+
                |                       |
                |  API REST (Express)   |
                |   (localhost:3000)    |
                +-----------+-----------+
                            |
                            | HTTP Requests
                            |
                +-----------v-----------+
                |                       |
                |  rustedhttpd Server   |
                |       (Custom)        |
                |                       |
                +-----------------------+
                            |
                            | File Requests (HTTP)
                            |
                +-----------v-----------+
                |                       |
                |   File System (web)   |
                |                       |
                +-----------------------+

Backend

Questo documento fornisce una relazione tecnica sull'API REST sviluppata con Express e Bun (ts-node non voleva funzionare.) , inclusa una panoramica delle funzionalità offerte, delle tecnologie utilizzate e dell'integrazione con il server web per servire i file statici.

Panoramica dell'API REST

L'API REST è progettata per fornire un'interfaccia robusta per la gestione dei libri e degli utenti di una piattaforma di biblioteca digitale. Utilizza un'architettura basata su HTTP per consentire agli utenti di registrarsi, autenticarsi, caricare libri e cercare libri per ISBN o nome.

Funzionalità Principali

Le principali funzionalità dell'API REST includono:

Gestione degli Utenti:

  • Registrazione degli utenti fornendo un'email e una password.
  • Autenticazione degli utenti mediante email e password, con generazione di token JWT per l'autorizzazione.

Gestione dei Libri:

  • Caricamento dei libri insieme alle informazioni associate (ISBN, titolo, autore, ecc.) e ai file del libro e alla miniatura.
  • Ricerca dei libri per ISBN o per nome.
  • Visualizzazione di una lista paginata di libri.

Tecnologie Utilizzate

L'API REST è sviluppata utilizzando le seguenti tecnologie:

  • Bun e Express.js: Utilizzati per la creazione del backend dell'applicazione e per la gestione delle richieste HTTP.
  • MongoDB e Mongoose: Utilizzati per la memorizzazione dei dati degli utenti e dei libri in un database NoSQL.
  • JWT (JSON Web Token): Utilizzato per l'autenticazione e l'autorizzazione degli utenti.
  • Multer e body-parser: Utilizzati per il parsing dei dati delle richieste e la gestione dei file inviati.
  • cors: Utilizzato per la gestione delle richieste CORS (Cross-Origin Resource Sharing).

Integrazione con "rustedhttpd"

Il server web personalizzato "rustedhttpd" viene utilizzato per servire i file statici associati ai libri, come i file del libro e le miniature, dalla directory rusted_files/web.

Funzionamento di "rustedhttpd"

"rustedhttpd" è un server web custom sviluppato in Rust che serve i file statici tramite protocollo HTTP. Utilizzando un'interfaccia di configurazione, è possibile specificare la directory dei file da servire e le impostazioni del server.

Nel contesto dell'API REST, "rustedhttpd" è integrato come parte del sistema di distribuzione dei contenuti statici. Quando un utente effettua una richiesta per un file associato a un libro (come il file del libro o la miniatura), l'API REST instrada la richiesta a "rustedhttpd", che a sua volta restituisce il file richiesto al client.

Documentazione endpoint:

/upload-book (POST)

Questo endpoint consente agli utenti autenticati di caricare un nuovo libro insieme alle informazioni associate e ai file del libro e alla miniatura.

  • Metodo HTTP: POST
  • Endpoint: /upload-book
  • Headers:
    • Authorization: Token JWT per l'autenticazione dell'utente
  • Body (form-data):
    • {
        "isbn": "Stringa, ISBN del libro",
        "title": "Stringa, titolo del libro",
        "plot": "Stringa, trama del libro",
        "year": "Numero intero, anno di pubblicazione del libro",
        "language": "Stringa, lingua del libro",
        "pages": "Numero intero, numero di pagine del libro",
        "author": "Stringa, autore del libro",
        "publisher": "Stringa, editore del libro",
        "categories": "Array di stringhe, categorie del libro",
        "book": "File, file del libro",
        "thumbnail": "File, miniatura del libro"
      }
  • Risposte:
    • {
        "200 OK": "Il libro è stato caricato con successo.",
        "400 Bad Request": "I file del libro e/o della miniatura non sono stati forniti.",
        "403 Forbidden": "Token di autenticazione mancante.",
        "500 Internal Server Error": "Errore interno del server."
      }

/login (POST)

Questo endpoint consente agli utenti di autenticarsi fornendo email e password.

  • Metodo HTTP: POST
  • Endpoint: /login
  • Body:
    • {
        "email": "Stringa, email dell'utente",
        "password": "Stringa, password dell'utente"
      }
  • Risposte:
    • {
        "200 OK": "L'autenticazione è avvenuta con successo, viene restituito un token JWT.",
        "401 Unauthorized": "Email o password non validi.",
        "500 Internal Server Error": "Errore interno del server."
      }

/create (POST)

Questo endpoint consente agli utenti di creare un nuovo account fornendo email e password.

  • Metodo HTTP: POST
  • Endpoint: /create
  • Body:
    • {
        "email": "Stringa, email dell'utente",
        "password": "Stringa, password dell'utente"
      }
  • Risposte:
    • {
        "201 Created": "L'account è stato creato con successo.",
        "400 Bad Request": "L'utente esiste già.",
        "500 Internal Server Error": "Errore interno del server."
      }

/search-by-isbn/:isbn (GET)

Questo endpoint consente agli utenti di cercare un libro per ISBN.

Endpoint: /search-by-isbn/:isbn

Metodo HTTP: GET

Parametri:

isbn: ISBN del libro (parametro di percorso)

Risposte:

200 OK: Il libro è stato trovato e viene restituito.

404 Not Found: Il libro non è stato trovato.

500 Internal Server Error: Errore interno del server.

/search-by-name/:name (GET)

Questo endpoint consente agli utenti di cercare libri per nome.

Endpoint: /search-by-name/:name

Metodo HTTP: GET

Parametri:

name: Nome del libro (parametro di percorso)

Risposte:

  • {
      "200 OK": "La lista dei libri è stata restituita con successo.",
      "404 Not Found": "Nessun libro trovato.",
      "500 Internal Server Error": "Errore interno del server."
    }

/books (GET)

Questo endpoint consente agli utenti di ottenere una lista paginata di libri.

Metodo HTTP: GET

Endpoint: /books

Parametri:

page: Numero di pagina (parametro di query, opzionale)

Risposte:

  • {
      "200 OK": "La lista dei libri è stata restituita con successo.",
      "500 Internal Server Error": "Errore interno del server."
    }

/search-by-name/:name (GET)

Questo endpoint consente agli utenti di cercare libri per nome.

  • Endpoint: /search-by-name/:name
  • Metodo HTTP: GET
  • Parametri:
    • name: Nome del libro (parametro di percorso)
  • Risposte:
    • {
        "200 OK": "I libri sono stati trovati e vengono restituiti.",
        "404 Not Found": "Nessun libro trovato.",
        "500 Internal Server Error": "Errore interno del server."
      }

/edit-book/:bookId (PUT)

Questo endpoint consente agli utenti di aggiornare i dettagli di un libro esistente.

  • Endpoint: /edit-book/:bookId
  • Metodo HTTP: PUT
  • Parametri URL:
    • bookId (obbligatorio): L'ID del libro da modificare.
  • Intestazione:
    • Authorization: Token di autenticazione JWT.
  • Corpo della Richiesta:
    • Il corpo della richiesta deve contenere i dati aggiornati del libro nel formato JSON. I campi che possono essere aggiornati sono:
      • isbn (String)
      • title (String)
      • plot (String)
      • year (Number)
      • language (String)
      • pages (Number)
      • author (String)
      • publisher (String)
      • categories (Array)
  • Esempio:
    {
      "title": "Nuovo Titolo del Libro",
      "plot": "Nuovo Riassunto del Libro",
      "year": 2023
    }
  • Risposte:
    • {
        "200 OK": "La richiesta è stata elaborata con successo e il libro è stato aggiornato correttamente.",
        "400 Bad Request": "Se i dati inviati non sono validi o il corpo della richiesta è vuoto.",
        "403 Forbidden": "Se l'utente non è autorizzato a modificare il libro.",
        "404 Not Found": "Se il libro specificato non esiste.",
        "500 Internal Server Error": "Se si è verificato un errore durante l'elaborazione della richiesta sul server."
      }

/delete-book/:bookId (DELETE)

Questo endpoint consente agli utenti di eliminare un libro esistente.

  • Metodo HTTP: DELETE
  • Endpoint: /delete-book/:bookId
  • Parametri URL:
    • bookId (obbligatorio): L'ID del libro da eliminare.
  • Intestazione:
    • Authorization: Token di autenticazione JWT.
  • Risposte:
    • {
        "200 OK": "La richiesta è stata elaborata con successo e il libro è stato eliminato correttamente.",
        "403 Forbidden": "Se l'utente non è autorizzato a eliminare il libro.",
        "404 Not Found": "Se il libro specificato non esiste.",
        "500 Internal Server Error": "Se si è verificato un errore durante l'elaborazione della richiesta sul server."
      }

/books (GET)

Questo endpoint consente agli utenti di ottenere una lista paginata di libri.

  • Metodo HTTP: GET
  • Endpoint: /books
  • Parametri:
    • page: Numero di pagina (parametro di query, opzionale)
  • Risposte:
    • {
        "200 OK": "La lista dei libri è stata restituita con successo.",
        "500 Internal Server Error": "Errore interno del server."
      }

About

A school project teaching fullstack development with Nuxt, Express, and MongoDB. An open library platform for uploading and downloading books, humorously styled like a piracy site.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published