Skip to content

tomekos11/english_language_app_back

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. OPIS PROJEKTU

English Learning App to aplikacja internetowa, stworzona przy użyciu frameworka Laravel, zaprojektowana, aby pomóc użytkownikom w doskonaleniu znajomości języka angielskiego. Projekt jest nieustannie rozwijany i planowo w niedalekiej przyszłości pojawić się mają nowe funkcjonalności - ranking tygodniowy, money management, system nowych gier, admin-page oraz połączenie ze sztuczną inteligencją.

Projekt składa się z kilku części takich jak testy, powtórki, osiągnięcia, gry czasowe, quizy itp. Podczas pracy nad projektem zrozumiałem piękno i możliwości backendu i zdecydowałem, że warto się go trzymać.


2. MÓJ WKŁAD

Jestem odpowiedzialny za rozwój backendu, w tym kluczowe zadania, takie jak między innymi Migrations, Models, API, Seeders, Listeners, Scheduler oraz połączenie ze storage'm.
Sytuacja zmusiła mnie również do praktykowania frontendu, dzięki czemu zagłębiłem się w VueJS i poznałem również ten framework - Słownik oraz Dashboard pośród wielu innych wyszły spod mojej ręki.


3. JAK ZAINSTALOWAĆ PROJEKT

Do poprawnego działania aplikacji wymagane są:
  • PHP w wersji ^8.0
  • Composer
  • Baza danych np. MySQL, PostgreSQL, SQLite

Po pobraniu projektu, musimy dostosować lokalny plik .env, w którym przetrzymywana jest konfiguracja naszego serwera, w tym informacje o bazie danych, z jakiej korzystamy.
Po zainstalowaniu wszystkich koniecznych do działania komponentów, oraz poprawnym skonfigurowaniu pliku .env, możemy przejść testowania funkcjonalności.

Zaczynamy od użycia komend:

  • php artisan migrate - komenda używana jest w celu stworzenia bazy danych.
  • php artisan db:seed - komenda używana jest w celu wstrzyknięcia do bazy danych, rekordów wymaganych do popranego działania serwera - słowa, kategorie itp.
  • php artisan passport:install - komenda używana jest w celu służy instalacji i konfiguracji infrastruktury uwierzytelniania OAuth2


4. TESTOWANIE

W celu uproszczenia nawigacji, projekt podzielony został na 3 moduły takie jak - Auth, Words oraz System.

Moduł Auth

W module Auth przetrzymywane są wszystkie pliki odnoszące się do użytkowników oraz ich danych osobowych.

Moduł Word

Następny moduł to Word, przetrzymuje on pliki związane ze słowami - kategorie, testy, ćwieczenia, a także rodzaje ćwiczen.

Moduł System

Ostatnim z modułów jest System, w którym dostępne są logi, statystyki użytkowników, informacje o aktualiazjach na serwerze, rezultaty gier czasowych, osiągnięcia.

4.1 API

