Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Restaurant Management API

Backend aplikacji do zarządzania restauracjami i ich menu. Zbudowany w NestJS z autoryzacją JWT.

🚀 Funkcjonalności

Autoryzacja

  • ✅ Rejestracja admina z przypisaniem do restauracji
  • ✅ Logowanie i JWT tokens
  • ✅ Ochrona endpointów za pomocą JWT Guard

Restauracje

  • ✅ Tworzenie restauracji (nazwa, ulica, miasto, kod pocztowy)
  • ✅ Edycja danych restauracji
  • ✅ Pobieranie listy restauracji
  • ✅ Pobieranie szczegółów restauracji z menu

Adminowie

  • ✅ Tworzenie konta admina powiązanego z restauracją
  • ✅ Edycja profilu admina
  • ✅ Pobieranie danych admina z informacją o jego restauracji
  • ✅ Endpoint /admins/me dla zalogowanego użytkownika

Menu (Dania)

  • ✅ 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

📦 Technologie

  • 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)

🔧 Instalacja

npm install

🏃 Uruchomienie

Development mode (z hot-reload)

npm run start:dev

Production mode

npm run build
npm run start:prod

Aplikacja domyślnie działa na http://localhost:3001/api

📝 Konfiguracja (opcjonalna)

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:3000

📚 Dokumentacja API

Pełna dokumentacja API znajduje się w pliku: API_DOCUMENTATION.md

Główne endpointy:

Auth

  • POST /api/auth/register - rejestracja admina
  • POST /api/auth/login - logowanie

Restaurants

  • POST /api/restaurants - tworzenie restauracji
  • GET /api/restaurants - lista restauracji
  • GET /api/restaurants/:id - szczegóły restauracji z menu
  • GET /api/restaurants/:id/menu - menu restauracji
  • PATCH /api/restaurants/:id - edycja restauracji
  • DELETE /api/restaurants/:id - usunięcie restauracji

Menu Items

  • POST /api/menu-items - dodanie dania
  • GET /api/menu-items - lista wszystkich dań
  • GET /api/menu-items/:id - szczegóły dania
  • PATCH /api/menu-items/:id - edycja dania
  • DELETE /api/menu-items/:id - usunięcie dania

Admins

  • POST /api/admins - tworzenie admina
  • GET /api/admins/me - profil zalogowanego admina z restauracją
  • GET /api/admins - lista adminów
  • GET /api/admins/:id - szczegóły admina z restauracją
  • PATCH /api/admins/:id - edycja admina
  • DELETE /api/admins/:id - usunięcie admina

🔐 Autoryzacja

Większość endpointów wymaga tokenu JWT w headerze:

Authorization: Bearer {your-jwt-token}

Token otrzymujesz po zarejestrowaniu lub zalogowaniu.

🎯 Przykładowy flow

  1. Stwórz restaurację (POST /api/restaurants)
  2. Zarejestruj admina przypisanego do restauracji (POST /api/auth/register)
  3. Zaloguj się (POST /api/auth/login) - otrzymasz JWT token
  4. Dodaj dania do menu (POST /api/menu-items)
  5. Pobierz restaurację z menu (GET /api/restaurants/:id)
  6. Edytuj dania (PATCH /api/menu-items/:id)
  7. Usuń danie (DELETE /api/menu-items/:id)

🏗️ Struktura projektu

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

🔒 Bezpieczeństwo

  • ✅ 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

🛠️ Inne komendy

# Formatowanie kodu
npm run format

# Linting
npm run lint

# Testy
npm run test

# Build
npm run build

📌 Notatki

  • 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/:id automatycznie zwraca menu restauracji

📧 Contact

Stworzone jako zadanie rekrutacyjne.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages