Analiza istniejącego serwera - marcello96/speed-game GitHub Wiki
Aktualne działanie serwera InFUN
Schemat budowy komponentu
ExampleGame
|__ css
|__ img
|__ lib
|__ js
|
|__ config.json
|__ index.html
{
"name": "task_1",
"config": [
{
"name": "sth",
"value": "default_value",
"required": true
},
{
"name": "sth_2",
"value": "default_value_2",
"required": false
}
]
}
Komunikacja komponent-serwer
Komunikacja odbywa się poprzez Rest API.
Przed rozpoczęciem gry
GET /{game}/config
Response: 200 OK
Body:
{
"group": "$string",
"nick": "$string",
"age": "$integer",
"config": [
...
]
}
Po zakończeniu gry
POST /{game}/end
Body:
{
"score": "$integer",
"group": "$string",
"nick": "$string",
"age": "$integer"
}
Response 200 OK
Strony udostępniane przez serwer
- /createGame
- tworzenie rozgrywki grupowej
- ustalenie możliwych gier komponentowych w rozgrywce
- /manage
- panel administracyjny rozgrywki
- przedstawia wykresy aktualnego stanu rozgrywki (wyniki graczy)
- gdy uderzamy do niego bezpośrednio wyświetlany jest błąd "Nie wybrano żadnej rozgrywki"
- gdy przekierowany z /createGame tworzy w kontrolerze nową rozgrywkę
- /joinGame
- strona umożliwiająca użytkownikowi dołączenie do rozgrywki o danym groupId
- po zatwierdzeniu formularza użytkownik dodawany do gry (użytkownik identyfikowany po ciasteczku JSESSIONID)
- gdy użytkownik już jest dołączony do jakiejś rozgrywki, zwracany błąd "Użytkownik z ciasteczkiem ${JSESSIONID} już istnieje"
- /newTask
- redirect do /task/new
- /task/new
- przydziela grę dla gracza
- gracz identyfikowany po sesji z ciasteczka
- gdy gracz nie był dołączony wcześniej do żadnej rozgrywki zwraca błąd "Nie ma użytkownika z ciasteczkiem = ${JSESSIONID}"
- po zakończeniu gry przez użytkownika przekierowany do /taskResult
- gdy gracz rozegrał już wszystkie gry w danej rozgrywce przekierowywany do /end
- /taskResult
- wyświetla wyniki ostatniej gry użytkownika
- pobiera dane poprzez zapytanie do Rest API serwera: GET /last/results, identyfikacja użytkownika na podstawie ciasteczka JSESSIONID
- /end
- wyświetla wynik użytkownika w rozgrywce
Rest API wykorzystywane przez strony View serwera:
- GET /last/results
- zwraca wynik ostatniej gry użytkownika autentykowanego na podstawie ciasteczka JSESSIONID
- GET /{groupId}/results
- zwraca aktualne wyniki graczy w rozgrywce o danym groupId
- gdy zapytanie z ciasteczkiem JSESSIONID innym niż wykorzystane przy tworzeniu rozgrywki, zwracany błąd
- GET /{groupId}/remove
- usuwa rozgrywkę z danym groupId
- gdy zapytanie z ciasteczkiem JSESSIONID innym niż wykorzystane przy tworzeniu rozgrywki, zwracany błąd
Braki w funkcjonalności serwera
- Niezrozumiałe błędy pokazywane są użytkownikowi
Nie ma użytkownika z ciasteczkiem = E10BE28E8F084118C5B7C02E7BF3A234 - Brak powrotu do poprzednio stworzonej gry.
- Brak walidacji na frontendzie, np. gdy nie wypełni się żadnej gry.
Braki w kodzie serwera
- Nieużywane klasy.
- Nieużywane parametry w metodach klas.
- Słaba separacja logiki: np.
Game.javajednocześnie przechowuje dane gry (getter + setter do wszystkich pól) i zawiera logikę. - Pomieszanie w klasie kontrolera
InfunController.classendpointów z REST Api z endpointami wykorzystywanymi przez MVC. - Logika w kontrolerze powinna być przeniesiona do klasy serwisowej.
- Dużo niepotrzebnego zakomentowanego kodu.
- Błędy są w całości wypisywane do logu.
- Bezpośrednie logowanie do konsoli przez
System.out.printlnzamiast z wykorzystaniem logera