Veebirakendus sõidukite haldamiseks ja broneeringute loomiseks.
- Backend: Spring Boot (Java 21) + PostgreSQL
- Frontend: Angular 20
- Andmebaas: PostgreSQL (Flyway migratsioonid)
Backend on stateless. Kõik andmed salvestatakse PostgreSQL-i, seega saab käitada mitut backend instantsi paralleelselt ning uuendada neid ükshaaval, kasutades sama andmebaasi.
Muutuva nõude näide: broneeringu staatus sai uue väärtuse COMPLETED. See lisati Flyway V2 migratsiooniga (uuendab chk_booking_status) ilma olemasolevaid välju või vanu staatuse väärtusi lõhkumata. Frontend kuvab tundmatud staatuse väärtused alternatiivse sildi/stiiliga.
Enne käivitamist peavad olema paigaldatud:
- Docker
- Java 21
- Node.js (soovituslik v20+)
- npm
Projekti juurkaustast:
docker compose up -dProjekti juurkaustast:
cd frontend
npm install
npm startProjekti juurkaustast:
cd backend
./gradlew bootRunWindows (CMD):
cd backend
gradlew.bat bootRunFrontend URL: http://localhost:4200 Backend URL: http://localhost:8080 Swagger: http://localhost:8080/swagger-ui/index.html Health: http://localhost:8080/actuator/health
-
vehicles
iduuid (PK)nametext (not null)descriptiontexttypetext (not null)created_attimestamptz (default now)updated_attimestamptz (default now)
-
bookings
iduuid (PK)vehicle_iduuid (FK -> vehicles.id, ON DELETE CASCADE)customer_nametext (not null)start_timetimestamptz (not null)end_timetimestamptz (not null)statustext (ACTIVE/CANCELLED/COMPLETED, default ACTIVE)created_attimestamptz (default now)updated_attimestamptz (default now)
Reeglid:
end_time > start_time(check constraint)- Topeltbroneeringu vältimine: sama sõiduki ACTIVE broneeringud ei tohi ajaliselt kattuda (exclusion constraint kasutades tstzrange)
- Autentimine ja rollid (admin/viewer). Angular route guard’id lisada seoses autentimise ja rollidega.
- Jõudluse parandamine suurtemate andmekogude korral (indeksid, pagination).
- Backend taustaprotsess (sync), mis märgib broneeringud staatuseks COMPLETED, kui end_time on möödas.
- Täpsustada broneerimisloogika: kas tegu on turismirendiga (miinimum 1 päev, 1 broneering päevas) või Bolt-stiilis lühirendiga (mitu broneeringut päevas). Selle põhjal saab frontendis kuvada hõivatud ajad ja blokeerida kasutajale mittevõimalikud ajavahemikud.
- Soft-delete (archive) sõidukitele: praegu vehicle kustutamine eemaldab ka seotud broneeringud (ON DELETE CASCADE). Päris süsteemis oleks parem arhiveerida sõiduk (archived_at/is_active), säilitada broneeringute ajalugu ning blokeerida uute broneeringute loomine arhiveeritud sõidukile.
- API versioonihaldus: lisada /api/v1/* endpointid (või versioned media type) ja vajadusel standardiseerida vastused kujule { meta, data }, et muudatused oleksid backward compatible.
- Lisada sõidukile unikaalne identifikaator (nt registrinumber või kood), et sama nimega sõidukid ei tekitaks kasutajatele segadust.
- Eraldi “overview” endpoint, millega saab vajadusel tulevikus tagastada erinevaid välju sõltuvalt rollist.
- Lisada validatsioonireeglid (maks broneeringu pikkus, tööajad, min etteteatamisaeg jne).
- Mobiilisõbraliku kasutajaliidese arendamine
- Rohkem rõhku panna ligipääsetavusele (WCAG).
- Kalendrivaade broneeringute ülevaate jaoks (UI/UX).
- Testid