Przejdź do treści
Home Blog Projekty O mnie

Timetable

📅 Timetable

Timetable to aplikacja webowa rozwijana w ramach pracy magisterskiej „Wprowadzanie preferencji użytkowników w systemie do układania planu zajęć”. Łączy ona rejestr zasobów szkolnych, rozbudowany system preferencji oraz generator planów, który eliminuje konflikty i okienka zanim plan trafi do uczniów.

Ekran główny

✨ Funkcjonalność

  • Kompleksowe zarządzanie zasobami szkoły (nauczyciele, grupy, sale, przedmioty, lekcje, okresy nauczania) wraz z walidacją danych i kolorowaniem elementów.
  • Rejestracja użytkowników z możliwością zakładania nowych szkół, aktywacją kont nauczycieli i przypisywaniem ról.
  • Panel administracyjny z modułami do nadzoru kont, metryk JVM, stanu usług, konfiguracji, audytów, logów oraz interaktywnym Swaggerem dla REST API.
  • Przegląd planu lekcji dla klas, podgrup, nauczycieli, sal i przedmiotów z możliwością filtrowania, zmiany kolorystyki oraz widokami szczegółowymi.
  • Ręczne tworzenie pojedynczych zajęć lub serii na podstawie interaktywnych formularzy z podpowiedziami wynikającymi z preferencji i zajętości zasobów.

🧑‍💼 Role i uprawnienia

System rozróżnia cztery poziomy użytkowników: administrator systemu (ROLE_ADMIN) zarządzający wszystkimi szkołami, administratora szkoły (ROLE_SCHOOL_ADMIN) odpowiedzialnego za zasoby własnej placówki i generowanie harmonogramu, nauczyciela (ROLE_TEACHER) edytującego swoje dane i preferencje oraz użytkownika niezalogowanego, który może jedynie przeglądać plan zajęć. Ścieżka rejestracji pozwala założyć nową szkołę (z automatycznym nadaniem roli administratora) lub dołączyć do istniejącej jako nauczyciel wymagający aktywacji.

🏫 Zasoby szkoły

Każdy typ zasobu posiada dedykowane widoki list, formularze edycji oraz walidację. W systemie odwzorowano m.in. przedmioty wraz z kolorami i preferencjami czasowymi, nauczycieli z tytułami, preferowanymi salami i przedmiotami, wielopoziomową strukturę grup (szkoła → klasa → podgrupa), sale uwzględniające pojemność oraz przystosowanie, definicje lekcji z godzinami rozpoczęcia i zakończenia, okresy czasu z wykluczającymi interwałami, plany nauczania oraz listy programów nauczania będące wejściem dla generatora.

🧠 Preferencje

Trzon projektu stanowi system preferencji łączący nauczycieli, grupy, sale i przedmioty z osią czasu (dni tygodnia × lekcje). Każde powiązanie otrzymuje wartość z szerokiej skali punktowej (od -10 000 dla „niemożliwe” po +10 dla „najbardziej preferowane”), dzięki czemu aplikacja rozróżnia realne kompetencje dydaktyków, preferowane sale, wymagania klas specjalnych czy higienę pracy umysłowej. W czasie planowania punkty są sumowane, a kolory w formularzach wskazują użytkownikowi najlepsze dostępne kombinacje; zasoby zajęte w danym terminie automatycznie otrzymują wysoką karę, co spycha je na koniec listy.

🤖 Generator planu

Moduł generator w Kotlinie przygotowuje szkielety lekcji na podstawie planów nauczania i stopnia doprecyzowania preferencji. Algorytm działa iteracyjnie: (1) pobiera wszystkie zasoby, buduje graf zależności i wylicza punkty preferencji; (2) dobiera lekcje i dni tygodnia, pilnując zajętości grup i nauczycieli; (3) eliminuje okienka metodą bonusowych punktów oraz (4) stosuje strategie zamiany terminów, aby domknąć luki. Dedykowane klasy (TimetableGeneratorHandicapInWindowsAlgorithm, TimetableGeneratorSwapInWindowAlgorithm itd.) odpowiadają za poszczególne heurystyki, a raporty z procesu trafiają do warstwy prezentacji.

🛠️ Tworzenie ręczne

Tworząc pojedyncze zajęcia lub serie użytkownik wybiera salę, przedmiot, nauczyciela, grupę, okres czasu oraz parametry powtarzania. Każdemu polu towarzyszą wskaźniki preferencji (od zielonego po czerwony), dzięki czemu dyrektor natychmiast widzi, kto jest dostępny, które sale są przystosowane oraz czy koliduje to z innymi zajęciami. Takie same sygnały kolorystyczne wykorzystano przy korekcie wygenerowanego planu.

🖥️ Interfejs webowy

Frontend napisany w Angularze 4 oferuje elastyczne widoki planu (klasa, podgrupa, nauczyciel, sala, przedmiot), panel wyboru podgrup oraz szczegółową kartę lekcji z kompletem informacji (grupa, nauczyciel, sala, czas, dodatkowy opis). UI opiera się na Bootstrapie 4, stylach inspirowanych drewnem i efektem szkła, a komponenty takie jak ngx-color-picker ułatwiają personalizację zasobów kolorami.

🧱 Architektura

Projekt został zbudowany jako monolityczna aplikacja Spring Boot + Kotlin wygenerowana przy pomocy JHipstera. Warstwa backendu korzysta z podziału na domenę (domain), repozytoria JPA (repository), serwisy (service) oraz REST kontrollerów (web/rest). Moduł preferencji (preference) i generator (generator) operują na DTO przenoszonych do Angulara. Persystencję zapewniają Hibernate oraz Liquibase, a profile dev/prod automatyzują przełączanie między bazą H2 i PostgreSQL. Warstwa frontowa (src/main/webapp) budowana jest przez Webpacka i komunikuje się z API poprzez Angularowe serwisy korzystające z ng-jhipster.

🛠️ Stos technologiczny

  • Backend: Kotlin 1.2, Spring Boot, Spring Security, Hibernate, Liquibase, HikariCP, JCache.
  • Frontend: Angular 4, TypeScript, Bootstrap 4, ng-bootstrap, ng2-charts / Chart.js, ngx-color-picker.
  • Narzędzia: Gradle, Yarn/Webpack, Karma/Jasmine, Docker Compose (bazowe definicje w src/main/docker), Swagger UI, Dropwizard Metrics oraz logowanie Logstash.

🚀 Utrzymanie i wdrożenie

Administratorzy mają dostęp do metryk JVM, statusów usług, konfiguracji środowiska, audytów logowania i panelu logów bezpośrednio w aplikacji. Gdy to za mało, Swagger umożliwia wykonywanie zapytań REST „z palca”. Grailsowe profile produkcyjne umożliwiają budowanie pakietów WAR oraz obrazów Docker, a dostarczone kompozycje startują zależne usługi (np. PostgreSQL). Dzięki temu szkoła może wdrożyć system lokalnie lub w chmurze oraz stale monitorować jego kondycję.