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

napaalm/LilBib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 <nome.cognome@example.org>
 *
 * 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/>.
 */