Rezerwacje obiektów — zadania
Wasze zadanie
Budujecie własną aplikację fikcyjnego ośrodka „Sosna”. Nie korzystacie z baz ani kodu innych kursów. Wymagana jest podstawowa znajomość Pythona; środowisko i stan startowy udostępnia prowadzący.
- P1: plac treningowy, dostępny; P2: sala symulatorów, niedostępna z powodu przeglądu.
- Jednostki: A — Alfa, B — Bravo. Konta Alfa i Bravo są przypisane do swoich jednostek; planista obsługuje wszystkie jednostki.
- T oznacza jutrzejszą datę ustaloną na zajęciach. Wszystkie czasy mają jawną, wspólną strefę.
- Rezerwacja kontrolna R1: P1, jednostka A, T 08:00–10:00.
- Rezerwacja wymaga istniejącego, dostępnego obiektu i istniejącej jednostki. Początek poprzedza koniec i nie może być w przeszłości.
- Przedziały są półotwarte: zawierają początek, nie zawierają końca. Dwie rezerwacje tego samego obiektu nie mogą nachodzić na siebie.
- Użytkownik zarządza tylko rezerwacjami swojej jednostki. Nie może sam nadać sobie roli planisty ani przypisać jednostki.
Przed każdą próbą modyfikacji lub usunięcia odtwórzcie dane kontrolne. Zapisujcie żądanie, odpowiedź i stan danych po próbie. Nie publikujcie haseł ani tokenów.
Jak pracujemy
Każda para oddaje rozwiązanie, opis próby i krótkie uzasadnienie. Każda osoba powinna umieć wyjaśnić wynik. Dane i zadania są niezależne od pozostałych przedmiotów.
Wykład 1 — Co się dzieje po kliknięciu „Rezerwuj”?
- Rozrysuj drogę od kliknięcia „Rezerwuj” do zapisu i odpowiedzi. Nazwij odpowiedzialność przeglądarki, API i bazy.
- Zaproponuj żądania odczytu i utworzenia rezerwacji. Co możesz stwierdzić, gdy odpowiedź po zapisie nie dotarła?
Wykład 2 — Kto może zmienić rezerwację?
- Ułóż tabelę uprawnień użytkownika jednostki i planisty dla odczytu, tworzenia i usuwania rezerwacji.
- Zaproponuj odpowiedzi API dla błędnego przedziału, konfliktu, braku tokenu i próby zmiany cudzej rezerwacji. Uzasadnij, gdzie należy sprawdzać uprawnienia.
Blok 1 — Czy serwer odpowiada?
- Uruchom przygotowany serwer i odczytaj endpoint kontrolny. Zapisz metodę, status i treść odpowiedzi.
- Porównaj żądanie pod błędny adres endpointu z próbą połączenia z wyłączonym serwerem.
Blok 2 — Jedna lista, dwóch odbiorców
- Udostępnij katalog P1 i P2 jako JSON oraz odczyt pojedynczego obiektu.
- Sprawdź nieistniejący identyfikator i zmianę kolejności listy. Czy klient nadal wskazuje ten sam obiekt?
Blok 3 — Dane przetrwały uruchomienie od nowa
- Przenieś katalog obiektów i jednostek do SQLite. Dodaj rekord i uruchom proces ponownie.
- Wskaż używany plik bazy. Sprawdź wpływ zmiany katalogu roboczego na jego lokalizację.
Blok 4 — Pierwsze kolidujące terminy
- Przy istniejącej R1 spróbuj utworzyć rezerwację P1 10:00–11:00 i zapisz rezultat.
- Odtwórz dane, sprawdź P1 09:00–11:00 oraz rezerwację P2. Rozróżnij przyczyny przyjęcia lub odmowy.
Blok 5 — Poprawny JSON, niepoprawne znaczenie
- Dodaj walidację przedziału i przygotuj próby dla początku wcześniejszego, równego i późniejszego niż koniec.
- Sprawdź datę w przeszłości i zapis czasu w innej strefie. Zweryfikuj stan bazy po odmowie.
Blok 6 — Konto bez samodzielnego awansu
- Dodaj rejestrację z hashowaniem hasła i logowanie. Sprawdź poprawne oraz błędne hasło.
- Wyślij deklarację roli planisty przy rejestracji. Sprawdź faktyczne uprawnienia utworzonego konta.
Blok 7 — Cudza rezerwacja
- Jako Alfa wykonaj operację na swojej rezerwacji, a następnie na rezerwacji Bravo. Zachowaj dowody odpowiedzi i stanu danych.
- Powtórz próbę jako planista, bez tokenu i jako konto bez przypisanej jednostki. Wyjaśnij różnice.
Blok 8 — Dwa stanowiska w tej samej chwili
- Przygotuj dwa równoczesne żądania rezerwacji tego samego wolnego terminu w bazie testowej.
- Sprawdź liczbę zapisanych rezerwacji i obie odpowiedzi. Opisz zachowanie aplikacji, kiedy baza jest zajęta.
Kolejne karty będą udostępniane wraz z następnymi zajęciami.