Repository navigation
Home
Az alkalmazás követi a Clean Architecture alapelveit a Model-View-Controller (MVC) mintán belül. A DataService tartalmazza az összes üzleti logikát, így a Controllerek "vékonyak", felelősségi köreik tiszták és könnyen tesztelhetőek maradnak. A kód írása során törekedtem a Clean Code elvek betartására (pl. beszédes változónevek, DRY elv, egyértelmű felelősségi körök). Nincsenek halogatott architekturális hibák.
A könyvtárosnak be kell jelentkeznie (felhasználónév és jelszó).
Biztonsági szabály: Három hibás próbálkozás után a rendszer zárolja a felületet és ténylegesen leállítja a futást (az IHostApplicationLifetime.StopApplication() meghívásával teljesítve a feladat "kilép" követelményét).
- Könyvek: Nyilvántartásba vehetőek (cím, szerző, kiadó, év, ISBN, példányszám). Több azonos könyv felvitelekor a példányszám növekszik. Csak olyan könyv törölhető, ami nincs éppen kikölcsönözve. Keresés lehetséges Szerző, Cím, ID és ISBN alapján.
-
Tagok: Polimorfikus felépítés. Öröklődéssel négy típus van megvalósítva:
-
StudentMember(Egyetemi hallgató): Max 5 könyv, 60 nap. -
ProfessorMember(Egyetemi oktató): Korlátlan könyv, 365 nap. -
ExternalMember(Külsős): Max 4 könyv, 30 nap. -
OtherMember(Egyéb): Max 2 könyv, 14 nap. Keresés lehetséges Név, ID és Lakcím alapján. Aktív kölcsönzéssel rendelkező tag nem törölhető.
-
A kölcsönzési folyamat biztonságos autocomplete kereséssel történik. A rendszer valós időben ellenőrzi a tag kapacitását és megakadályozza a limit túllépését. A ReturnBook metódus a visszavétel pillanatában ellenőrzi a határidőt, és kiszámítja a napi 50 Ft büntetést késés esetén.
graph TD
UI[Web UI / Views] --> C[Controllers]
C --> DS[DataService / Business Logic]
DS --> DB[(LibraryDbContext / SQLite)]
subgraph "MVC Layers"
UI
C
DS
end
subgraph "Persistence"
DB
end
sequenceDiagram
actor Librarian
participant UI as Loan View
participant Ctrl as LoansController
participant DS as DataService
participant DB as Database
Librarian->>UI: Select Member & Books, Save
UI->>Ctrl: POST Create(LoanViewModel)
Ctrl->>DS: CreateLoan(bookId, memberId, date)
DS->>DB: GetBook(bookId)
DB-->>DS: book object
DS->>DB: GetMember(memberId)
DB-->>DS: member object
DS->>DS: Validate Loan Limits & Availability
alt If limit exceeded or no copies
DS-->>Ctrl: return (false, "Error Message")
Ctrl-->>UI: Display Error to Librarian
else If all rules valid
DS->>DB: Add(new Loan)
DB-->>DS: SaveChanges()
DS-->>Ctrl: return (true, "Success")
Ctrl-->>UI: Redirect to Success View
end
stateDiagram-v2
[*] --> Available : New Copy Registered
state Available {
[*] --> InLibrary
}
Available --> Loaned : Librarian records Loan
state Loaned {
[*] --> Active
Active --> Overdue : DueDate Passed
}
Loaned --> Available : ReturnBook (Fine calculated if Overdue)
Available --> Deleted : Delete (Only if 0 active loans)
Deleted --> [*]