Wyświetl zapytania dla modułu Word
Rodzaj Adres Wymagane pola Wymagane ranga Opis
GET api/word/dict - user Zapytanie służy do pobierania listy kategorii oraz ilości słów dla każdej z nich
POST api/word/dict category user Zapytanie służy do pobrania listy słów dla danej kategorii
GET api/word/word/{nr} - user Zapytanie służy do pobrania informacji o konkretnym słowie. Dostajemy się do niego poprzez podanie w miejscu {nr} indeksu słowa z bazy danych
POST api/word/word category_id, word_en, word_pl, difficulty admin Zapytanie służy do dodania nowego słowa do bazy danych
PATCH api/word/word/{nr} word_en, word_pl, difficulty admin Zapytanie służy do zaktualizowania istniejącego już słowa w bazie danych.
{nr} - indeks słowa w bazie danych
DELETE api/word/word/{nr} - admin Zapytanie służy do usuwania istniejącego już słowa w bazie danych.
{nr} - indeks słowa w bazie danych
GET api/word/word/wordoftheday - user Zapytanie służy do zwracania wszystkich informacji dotyczących słowa dnia
GET api/word/repetitions/favourite - user Zapytanie służy do zwracania wszystkich ulubionych słów użytkownika wraz z ich szczegółami
POST api/word/word/{nr}/addtofavourite - user Zapytanie służy do dodania słówka przez użytkownika do ulubionych.
{nr} - indeks słowa
POST api/word/word/{nr}/revokefromfavourite - user Zapytanie służy do usuwania słówka przez użytkownika z jego ulubionych słów.
{nr} - indeks słowa
POST api/word/word/{nr}/addnote notes user Zapytanie służy do przypisywania notatek użytkownika do słówka.
{nr} - indeks słowa
GET api/word/repetitions/review - user Zapytanie służy do zwracania wszystkich słów, które użytkownik chce powtarzać (powtórek)
POST api/word/word/{nr}/addtoreview - user Zapytanie służy do dodania słówka przez użytkownika do powtórek.
{nr} - indeks słowa
POST api/word/word/{nr}/revokefromreview - user Zapytanie służy do usuwania słówka przez użytkownika z jego powtórek.
{nr} - indeks słowa
POST api/word/repetitions/review id user Zapytanie służy do zmiany statusu powtórki na wykonaną
GET api/word/repetitions/category category user Zapytanie zwraca listę powtórek dla konkretnie wskazanej kategorii
POST api/word/repetitions/refresh category user Zapytanie zmienia status wykonania powtórki, ładując użytkownikowi do ponownego rozwiązania
GET api/word/repetitions/categories_list - user Zapytanie zwraca ilość niezrobionych oraz ilość wszystkich dodanych do tej pory powtórek dla każdej z kategorii
GET api/word/category - user Zapytanie zwraca wszystkie kategorie oraz informacje o nich
GET api/word/category/{nr} - user Zapytanie zwraca konkretną kategorię oraz informacje o niej
POST api/word/category name admin Zapytanie tworzy nową kategorię
PATCH api/word/category/{nr} name admin Zapytanie aktualizuje wskazana kategorię
{nr} - to id kategorii
DELETE api/word/category/{nr} - admin Zapytanie usuwa wskazana kategorię
{nr} - to id kategorii
GET api/word/test - user Zapytanie pobiera wszystkie testy użytkownika - ich statusy, date wykonania, kategorię oraz trudność
GET api/word/test/{nr_testu} - user Zapytanie pobiera wszystkie zadania dla testu wskazanego przez użytkownika
{nr_testu} - to numer testu z bazy danych [1-63]
GET api/word/test/{nr_testu}/{nr_zadania} - user Zapytanie pobiera wszystkie szczegóły dla konkretnego zadania, w wybranym przez użytkownika teście
{nr_testu} - to numer testu z bazy danych [1-63]
{nr_zadania} - numer zadania z bazy danych [1-11]
POST api/word/test/{nr_testu}/{nr_zadania} answer_fill_sentence user Zapytanie wysyła odpowiedź na zadanie typu "uzupełnij lukę"
{nr_testu} - to numer testu z bazy danych [1-63]
{nr_zadania} - numer zadania z bazy danych [1-11]
POST api/word/test/{nr_testu}/{nr_zadania} pairs user Zapytanie wysyła odpowiedź na zadanie typu "połącz pary"
{nr_testu} - to numer testu z bazy danych [1-63]
{nr_zadania} - numer zadania z bazy danych [1-11]
POST api/word/test/{nr_testu}/{nr_zadania} answer user Zapytanie wysyła odpowiedź na zadanie typu "ułóż układankę"
{nr_testu} - to numer testu z bazy danych [1-63]
{nr_zadania} - numer zadania z bazy danych [1-11]
Auth
Rodzaj Adres Wymagane pola Wymagane ranga Opis
POST api/auth/login email, password - Zapytanie służy do zalogowania użytkownika
POST api/auth/register email, password, dane użytkownika - Zapytanie służy do rejestracji nowego użytkownika
GET api/auth/logout - user Zapytanie służy do wylogowania użytkownika
GET api/auth/user/data/dashboard - user Zapytanie służy do zwracania wszystkich informacji wyświetlanych w dashboardzie
GET api/auth/user/data/me - user Zapytanie służy do zwracania informacji o użytkowniku
PATCH api/auth/user/data/change_data name, surname, birth_date user Zapytanie służy do zmiany danych użytkownika
POST api/auth/user/data/change_avatar avatar user Zapytanie służy do zmiany avataru użytkownika
GET api/auth/user/role/me - admin Zapytanie służy do otrzymania informacji o roli jaką posiada użytkownik
GET api/auth/user/role/{user} - admin Zapytanie służy do sprawdzenia roli innego użytkownika [user] - id użytkownika
POST api/auth/user/role/{user} role admin Zapytanie służy do zmiany roli innego użytkownika [user] - id użytkownika
GET api/auth/ranking/money - user Zapytanie służy do zwrócenia rankingu użytkowników względem posiadanych monet
GET api/auth/ranking/lvl - user Zapytanie służy do zwrócenia rankingu użytkowników względem posiadanego poziomu
GET api/auth/ranking/15s - user Zapytanie służy do zwrócenia rankingu użytkowników względem zdobytych punktów w grze 15s
GET api/auth/ranking/30s - user Zapytanie służy do zwrócenia rankingu użytkowników względem zdobytych punktów w grze 30s
GET api/auth/ranking/60s - user Zapytanie służy do zwrócenia rankingu użytkowników względem zdobytych punktów w grze 60s
GET api/auth/ranking/all - user Zapytanie służy do zwrócenia rankingu użytkowników posiadającego wszystkie powyższe
System
Rodzaj Adres Wymagane pola Wymagane ranga Opis
GET api/system/statistics - user Zapytanie służy do zwrócenia podstawowych statystyk użytkownika dotyczących jego osiągnięć
GET api/system/achievement/me - user Zapytanie służy do zwrócenia osiągnięć, które użytkownik zdobył
GET api/system/achievement/ - user Zapytanie służy do zwrócenia wszystkich dostępnych osiągnięć
GET api/system/achievement/{achievement} - user Zapytanie służy do zwrócenia wybranego osiągnięcia [achievement] - id achievementu
POST api/system/achievement/ name, event_type, value, money admin Zapytanie służy do utworzenia nowego osiągnięcia
PATCH api/system/achievement/{achievement} name, event_type, value, money admin Zapytanie służy do aktualizacji jednego z osiągnięć [achievement] - id achievementu
DELETE api/system/achievement/{achievement} - admin Zapytanie służy do usunięcia jednego z osiągnięć [achievement] - id achievementu
GET api/system/daily_user_life/ - user Zapytanie służy do zwracania informacji o życiach użytkownika
PATCH api/system/daily_user_life/minus - user Zapytanie służy do odjęcia życia użytkownikowi po pomyłce w teście
PATCH api/system/daily_user_life/plus word_pl, word_en, langauge user Zapytanie służy do dodania serca wzamian za poprawne rozwiązanie zagadki
GET api/system/streak/ - user Zapytanie służy do zwracania informacji o wszystkich streakach użytkownika
GET api/system/streak/latest - user Zapytanie służy do zwracania informacji o aktualnym streaku użytkownika
GET api/system/streak/longest - user Zapytanie służy do zwracania informacji o najdłuższym streaku użytkownika
POST api/system/games/ type user Zapytanie służy do rozpoczęcia gry czasowej o wybranym typie
POST api/system/games/send type, word user Zapytanie służy do wysłania odpowiedzi na kolejne zadanie w grze czasowej
POST api/system/games/history type user Zapytanie służy do zwrócenia historii gier użytkownika dla danego typu




