- Zajęcia mają przypisane: dzien w tygodniu, godzinę rozpoczęcia, czas trwania, trenera prowadzącego. Np.: we wtorki o 17:00 odbywają się zajęcia z podnoszenia ciężarów prowadzone przez Tomka.
- Na podstawie grafiku dostępne są konkretne terminy zajęć, np.: podnoszenie ciężarów we wtorek 17 stycznia o 17:00.
- Administrator może odwołać konkretny termin zajęć (np. z powodu święta)
- Trener może prowadzić maksymalnie N niepokrywających się zajęć w tygodniu
- Terener może prowadzić maksymalnie M zajęć w ciągu dnia
- Terener może prowadzić zajęcia dla maksymalnie N osób (zależne np. od kwalifikacji, stażu itp)
- Można zapisać się na nie więcej niż 5 zajęć (w konretnym terminie) do przodu. Np.: zapisuję się na podnoszenie ciężarów w każdy dzień danego tygodnia na godzinę 19:00.
- Na dane zajęcia zapisać się może nie więcej niż N osób (gdzie N jest specyficzne dla prowadzącego dane zajęcia)
- Gdy w momencie zapisu nie ma wolnych miejsc, członek klubu jest wpisywany na listę rezerwową
- Maksymalnie 6 osób może być na liście rezerwowej dla danego terminu zajęć.
- Można zapisać się tylko na jedne zajęcia danego typu w ciągu jednego dnia
- Rezerwację można odwołać najpóźniej 1 godzinę przed terminem zajęć
- Uczestnictwo w zajęciach potwierdzane jest przez zeskanowanie karty w klubie
- Po trzeciej niepotwierdzonej rezerwacji (tzn. w przypadku gdy osoba zapisała się na zajęcia ale nie zeskanowała karty) następuje ban na zapisy na 4 dni.
- Gdy ktoś odwoła rezerwację, to pierwsza osoba z listy rezerwowej dostaje się na listę uczestników danych zajęć. Wysyłany jest do niej SMS z powiadomieniem
- Kalendarz z wpisanymi zajęciami które można kliknąć i: a) członek klubu może się na nie zapisać, b) administrator może odwołać zajęcia c) administrator może przypisać trenera. Przy każdych zajęciach jest informacja o wolnych miejscach.
- Lista zajęć na które zapisany jest zalogowany członek klubu + przyciski do anulowania zapisu
- Widok administratora: grafik zajęć + formularz do dodania nowych pozycji
- Widok trenera: lista osób zapisanych na dane zajęcia
- CRUD
- Logika w encjach JPA (bez agregatów)
- Agregaty z adnotacjami JPA (+ domain services)
- Wyeliminowanie domain services
- Osobne tabele na pola do odczytu (interfejs "listenera" w domenie)
- Agregaty bez adnotacji JPA + repozytorium mapujące je na/z klasy JPA przy zapisie/odczycie (osobny model do rejestracji?)
- Rejestrowanie eventów domenowych (jako dodatek do dotychczasowego repozytorium)
- Event sourcing