KlikDoZnanja je web aplikacija namenjena povezivanju korisnika sa pružaocima edukativnih usluga. Sistem omogućava pregled, kreiranje i upravljanje oglasima za privatne časove i druge obrazovne aktivnosti.
Aplikacija podržava više tipova korisnika sa različitim nivoima pristupa i implementira bezbednu autentifikaciju putem JWT mehanizma.
Sistem omogućava sledeće funkcionalnosti:
- Registracija i prijava korisnika
- JWT autentifikacija
- Role-based autorizacija (ADMIN, KORISNIK, TUTOR)
- Kreiranje, izmena i brisanje oglasa
- Pregled i filtriranje oglasa
- Zaštita ruta za autentifikovane korisnike
- Administracija baze podataka putem Adminer alata
- Swagger API dokumentacija
- Vizualizacija statistike (Chart.js grafikoni)
- Integracija eksternih API-ja (vremenska prognoza, slanje emailova) ..
Sistem podržava tri tipa korisnika:
- ADMIN – administracija sistema
- TUTOR – kreiranje i upravljanje oglasima
- KORISNIK – pregled i interakcija sa oglasima
- Next.js (React framework)
- TypeScript
- Tailwind CSS
- Chart.js (vizualizacija podataka)
- React hooks (useState, useEffect)
- Next.js API routes
- Node.js
- Drizzle ORM
- PostgreSQL
- JSON Web Token (JWT)
- HttpOnly cookies
- SameSite zaštita
- Role-based autorizacija
- Docker
- Docker Compose
src/ ├── app/ ├── components/ ├── api/ ├── lib/ └── context/
docker-compose.yml drizzle.config.ts package.json
git clone <URL_REPOZITORIJUMA> cd naziv_projekta
npm install
Kreirati .env fajl u root folderu sa sledećim sadržajem:
DATABASE_URL=postgresql://app:app123@localhost:5432/oglasiedu JWT_SECRET=neki_dugacak_tajni_string CSRF_SECRET=csrf_tajni_kljuc WEATHER_API_KEY=your_openweathermap_api_key SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your_email@gmail.com SMTP_PASS=your_app_password
npm run dev
Aplikacija će biti dostupna na:
U projektu je definisan docker-compose.yml fajl za pokretanje PostgreSQL baze i Adminer alata.
Pokretanje servisa:
docker compose up -d
Zaustavljanje servisa:
docker compose down
Reset baze:
docker compose down -v
Adminer je dostupan na:
Podaci za prijavu:
System: PostgreSQL Server: db Username: app Password: app123 Database: oglasiedu
Za generisanje i primenu migracija koriste se komande:
npx drizzle-kit generate npx drizzle-kit push
Sistem koristi sledeće bezbednosne mehanizme:
- JWT autentifikacija (HS256, 7 dana važenja)
- HttpOnly kolačići (zaštita od XSS napada)
- SameSite cookie politika (CSRF zaštita)
- Role-based autorizacija
- ORM zaštita od SQL Injection napada
- CSRF token zaštita
- CORS konfiguracija
- Security headers (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection)
Grane korišćene u projektu:
- main – stabilna verzija aplikacije (production-ready)
- develop – integraciona grana za razvoj
- feature/external-api – implementacija eksternih API-ja (Weather, Email)
- feature/testing – razvoj testova i CI/CD pipeline-a
API dokumentacija je dostupna na:
http://localhost:3000/api-docs
Swagger omogućava interaktivno testiranje svih API endpointa.
Stranica sa statistikom je dostupna na:
http://localhost:3000/statistika
Prikaz uključuje:
- Ukupan broj oglasa, tutora i recenzija
- Distribuciju korisnika po ulogama (Pie chart)
- Distribuciju oglasa po načinu izvođenja (Bar chart)
- Prosečnu ocenu tutora
Aplikacija koristi sledeće eksterne API-je:
- OpenWeatherMap API - vremenska prognoza po lokaciji
- Nodemailer - slanje email obaveštenja korisnicima
U projektu je definisan docker-compose.yml fajl za pokretanje kompletne aplikacije.
docker compose up -dOvo pokreće:
- PostgreSQL bazu (port 5432)
- Next.js aplikaciju (port 3000)
- Adminer za administraciju baze (port 8080)
Aplikacija će biti dostupna na http://localhost:3000
-
Docker i docker-compose ✅
Dockerfile- multi-stage build za Next.jsdocker-compose.yml- PostgreSQL, Next.js app, Adminer
-
Swagger API dokumentacija ✅
- Dostupna na
/api-docs - Kompletna dokumentacija svih endpointa
- Dostupna na
-
Dva eksterna API-ja ✅
- OpenWeatherMap API (vremenska prognoza)
- Nodemailer SMTP (slanje email obaveštenja)
-
README fajl ✅
- Detaljne informacije o aplikaciji
- Uputstva za pokretanje
-
Git branch strategija ✅
main- stabilna verzijadevelop- integraciona granafeature/external-api- eksterni API-jifeature/docker-swagger- Docker i Swagger integracija
-
Bezbednost (minimum 3) ✅
- CSRF zaštita - token validacija
- XSS zaštita - HttpOnly cookies, sanitizacija inputa
- SQL Injection zaštita - Drizzle ORM parametrizovani upiti
- CORS konfiguracija - ALLOWED_ORIGIN env var
- Security headers - X-Content-Type-Options, X-Frame-Options
-
Vizualizacija podataka ✅
- Chart.js grafikoni
- Statistika stranica (
/statistika) - Pie chart (korisnici po ulogama)
- Bar chart (oglasi po načinu izvođenja)
- React framework ✅ - Next.js 16 + React 19
- 3+ stranice ✅ - Home, Login, Register, Oglasi, Statistika, Admin, API docs
- 3+ reusable komponente ✅
- FilterBtn - dugme za filtriranje
- OglasCard - kartica oglasa
- LoadingSpinner - loading indikator
- WeatherWidget - vremenska prognoza
- LogoutButton - dugme za odjavu
- Stilizovanje ✅ - Tailwind CSS 4
- JavaScript funkcionalnosti ✅
- Filtriranje oglasa (real-time)
- Chart.js vizualizacije
- Weather API integracija
- React hooks ✅ - useState, useEffect, useContext
- Rute ✅ - Next.js App Router
- 5+ modela ✅
- korisnik, tutor, oglas, predmet, recenzija, prijava (6 modela)
- 3+ tipa migracija ✅
- Kreiranje tabela
- Dodavanje spoljnih ključeva
- Postavljanje ograničenja (CHECK, UNIQUE)
- Definisanje ENUM tipova
- REST API konvencija ✅
- GET, POST, PUT, DELETE metode
- Pravilno imenovanje ruta
- JSON format ✅ - Svi odgovori i greške u JSON formatu
- 3+ tipa API ruta ✅
- Autentifikacija (login, register, logout)
- CRUD operacije (oglasi, tutori, predmeti)
- Eksterne integracije (weather, email)
- Statistika i reporting
- 3 tipa korisnika ✅ - ADMIN, KORISNIK, TUTOR
- Autentifikacija ✅ - JWT sa login/logout/register
- Autorizacija ✅ - Role-based access control (middleware)
Sergej Komnenovic Nadja Bjelica Ana Tomkovic