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)
- Sklonuj repozytorium
- Zainstaluj zależności za pomocą
npm install
- Skonfiguruj plik
.env
(przykład znajduje się w pliku.env.example
) - Uruchom serwer za pomocą
npm run dev
- Aplikacja domyślnie działa pod adresem http://localhost:5173
Serwer (Rust)
- Sklonuj repozytorium
- Zainstaluj zależności za pomocą
cargo build
- Skonfiguruj plik
.env
(przykład znajduje się w pliku.env.example
) - Uruchom serwer za pomocą
cargo run
- 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:
- JWT token można w prosty sposób zdobyć, logując się na stronie http://localhost:8080/login.
- Token należy przekleić do odpowiedniego pola na stronie http://localhost:8080/test.
- 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