Skip to content
Snippets Groups Projects
user avatar
Błażej Wilkoławski authored
72e7f091
History
Name Last commit Last update
client
server
README.md

System wypożyczania planszówek

Funkcjonalności

Klient

  • Obsługa kont użytkowników
    • Rejestracja i logowanie
    • Obsługa sesji użytkownika (jeszcze bez: obsługi opcji "zapamiętaj mnie" i odświeżania JWT tokenów)
    • Jeszcze niezaimplementowane: weryfikacja adresu email użytkownika (obecnie konta od razu są aktywne)
    • Jeszcze niezaimplementowane: resetowanie/zmiana hasła
  • Wypożyczanie gier planszowych
    • Przeglądanie, wyszukiwanie i filtrowanie gier
    • Wypożyczanie gier na podany okres
    • Anulowanie utworzonych rezerwacji
    • Przeglądanie archiwalnych rezerwacji (historia)
    • Jeszcze niezaimplementowane: wysyłanie prośby o przedłużenie wypożyczenia
  • Jeszcze niezaimplementowane: panel administratora
    • Oznaczanie wypożyczonych gier jako odebrane oraz zmiana dat zwrotu
    • Zarządzanie biblioteką gier planszowych, użytkowników i wszystkich wypożyczeń
  • UI/UX
    • Pełna obsługa trybu jasnego i ciemnego
    • Interfejs dostosowany do ekranów o różnych rozmiarach (mobilne i desktopowe)
    • Custom-styled components z wykorzystaniem MUI i styled-components (np. client/src/common/MainAppBar.tsx, src/common/CentralCard.tsx i kilka innych)
  • Architektura kodu
    • Implementacja przy użyciu Redux Toolkit i Redux Observable
    • Wykorzystanie bibliotek React Router, MUI, Notistack
    • Komunikacja z API za pomocą Ajax z biblioteki RxJS

Serwer

  • Obsługa kont użytkowników
    • Haszowanie haseł użytkowników za pomocą algorytmu Argon2
    • Generowanie tokenów JWT w celu obsługi sesji logowania
    • Weryfikacja uprawnień administratora przy wykonywaniu odpowiednich operacji
  • Zarządzanie bazą danych
    • Obsługa wprowadzania zmian w strukturze bazy danych (migracji)
    • Operacje CRUD na bazie danych
  • REST API
    • Obsługa zapytań GET i POST do bazy danych
    • Przesyłanie plików na serwer i statyczne ich serwowanie

Uruchomienie

Klient (React)

  1. Sklonuj repozytorium
  2. Zainstaluj zależności za pomocą npm install
  3. Skonfiguruj plik .env (przykład znajduje się w pliku .env.example)
  4. Uruchom serwer za pomocą npm run dev
  5. Aplikacja domyślnie działa pod adresem http://localhost:5173

Serwer (Rust)

  1. Sklonuj repozytorium
  2. Zainstaluj zależności za pomocą cargo build
  3. Skonfiguruj plik .env (przykład znajduje się w pliku .env.example)
  4. Uruchom serwer za pomocą cargo run
  5. Serwer domyślnie działa pod adresem http://localhost:8080

Testowanie

Załączona baza danych SQLite (server/database.db) zawiera przykładowe dane gier planszowych oraz jednego testowego użytkownika z uprawnieniami administratora:

  • login 123456
  • hasło adminadmin

Na poczet ułatwionego ręcznego testowania, serwer tymczasowo udostępnia cztery endpointy:

  • GET /login -- zwraca formularz logowania
  • GET /register -- zwraca formularz rejestracji
  • GET /board_game -- zwraca formularz dodawania nowej gry planszowej
  • GET /test -- strona testowa pozwalająca na wysyłanie zapytań do endpointów typu GET z podanym JWT tokenem.

Przykład wykorzystania testowych endpointów:

  1. JWT token można w prosty sposób zdobyć, logując się na stronie http://localhost:8080/login.
  2. Token należy przekleić do odpowiedniego pola na stronie http://localhost:8080/test.
  3. W polu Target URL należy wpisać adres endpointu, np. /api/user/get_all.

Planowane zmiany i rozwinięcia

  • Implementacja brakujących funkcjonalności (wymienionych wyżej)
  • Zwiększenie bezpieczeństwa aplikacji
    • Ograniczenie liczby prób logowania i rejestracji
    • Szyfrowanie bazy danych
    • Dodanie funkcjonalności kluczy API do serwera
  • Obsługa powiadomień mailowych wysyłanych przez system do użytkowników