Backend aplikacji do zarządzania restauracjami i ich menu. Zbudowany w NestJS z autoryzacją JWT.
- ✅ Rejestracja admina z przypisaniem do restauracji
- ✅ Logowanie i JWT tokens
- ✅ Ochrona endpointów za pomocą JWT Guard
- ✅ Tworzenie restauracji (nazwa, ulica, miasto, kod pocztowy)
- ✅ Edycja danych restauracji
- ✅ Pobieranie listy restauracji
- ✅ Pobieranie szczegółów restauracji z menu
- ✅ Tworzenie konta admina powiązanego z restauracją
- ✅ Edycja profilu admina
- ✅ Pobieranie danych admina z informacją o jego restauracji
- ✅ Endpoint
/admins/medla zalogowanego użytkownika
- ✅ Dodawanie dań do menu (nazwa, opis, składniki opcjonalnie, cena)
- ✅ Edycja dań (ceny, nazwy, składników)
- ✅ Usuwanie dań z menu
- ✅ Pobieranie menu konkretnej restauracji
- ✅ Automatyczne dołączanie menu przy pobieraniu restauracji
- ✅ Ograniczenia: admin może zarządzać tylko menu swojej restauracji
- NestJS - framework Node.js
- TypeScript - typowany JavaScript
- JWT (jsonwebtoken) - autoryzacja
- Passport - strategia autentykacji
- bcrypt - hashowanie haseł
- class-validator - walidacja DTO
- In-memory storage - Map (trade-off, bez bazy danych)
npm installnpm run start:devnpm run build
npm run start:prodAplikacja domyślnie działa na http://localhost:3001/api
Stwórz plik .env na podstawie .env.example:
PORT=3001
API_PREFIX=api
JWT_SECRET=your-secret-key-change-in-production
CORS_ORIGIN=http://localhost:3000Pełna dokumentacja API znajduje się w pliku: API_DOCUMENTATION.md
POST /api/auth/register- rejestracja adminaPOST /api/auth/login- logowanie
POST /api/restaurants- tworzenie restauracjiGET /api/restaurants- lista restauracjiGET /api/restaurants/:id- szczegóły restauracji z menuGET /api/restaurants/:id/menu- menu restauracjiPATCH /api/restaurants/:id- edycja restauracjiDELETE /api/restaurants/:id- usunięcie restauracji
POST /api/menu-items- dodanie daniaGET /api/menu-items- lista wszystkich dańGET /api/menu-items/:id- szczegóły daniaPATCH /api/menu-items/:id- edycja daniaDELETE /api/menu-items/:id- usunięcie dania
POST /api/admins- tworzenie adminaGET /api/admins/me- profil zalogowanego admina z restauracjąGET /api/admins- lista adminówGET /api/admins/:id- szczegóły admina z restauracjąPATCH /api/admins/:id- edycja adminaDELETE /api/admins/:id- usunięcie admina
Większość endpointów wymaga tokenu JWT w headerze:
Authorization: Bearer {your-jwt-token}
Token otrzymujesz po zarejestrowaniu lub zalogowaniu.
- Stwórz restaurację (POST
/api/restaurants) - Zarejestruj admina przypisanego do restauracji (POST
/api/auth/register) - Zaloguj się (POST
/api/auth/login) - otrzymasz JWT token - Dodaj dania do menu (POST
/api/menu-items) - Pobierz restaurację z menu (GET
/api/restaurants/:id) - Edytuj dania (PATCH
/api/menu-items/:id) - Usuń danie (DELETE
/api/menu-items/:id)
backend/
├── src/
│ ├── modules/
│ │ ├── admin/ # Moduł adminów
│ │ ├── auth/ # Autoryzacja JWT
│ │ ├── restaurant/ # Moduł restauracji
│ │ └── menu-item/ # Moduł dań/menu
│ ├── common/
│ │ ├── filters/ # Exception filters
│ │ ├── guards/ # Auth guards
│ │ └── decorators/ # Custom decorators
│ ├── app.module.ts
│ └── main.ts
├── API_DOCUMENTATION.md # Pełna dokumentacja API
└── package.json
- ✅ Hasła są hashowane przy użyciu bcrypt
- ✅ JWT tokeny wygasają po 24 godzinach
- ✅ Walidacja wszystkich inputów (class-validator)
- ✅ Admini mogą zarządzać tylko swoimi restauracjami i ich menu
- ✅ Global exception filter dla spójnych błędów
# Formatowanie kodu
npm run format
# Linting
npm run lint
# Testy
npm run test
# Build
npm run build- Aplikacja używa in-memory storage (Map) zamiast bazy danych
- Dane są tracone po restarcie aplikacji
- Admin może zarządzać tylko menu swojej własnej restauracji
- Endpoint GET
/api/restaurants/:idautomatycznie zwraca menu restauracji
Stworzone jako zadanie rekrutacyjne.