4.2 Scheduler

W projekcie zaimpementowaliśmy rozwiązanie nazywane Scheduler - czyli operacje cron. Jest to nic innego, jak specjalnie spreparowane funkcje, który wykonują się co określony czas, w określone dni, lub o określonej godzinie.
Na serwerze wyróżniamy aktualnie dwa takie zdarzenia czasowe, jednak z czasem może ich przybyć więcej.
  • Darmowe serduszko - Co 2 godziny każdy z użytkowników, których liczba żyć nie przekracza 10, otrzymuje serduszko. Licznik czasu, odmierzający minuty do wykonania zdarzenia, umieszczony jest na dashboardzie, zatem każdy może sprawdzić, za ile może wykonać kolejną pomyłkę.
  • Zmiana słówka dnia - Codziennie o północy zmienia się słówko dnia i na dashboardzie ukazuje się nowo wybrany kafelek, dostępny przez następne, równe 24godziny.

Aby przetestować scheduler możemy zastosować niżej wymienione komendy:

  • php artisan schedule:list - pokazuje listę wszystkich zadań oraz czas, za jaki planowane jest ich użycie.
  • php artisan schedule:test - pozwala przetestować wybrane przez nas zadanie. Wybieramy [0], aby wybrać nowe słowo dnia, lub [1] aby doładować każdemu z użytkowników 1 serduszko.
  • php artisan schedule:work - uruchomienie tej komendy powoduje wykonywanie zadań w określonym przez nas czasie.

Przy testowaniu wyboru nowego słowa dnia, możemy napotkać się z problemem, że nie zostało ono zmienione. Należy wówczas zwolnić pamięć Cache naszego serwera, robimy to przy użyciu komendy:

  • php artisan Cache:clear

Pod okoliczność zmiany słowa dnia, stworzona zpstała autorska komenda, za pomocą której możemy ręcznie zmienić słowo dnia z ominięciem schedulera:

  • php artisan pick

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published