Skip to content

ForceOfNature13/ProiectPAOJ2025

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏛️ SmartLibrary

Java 21 · MySQL 8 · Maven 3.9 · JDBC

All‑in‑one toolchain for next‑gen library management

SmartLibrary aduce vibe‑ul digital în bibliotecă: catalogare instant, împrumuturi fără fricțiune, cozi FIFO transparente și evenimente culturale integrate. Totul orchestrat printr‑un CLI elegant, cu audit live și securitate iron‑clad.


📖 Cuprins


✨ Caracteristici

🚀 Feature
💾 Persistență MySQL 8 + JDBC (repository generic)
🔒 Hashing parole cu BCrypt (12 rounds)
🛠️ Creare / resetare automată schemă la start‑up
📝 Audit asincron (EventBus → AuditServiceaudit.csv)
🚀 Cache în memorie pentru evenimente populare
⌨️ 38 comenzi CLI (funcționalități complete)
🧪 Teste unitare JUnit 5 + Mockito
💬 UI text‑based prietenoasă, cu highlight pe interacțiuni

⚙️ Instalare rapidă

# 1️⃣ Clonare
git clone https://github.com/username/SmartLibrary.git
cd SmartLibrary

# 2️⃣ Build
mvn clean package

# 3️⃣ Pornire
java -jar target/smartlibrary.jar

▶️ La prima rulare, aplicația creează automat baza de date (dacă nu există) și populează date demo.


🗂️ Diagramă BD

Diagramă ER

🏗️ Arhitectură

               ┌──────────┐  commands   ┌────────────────┐
               │   CLI    │ ───────────►│ Service Layer  │
               └──────────┘             └────────────────┘
                                          │  ▲
                              cache hit   │  │  cache miss / JDBC
                                          │  │
                                          ▼  │
                                        ┌──────────┐
                                        │  Cache   │
                                        └──────────┘
                                          │
                                          ▼
               ┌──────────┐  JDBC   ┌────────────────┐
               │ MySQL 8  │ ◄────── │  Repository    │
               └──────────┘         └────────────────┘
                                          │
                                   events │
                                          ▼
                                        ┌──────────┐
                                        │ EventBus │
                                        └──────────┘
                                          │
                                          ▼
                                        ┌──────────┐
                                        │ AuditSvc │
                                        └──────────┘
  • Layered – UI ▸ Service ▸ Repository ▸ DB
  • Cache – evenimente populare păstrate in‑memory
  • Audit asincron – EventBus ⇒ Audit Service
  • Patterns – Singleton · Factory · Builder · Repository · Strategy · CoR · Observer

📝 Decizii tehnice

  • Gestionarea datelor se face exclusiv prin colecții Java (List/ArrayList, Map/HashMap, Set/HashSet, TreeSet, LinkedList, BlockingQueue etc.); în consecință, cerința fallback cu array-uri 1-D / 2-D nu se mai aplică.

🧩 Model de domeniu

Entitate Cheie Tabel
📗 Carte ISBN, Editură carte
📰 Revistă Frecvență, Număr revista
🎧 Audiobook Durată, Naratori audiobook
🙋 Cititor Împrumuturi, Penalizări cititor
👩‍💼 Bibliotecar Rol (STAFF / ADMIN) bibliotecar
🔄 Împrumut Dată start / end, penalitate imprumut
⏳ Rezervare Cozi FIFO rezervare_publicatie
⭐ Recenzie Rating, comentariu recenzie
📆 Eveniment Dată, Locație, Capacitate eveniment
🏢 Editura Record imutabil editura

⌨️ CLI

👩‍💼 Bibliotecar — Admin & Staff

1.  📚  Listare toate publicatiile
2.  🔍  Cautare dupa titlu
3.  🖋️  Cautare dupa autor
4.  🏷️  Cautare dupa categorie
5.  📅  Cautare dupa interval de ani
6.  ✅  Cautare dupa disponibilitate
7.  🧩  Cautare complexa
8.  🗓️  Sorteaza dupa anul publicarii
9.  ⭐  Sorteaza dupa rating
10. 🔢  Sorteaza dupa nr. de imprumuturi
11. 🔠  Sorteaza dupa titlu
12. 📖  Imprumuta publicatie
13. 📝  Afiseaza recenziile unui cititor
14. 📝  Afiseaza recenziile unei publicatii
15. 🎟️  Listare evenimente
16. 📂  Vizualizare imprumuturi active (cititor)
17. 🗄️  Vizualizare istoric imprumuturi (cititor)
18. 💸  Vizualizare amenzi (cititor)
19. ➕  Adauga publicatie
20. ❌  Sterge publicatie
21. ✨  Creeaza eveniment
22. 🗑️  Sterge eveniment
23. 🔒  Blocheaza utilizator
24. 🔓  Deblocheaza utilizator
25. 👥  Adauga bibliotecar STAFF
0.  🚪  Logout

🙋 Cititor

1.  📚  Listare toate publicatiile
2.  🔍  Cautare dupa titlu
3.  🖋️  Cautare dupa autor
4.  🏷️  Cautare dupa categorie
5.  📅  Cautare dupa interval de ani
6.  ✅  Cautare dupa disponibilitate
7.  🧩  Cautare complexa
8.  🗓️  Sorteaza dupa anul publicarii
9.  ⭐  Sorteaza dupa rating
10. 🔢  Sorteaza dupa nr. de imprumuturi
11. 🔠  Sorteaza dupa titlu
12. 📖  Imprumuta publicatie
13. ↩️  Returneaza publicatie
14. 📌  Rezerva publicatie
15. 🔄  Reinnoieste imprumut
16. ✍️  Adauga recenzie
17. 🗣️  Afiseaza recenzii
18. 🎟️  Listare evenimente
19. 🖊️  Inscriere la eveniment
20. 📂  Vizualizare imprumuturi active
21. 🗄️  Vizualizare istoric imprumuturi
22. 💸  Vizualizare amenzi
0.  🚪  Logout

🔍 Cum funcționează

  1. CreeazaTabele generează (sau resetează) schema la fiecare pornire.
  2. CLI‑ul ridică comenzi către Service Layer; aici se fac validările și se declanșează tranzacții JDBC.
  3. Fiecare acțiune se loghează ca eveniment → EventBusAuditService (thread dedicat).
  4. Securitatea parolelor este asigurată de BCrypt (12 rounds).

🧰 Stack & Pattern‑uri

Stack Utilizare
Java 21 Records · pattern matching · Stream API
MySQL 8 + JDBC Persistență relațională ↓ CRUD
BCrypt Hashing parole
JUnit 5 + Mockito Testare
Patterns Singleton · Factory · Builder · Repository · Strategy · CoR · Observer

🗺️ Roadmap

  • 🌐 Modul REST (Spring Boot)
  • 🖥️ UI React
  • ♻️ Hot‑reloading cu JRebel
  • 🐳 Docker & orchestrare Kubernetes
  • 📈 Monitorizare Prometheus + Grafana
  • ☁️ Deploy AWS / Azure

📝 Licență

© 2025 SmartLibrary. Toate drepturile rezervate. Este interzisă copierea, redistribuirea sau modificarea acestui software fără permisiunea scrisă a autorilor.

About

SmartLibrary este un sistem Java pentru gestiunea unei biblioteci, ce permite administrarea publicatiilor, imprumuturi, rezervari, recenzii si evenimente. Suporta autentificare si roluri (cititor/bibliotecar) si ofera functionalitati de cautare, sortare si penalizare.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages