Skip to content

DominikDab341/SpotFinder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📍 SpotFinder

Aplikacja do odkrywania i oceniania miejsc, zintegrowana z Google Maps API oraz AI (Gemini). Użytkownicy mogą przeglądać miejsca, czytać opinie i zadawać pytania o nie za pomocą wbudowanego czatu AI. Projekt oparty jest na Django REST Framework oraz React.


✨ Główne funkcje

  • Przeglądanie miejsc: wyszukiwanie i wyświetlanie szczegółów miejsc z Google Maps API.
  • Opinie i opisy: pobieranie recenzji i opisów redakcyjnych bezpośrednio z Google Places API.
  • Czat AI (SpotAI): zadawaj pytania o dowolne miejsce — Gemini odpowiada na podstawie opinii i opisu miejsca.
  • Rezerwacje: rezerwowanie miejsc bezpośrednio z aplikacji.
  • Ulubione: dodawanie i usuwanie miejsc z listy ulubionych.
  • Autoryzacja JWT: bezpieczny dostęp do API z tokenami JWT.

🛠 Technologie

Backend

  • Python 3.12 / Django 6
  • Django REST Framework
  • ADRF (async Django REST Framework)
  • Google Maps / Places API
  • Google Gemini API
  • SQLite (domyślna baza danych)

Frontend

  • React 18+ / TypeScript
  • Vite
  • Playwright (testy E2E)

DevOps

  • Docker & Docker Compose

🚀 Instalacja i uruchomienie

Opcja 1: Docker (zalecane)

  1. Utwórz pliki .env na podstawie szablonów:

    cp backend/.env.example backend/.env
    cp frontend/.env.example frontend/.env

    Uzupełnij klucze API w obu plikach.

  2. Uruchom kontenery

    docker compose up --build
  3. Aplikacja dostępna pod:

    • Frontend: http://localhost:5173
    • Backend API: http://localhost:8000

Opcja 2: Lokalnie

Backend (Django)

  1. Wejdź do folderu backendu:

    cd backend
  2. Utwórz i aktywuj środowisko wirtualne

    python -m venv venv
    source venv/bin/activate        # Linux / macOS
    venv\Scripts\activate           # Windows
  3. Zainstaluj zależności

    pip install -r requirements.txt
  4. Utwórz plik .env na podstawie poniższego szablonu:

    GOOGLE_MAPS_API=twoj_klucz_google_maps
    GEMINI_API_KEY=twoj_klucz_gemini
  5. Wykonaj migracje bazy danych

    python manage.py migrate
  6. Stwórz konto administratora

    python manage.py createsuperuser
  7. Uruchom serwer deweloperski

    python manage.py runserver

Frontend (React + Vite)

  1. Wejdź do folderu frontend:

    cd frontend
  2. Zainstaluj zależności

    npm install
  3. Utwórz plik .env i wypełnij zmienne środowiskowe.

  4. Uruchom aplikację

    npm run dev

Aplikacja frontendowa dostępna pod adresem: http://localhost:5173


🧪 Testy

Projekt zawiera 16 testów E2E napisanych w Playwright, pokrywających kluczowe flow aplikacji:

Plik Testy Co pokrywa
tests/auth/login.spec.ts 6 Formularz logowania, walidacja, redirect, zapis tokenów
tests/spotCard/spotCard.spec.ts 5 Wyświetlanie danych, otwieranie modali, dodawanie/usuwanie ulubionych
tests/modals/aiModal.spec.ts 2 Wysyłanie wiadomości, wyświetlanie odpowiedzi AI
tests/modals/reservationModal.spec.ts 3 Formularz rezerwacji, rezerwacja, anulowanie

Uruchamianie testów

cd frontend

# Wszystkie testy
npx playwright test

# Konkretny plik
npx playwright test tests/spotCard/spotCard.spec.ts

# Z UI Playwright
npx playwright test --ui

Testy mockują wszystkie zewnętrzne API (backend, Google Maps, Nominatim) i działają bez uruchomionego serwera backendowego.

Backend (Django TestCase + DRF APITestCase)

Plik Testy Co pokrywa
spots/tests.py 11 Tworzenie/usuwanie spotów, rezerwacje z walidacją kategorii, email po rezerwacji, ulubione (API), mapowanie kategorii
user/tests.py 2 Rejestracja użytkownika, walidacja duplikatu emaila
cd backend
python manage.py test

About

A full-stack web application built with React and Django that allows users to discover, favorite, ask AI using Gemini API, and reserve interesting places nearby using Geolocation and Google Places API.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors