Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Latest commit

 

History

History
204 lines (156 loc) · 5.96 KB

README.md

File metadata and controls

204 lines (156 loc) · 5.96 KB

LilBib (Lightweight Integrated Logistics for Book Indexing and Borrowing)

Sistema di gestione bibliotecaria.

Come contribuire

Setup

Prerequisiti

È necessario installare golang e make per compilare il codice, docker e docker-compose per eseguire il database di sviluppo, e zip per comprimere i file di rilascio.

Nota per gli utenti Windows: si consiglia di installare git for windows poiché fornisce un set di tool simile ai sistemi Unix, il che è fondamentale al fine di eseguire il Makefile ed i git hooks. Inoltre, per installare make e zip si consiglia un package manager come Chocolatey.

Inizializzazione progetto

Per contribuire al codice è necessario eseguire dalla directory principale del repository il seguente comando:

$ ./scripts/setup.sh

Compilazione

Per compilare ed eseguire è possibile usare make:

$ make run

È possibile anche generare un binario di release:

$ make release

Per eliminare i risultati della compilazione:

$ make clean

Organizzazione delle cartelle

Basata su questo.

/cmd/lilbib

Contiene il main.

/config

Contiene il file di configurazione di default.

/database

Contiene la struttura del database ed un file docker-compose per avviare il database di sviluppo.

/githooks

Contiene degli hook utili allo sviluppatore.

/internal

Contiene i packages interni da cui è composto il software.

/scripts

Contiene script utili allo sviluppatore.

/web

Contiene gli asset statici e i template HTML.

/sandbox

Contiene un ambiente di prova per i risultati della compilazione. (generata da make)

/release

Contiene i binari di rilascio. (generata da make)

Struttura del progetto

Pagine e endpoint

/

Home del sito web: può contenere informazioni sul progetto ed eventuali statistiche.

/libri

Elenco dei libri con ricerca server-side. I risultati sono divisi in più pagine. La ricerca opera su titolo, autore e genere. Di default reindirizza a /libri/0

/libri/<page>

Restituisce la page-esima pagina.

/libro

Reindirizza a /libri.

/libro/<id>

Dettagli sul libro id. Se il libro è correntemente in prestito visualizza l'assegnatario corrente.

/autori

Elenco degli autori. Di default reindirizza ad /autori/a.

/autori/<iniziale>

Elenco degli autori con iniziale iniziale. In cima è presente una lista con i collegamenti a tutte le iniziali disponibili. Reindirizza alla ricerca di /libri quando si clicca su un autore.

/generi

Elenco dei generi. Reindirizza alla ricerca di /libri quando si clicca su un genere.

/login

Pagina di accesso all'area utente. Utilizza il server LDAP per l'autenticazione (oppure reindirizza alla pagina di accesso del SSO), ritorna un token e reindirizza a /utente.

/logout

Endpoint che rimuove il token di accesso e reindirizza a /.

/utente

Contiene informazioni sull'utente, come il nome utente e la storia dei prestiti. È presente un link a /prestito.

/prestito

Permette di scansionare o inserire il codice di uno o più libri per prenderli in prestito scegliendone la durata. In caso non sia stato effettuato l'accesso verranno richieste le proprie credenziali, senza però restituire un token (caso d'uso: computer comune in biblioteca per prendere in prestito e restituire libri). In caso non sia stato effettuato l'accesso reindirizza a /login.

/restituzione

Permette di restituire i libri in proprio possesso. Funzionamento identico a /prestito.

/admin/generaCodici

Permette all'utente amministratore di generare i codici QR per i libri.

/admin/aggiungiLibro

Permette all'utente amministratore di aggiungere generi, autori e libri al database.

/static

Endpoint per servire contenuti statici da web/static.

/api/getLibro?qrcode=<base64-encoded code+password>

Endpoint per ottenere informazioni su un libro in formato JSON a partire dal contenuto del suo QR code (necessaria previa autenticazione).

/api/prestito?qrcode=<base64-encoded code+password>&durata=<time in seconds>

Endpoint per prendere in prestito un libro per una certa durata (necessaria previa autenticazione).

/api/restituzione?qrcode=<base64-encoded code+password>

Endpoint per restituire un libro (necessaria previa autenticazione).

Tabelle SQL

Libro

  • Codice (primary key)
  • Titolo
  • Autore
  • Genere
  • Prenotato
  • Hashz

Genere

  • Codice (primary key)
  • Nome

Autore

  • Codice (primary key)
  • Nome
  • Cognome

Prestito

  • Codice (primary key)
  • Libro (foreign key)
  • Utente (foreign key)
  • Data_prenotazione
  • Durata
  • Data_restituzione

Backend GO

In ogni package è presente un file README dove sono indicate le funzionalità da implementare, i tipi e le funzioni esportate. Si consiglia di scrivere funzioni interne al package per evitare che queste diventino troppo lunghe.

Packages

  • auth
  • config
  • db
  • handlers
  • hash
  • qrcode

Template codice sorgente

Questo template va incluso all'inizio di ogni file.

/*
 * nome-file.go
 *
 * Descrizione del file.
 *
 * Copyright (c) 2020 Nome Cognome <[email protected]>
 *
 * This file is part of LilBib.
 *
 * LilBib is free software; you can redistribute it and/or modify it
 * under the terms of the Affero GNU General Public License as
 * published by the Free Software Foundation; either version 3, or (at
 * your option) any later version.
 *
 * LilBib is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the Affero GNU General
 * Public License for more details.
 *
 * You should have received a copy of the Affero GNU General Public
 * License along with LilBib; see the file LICENSE. If not see
 * <http://www.gnu.org/licenses/>.
 */