Opis aplikacji - iiuni/projektzapisy GitHub Wiki

Aplikacje w Systemie Zapisów

Porządny projekt w Django powinien być złożony z wielu luźno połączonych aplikacji. Każda z tych aplikacji definiuje swoje własne modele, ścieżki oraz widoki. Aplikacje nie są całkowicie niezależne, a zależności między nimi odpowiadają z grubsza kluczom obcym w modelach.

zapisy/apps/users

Aplikacja zarządza podstawowymi typami użytkowników: Są tu zdefiniowani pracownicy i studenci (a także programy studiów oraz... zgoda na pokazywanie nazwiska). Sam model użytkownika — razem z weryfikacją haseł, logowaniem i pamiętaniem sesji — jest wbudowany w Django (django.contrib.auth), ale nasza aplikacja users rozszerza go.

Widoki

  • Lista studentów/pracowników.
  • Moje konto.
  • Różne formularze (zmiana hasła, e-mail).

zapisy/apps/common

Miejsce, gdzie trzymamy rzeczy, które są naprawdę uniwersalne (np. edytor Markdown). Bardzo staramy się go nie zaśmiecić (więcej tutaj).

zapisy/apps/enrollment/courses

Tu są zdefiniowane wszystkie modele związane z zajęciami: Semestry, Instancje przedmiotów, Grupy zajęciowe, Efekty i Tagi, Sale i Terminy zajęć.

Widoki

  • Lista przedmiotów z wyborem semestru i filtrem.
  • Strona przedmiotu.
  • Strona grupy.

zapisy/apps/enrollment/records

Tutaj żyje logika zapisywania się. W tej aplikacji jest zdefiniowany model Record — czyli zapis łączący studenta z grupą. Aplikacja ta jest też odpowiedzialna za liczenie czasów otwarcia zapisów. Nie ma żadnych widoków generujących strony.

zapisy/apps/enrollment/timetable

Aplikacja odpowiedzialna za wyświetlanie planu zajęć i prototypu. Zdefiniowane są w niej przypięcia. Gros aplikacji to JS z planem, prototypem i filtrami przedmiotów.

zapisy/apps/offer/proposal

Tutaj jest zdefiniowana propozycja przedmiotu. Dość spory i skomplikowany jest formularz tworzenia nowej/edycji istniejącej propozycji, ponieważ propozycja musi zawierać dość szczegółowy syllabus. Każda instancja przedmiotu z aplikacji courses musi odpowiadać jakiejś propozycji przedmiotu.

zapisy/apps/offer/vote

Głosowanie na zajęcia. Tutaj jest zdefiniowany Rok akademicki (to jest jedyne miejsce, gdzie podział na semestry nie jest wystarczający, gdyż ofertę dydaktyczną tworzy się na cały rok).

Widoki

  • Ekran powitalny (zasady).
  • Formularz głosowania.
  • Podsumowanie głosowania, pokaż mój głos.

zapisy/apps/offer/desiderata

Tutaj pracownicy zaznaczają, w jakich dniach i godzinach są gotowi prowadzić zajęcia.

zapisy/apps/offer/preferences

Dyrektor ds. dydaktycznych wybiera przedmioty, do których potrzebuje kadry, pracownicy zaznaczają, zajęcia do jakich przedmiotów byliby gotowi prowadzić.

zapisy/apps/offer/assignments

Dość skomplikowane narzędzie mające pomóc dyrektorowi ds. dydaktycznych w przydzielaniu zajęć na następny rok. Doświadczenie pokazuje, że do takiego zadania przydatna jest elastyczność arkusza kalkulacyjnego, dlatego ta aplikacja eksportuje pewne dane z Systemu Zapisów do arkuszy kalkulacyjnych, a następnie importuje podjęte w arkuszu decyzje. Aplikacja generuje plik z gotowymi przydziałami dla Schedulera oraz wyświetla je pracownikom.

zapisy/apps/grade/polls

Część „ankietowa” oceny zajęć. Ciekawa w tej aplikacji jest dowolność pytań, jakie można zadawać studentom: Pytania te definiuje się w formacie json w modelu Schema. Submission wypełnia te pytania odpowiedziami.

Widoki

  • Ekran powitalny z opisem protokołu ślepych podpisów.
  • Formularz wklejania kluczy.
  • Formularz wypełniania ankiet — jest tu ciekawa logika związana z pamiętaniem w sesji przeglądarki kluczy, żeby móc wyświetlać różne ankiety bez zbędnego Javascriptu.

zapisy/apps/grade/ticket_create

Część kryptograficzna oceny zajęć. Tutaj jest zaimplementowany protokół ślepych podpisów zarówno od strony serwera, jak i ze strony klienta (dwukrotnie: raz w Pythonie i raz w JS-ie).

zapisy/apps/news

Aplikacja obsługująca aktualności na stronie. Trochę syfiasty kod, ale ma proste zadania.

zapisy/apps/notifications

Powiadomienia — zarówno te pod dzwoneczkiem, jak i wysyłane mailem. Powiadomienia każdego użytkownika są zapisane w bazie Redis. Maile są wysyłane asynchronicznie.

zapisy/apps/schedule

Wydarzenia, rezerwacje, ogólnie cała zakładka „Sale”. Jest tu za dużo modeli i widoków.

zapisy/apps/schedulersync

Aplikacja odpowiedzialna za importowanie planu zajęć z systemu, który go układa — Schedulera. Aplikacja ma dwa modele pamiętające, jak mapować zajęcia i prowadzących, których nie może rozpoznać automatycznie w Systemie Zapisów. Jej trzonem jest skrypt import_schedule.

zapisy/apps/statistics

Widoki tylko-dla-adminów (głównie z myślą o dyr. ds. dydaktycznych). Pewne zagregowane dane o czasach otwarć, popularności zajęć. Pomagają reagować w gorącym czasie zapisów.

zapisy/apps/theses

System do zarządzania pracami dyplomowymi. Pozwala pracownikom zgłaszać nowe prace dyplomowe. Specjalna komisja nad nimi głosuje (trzy głosy za=akceptacja). Do prac są przypisani studenci.