~~NOCACHE~~
~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~
===== Zadania do samodzielnego wykonania =====
Zadania od prostych do zaawansowanych.
===== ZADANIA PROSTE =====
===== Zadanie 1.1: Aplikacja do zarządzania notatkami (proste) =====
**Opis:**
Utwórz prostą aplikację Spring Boot do zarządzania notatkami. Notatka zawiera tytuł, treść i datę utworzenia.
**Wymagania:**
- Utwórz model ''Note'' z polami: id, title (tytuł), content (treść), createdDate (data)
- Utwórz repozytorium w pamięci (HashMap)
- REST API:
* GET /api/notes - pobranie wszystkich notatek
* GET /api/notes/{id} - pobranie konkretnej notatki
* POST /api/notes - utworzenie nowej notatki
* DELETE /api/notes/{id} - usunięcie notatki
- Zwracaj odpowiednie kody HTTP (200, 201, 404, 204)
**Wskazówki:**
- Użyj ''java.time.LocalDateTime'' do przechowywania daty
- Notatka powinna być tworzona z bieżącą datą
- Testuj API przy użyciu Postman lub curl
**Przykład żądania POST:**
POST /api/notes
Content-Type: application/json
{
"title": "Moja pierwsza notatka",
"content": "To jest zawartość notatki"
}
===== Zadanie 1.2: Kalkulator REST API =====
**Opis:**
Utwórz REST API do wykonywania operacji matematycznych (dodawanie, odejmowanie, mnożenie, dzielenie).
**Wymagania:**
- Endpoints:
* GET /api/calc/add?a=5&b=3 - zwraca 8
* GET /api/calc/subtract?a=10&b=3 - zwraca 7
* GET /api/calc/multiply?a=4&b=5 - zwraca 20
* GET /api/calc/divide?a=20&b=4 - zwraca 5
- Obsługuj błędy (np. dzielenie przez zero)
- Zwracaj wynik jako JSON: ''{"result": 8, "operation": "add"}''
**Wskazówki:**
- Użyj ''@RequestParam'' do pobierania parametrów
- Sprawdzaj dzielenie przez zero i zwracaj błąd 400
- Utwórz serwis ''CalculatorService'' do obliczeń
===== Zadanie 1.3: API do konwersji jednostek =====
**Opis:**
Utwórz API do konwersji jednostek (temperatury, długości, masy).
**Wymagania:**
- Konwersje temperatury:
* GET /api/convert/temperature?celsius=25&target=fahrenheit
* Wzór: F = C * 9/5 + 32
- Konwersje długości:
* GET /api/convert/length?meters=100&target=kilometers
- Konwersje masy:
* GET /api/convert/weight?kilograms=50&target=pounds
**Wskazówki:**
- Zwracaj wynik z dokładnością do 2 miejsc po przecinku
- Obsługuj błędne jednostki
- Utwórz model ''ConversionResult'' z polami: value, unit, originalValue, originalUnit
===== Zadanie 1.4: Generator kodów promocyjnych =====
**Opis:**
Utwórz API generujące losowe kody promocyjne.
**Wymagania:**
- GET /api/promo/generate - generuje losowy kod (np. PROMO2024ABC)
- GET /api/promo/list - lista wszystkich wygenerowanych kodów
- POST /api/promo/validate - weryfikuje kod (sprawdza czy istnieje)
- Kody powinny być przechowywane w aplikacji
**Wskazówki:**
- Użyj ''UUID'' lub ''Random'' do generowania kodów
- Przechowuj kody w ''Set''
- Timestamp powienien być zapisywany z każdym kodem
===== ZADANIA ŚREDNIE =====
===== Zadanie 2.1: Aplikacja do zarządzania zadaniami (TODO) =====
**Opis:**
Utwórz aplikację do zarządzania listą zadań (TODO). Każde zadanie ma tytuł, opis, status (nowe, w toku, ukończone) i termin.
**Wymagania:**
- Model ''Task'' z polami: id, title, description, status, dueDate, createdDate
- REST API:
* GET /api/tasks - wszystkie zadania
* GET /api/tasks?status=pending - zadania o konkretnym statusie
* GET /api/tasks/{id} - konkretne zadanie
* POST /api/tasks - nowe zadanie
* PUT /api/tasks/{id} - aktualizacja zadania
* PATCH /api/tasks/{id}/status?status=completed - zmiana statusu
* DELETE /api/tasks/{id} - usunięcie
- Zwracaj zadania posortowane po dacie terminu
- Sprawdzaj termin - niech API zwraca info o zaległych zadaniach
**Wskazówki:**
- Użyj enum ''TaskStatus'' dla statusów
- Sortuj przy użyciu ''Comparator'' lub Stream API
- Zwracaj informacje o liczbie zadań w każdym statusie
**Przykład odpowiedzi:**
{
"tasks": [...],
"summary": {
"total": 10,
"pending": 3,
"inProgress": 2,
"completed": 5
}
}
===== Zadanie 2.2: Blog REST API z tagami =====
**Opis:**
Utwórz API bloga z artykułami, tagami i autorami. Artykuł może mieć wiele tagów, autora i komentarze.
**Wymagania:**
- Modele: ''Article'', ''Tag'', ''Author'', ''Comment''
- REST API:
* GET /api/articles - wszystkie artykuły
* GET /api/articles/tag/{tagName} - artykuły z konkretnym tagiem
* GET /api/articles/{id} - konkretny artykuł z komentarzami
* POST /api/articles - nowy artykuł
* POST /api/articles/{id}/comments - dodanie komentarza
* PUT /api/articles/{id} - aktualizacja
* DELETE /api/articles/{id} - usunięcie
- Filtrowanie po autorze: GET /api/articles/author/{authorId}
- Paginacja: GET /api/articles?page=0&size=10
**Wskazówki:**
- Użyj relacji many-to-many dla artykułów i tagów
- Przechowuj artyduły w bazie (H2 lub MySQL)
- Spring Data JPA obsługuje custom queries
===== Zadanie 2.3: API do raportowania błędów =====
**Opis:**
Utwórz system do raportowania i śledzenia błędów w aplikacji.
**Wymagania:**
- Model ''BugReport'' z polami: id, title, description, severity (LOW, MEDIUM, HIGH, CRITICAL), status (NEW, IN_PROGRESS, RESOLVED), reporter, assignee, createdDate
- REST API:
* GET /api/bugs - wszystkie błędy
* GET /api/bugs?severity=HIGH - błędy o konkretnym stopniu ważności
* GET /api/bugs?status=NEW - błędy o konkretnym statusie
* POST /api/bugs - zgłoszenie nowego błędu
* PUT /api/bugs/{id}/assign?assignee=john - przypisanie osobie
* PUT /api/bugs/{id}/status?status=RESOLVED - zmiana statusu
- Dashboard: GET /api/bugs/dashboard - statystyka błędów
- Zwracaj błędy posortowane po ważności i dacie
**Wskazówki:**
- Użyj enum ''BugSeverity'' i ''BugStatus''
- Implementuj obsługę błędów dla niepoprawnych wartości
- Zwracaj statystykę w formacie JSON
===== Zadanie 2.4: API do rezerwacji hotelu =====
**Opis:**
Utwórz API do zarządzania rezerwacjami pokojów w hotelu.
**Wymagania:**
- Modele: ''Room'', ''Reservation'', ''Guest''
- Pokój ma: id, number, type (single, double, suite), price, capacity
- Rezerwacja ma: id, room, guest, checkInDate, checkOutDate, status, totalPrice
- REST API:
* GET /api/rooms - wszystkie pokoje
* GET /api/rooms/available?checkIn=2026-06-01&checkOut=2026-06-05 - dostępne pokoje
* GET /api/reservations - wszystkie rezerwacje
* POST /api/reservations - nowa rezerwacja
* PUT /api/reservations/{id}/cancel - anulowanie rezerwacji
* DELETE /api/reservations/{id} - usunięcie
- Sprawdzaj konflikty rezerwacji
- Obliczaj cenę na podstawie liczby nocy
**Wskazówki:**
- Przechowuj rezerwacje w bazie
- Obsługuj walidację dat
- Sprawdzaj dostępność pokojów przed rezerwacją
===== ZADANIA ZAAWANSOWANE =====
===== Zadanie 3.1: System zarządzania sklepem internetowym =====
**Opis:**
Utwórz pełny system e-commerce z produktami, koszykiem, zamówieniami i fakturami.
**Wymagania:**
- Modele: ''Product'', ''Category'', ''Cart'', ''Order'', ''OrderItem'', ''Invoice'', ''Customer''
- REST API:
* GET /api/products - wszystkie produkty
* GET /api/products/category/{categoryId} - produkty w kategorii
* GET /api/products/search?query=notebook - wyszukiwanie
* POST /api/cart/items - dodanie do koszyka
* GET /api/cart - zawartość koszyka
* POST /api/orders - złożenie zamówienia
* GET /api/orders/{id} - szczegóły zamówienia
* GET /api/invoices/{orderId} - faktura
- Automatyczne generowanie numerów zamówień i faktur
- Obliczanie podatku VAT i sumy całkowitej
- Śledzenie statusu zamówienia (pending, paid, shipped, delivered)
**Wymagania techniczne:**
- Transakcje (baza danych)
- Walidacja danych
- Obsługa błędów
- Paginacja i filtrowanie
- Autentykacja użytkownika
**Wskazówki:**
- Użyj Spring Data JPA z relacjami one-to-many i many-to-many
- Implementuj logikę obliczania ceny koszyka
- Obsługuj różne metody płatności
- Zwracaj dane w formacie JSON
===== Zadanie 3.2: Platforma do dzielenia się opiniami i ocenami =====
**Opis:**
Utwórz platformę podobną do Google Reviews, gdzie użytkownicy mogą dodawać opinie i oceny dla restauracji, sklepów, itp.
**Wymagania:**
- Modele: ''Business'', ''Review'', ''User'', ''Rating''
- REST API:
* GET /api/businesses - lista wszystkich miejsc
* POST /api/businesses - dodanie nowego miejsca (admin)
* GET /api/businesses/{id}/reviews - opinie dla miejsca
* GET /api/businesses/{id} - szczegóły z średnią oceną
* POST /api/reviews - dodanie opinii
* PUT /api/reviews/{id} - edycja opinii
* DELETE /api/reviews/{id} - usunięcie opinii
* GET /api/businesses?search=pizza&rating=4+ - wyszukiwanie i filtrowanie
- Autentykacja i autoryzacja (użytkownik, moderator, admin)
- Automatyczne obliczanie średniej oceny
- Moderacja opinii (czy zawiera nieodpowiednie treści)
**Wymagania techniczne:**
- Spring Security z rolami
- Transakcje bazodanowe
- Walidacja opinii
- Paginacja
- Obsługa obrazów (URL do zdjęć)
**Wskazówki:**
- Implementuj votingowe na opinie (przydatne/nieprzydatne)
- Sortuj opinie po użyteczności
- Obsługuj oznaczanie spamu i nieodpowiednich opinii
===== Zadanie 3.3: System zarządzania projektami (Project Management) =====
**Opis:**
Utwórz system zarządzania projektami z zespołami, zadaniami, zasobami i raportowaniem czasu pracy.
**Wymagania:**
- Modele: ''Project'', ''Team'', ''User'', ''Task'', ''TimeEntry'', ''Resource''
- REST API:
* GET /api/projects - wszystkie projekty
* POST /api/projects - nowy projekt
* POST /api/projects/{id}/members - dodanie członka zespołu
* GET /api/projects/{id}/tasks - zadania w projekcie
* POST /api/tasks - nowe zadanie
* PUT /api/tasks/{id}/assign - przypisanie zadania
* POST /api/time-entries - raport czasu pracy
* GET /api/projects/{id}/report - raport projektu (budżet, czas, postęp)
- Śledzenie postępu projektu
- Zarządzanie zasobami i budżetem
- Raportowanie czasu pracy (timesheets)
- Komunikacja w zespole (komentarze do zadań)
**Wymagania techniczne:**
- Wielopoziomowe uprawnienia użytkowników
- Walidacja dat i okresów
- Obsługa załączników
- Powiadomienia użytkowników
- Eksport raportów (PDF, CSV)
**Wskazówki:**
- Implementuj role: manager, developer, viewer
- Użyj @Transactional dla operacji wymagających więcej niż jednego zapisu
- Obsługuj konflikty przypisań i czasów
- Zwracaj statystyki postępu
===== Zadanie 3.4: API inteligentnego systemu rekomendacji filmów =====
**Opis:**
Utwórz API do rekomendacji filmów na podstawie historii przeglądania, ocen i preferencji użytkownika.
**Wymagania:**
- Modele: ''Movie'', ''Genre'', ''User'', ''Rating'', ''WatchHistory'', ''Recommendation''
- REST API:
* GET /api/movies - wszystkie filmy
* GET /api/movies/search - wyszukiwanie zaawansowane
* GET /api/movies/{id} - szczegóły filmu
* POST /api/movies/{id}/rate - ocena filmu
* POST /api/watch-history - dodanie do historii
* GET /api/recommendations - spersonalizowane rekomendacje
* GET /api/recommendations/trending - trendy
* GET /api/movies/genre/{genreId} - filmy w gatunku
* GET /api/users/{userId}/profile - profil użytkownika
- Algorytm rekomendacji bazujący na:
* Podobnych użytkownikach (collaborative filtering)
* Gatunkach (content-based filtering)
* Historii przeglądania
- Sortowanie i filtrowanie
**Wymagania techniczne:**
- Baza danych z relacjami many-to-many
- Caching dla populacyjnych filmów
- Algorytm uczenia maszynowego (prosta implementacja)
- Paginacja
- Spring Security dla danych użytkownika
**Wskazówki:**
- Przechowuj oceny i historię w bazie
- Obliczaj średnią ocenę filmu
- Implementuj proste algorytmy: średnia oceny w gatunku, liczba wspólnych ocen
- Zwracaj pewność rekomendacji
===== Zadanie 3.5: API dla systemu edukacyjnego (LMS) =====
**Opis:**
Utwórz pełny Learning Management System z kursami, lekcjami, quizami i ocenianiem.
**Wymagania:**
- Modele: ''Course'', ''Lesson'', ''Quiz'', ''Question'', ''User'', ''Enrollment'', ''QuizAttempt'', ''Grade''
- REST API:
* GET /api/courses - lista kursów
* GET /api/courses/{id} - szczegóły kursu z lekcjami
* POST /api/courses - dodanie kursu (instruktor)
* GET /api/courses/{id}/enroll - zapis na kurs
* GET /api/courses/{id}/lessons - lekcje w kursie
* POST /api/lessons/{id}/complete - oznaczenie jako ukończone
* GET /api/quizzes/{id} - quiz z pytaniami
* POST /api/quizzes/{id}/submit - przesłanie odpowiedzi
* GET /api/grades - oceny użytkownika
* GET /api/courses/{id}/report - raport kursu (instruktor)
- Autorskie pytania wielokrotnego wyboru, otwarty tekst, prawda/fałsz
- Automatyczne ocenianie quizów
- Tracking postępu uczestnika
- Certyfikaty po ukończeniu kursu
**Wymagania techniczne:**
- Wielopoziomowe role (student, instructor, admin)
- Obsługa załączników (materiały, slajdy, wideo)
- Obliczanie średnich i procentów ukończenia
- Logowanie aktywności użytkownika
- Powiadomienia o nowych materiałach
**Wskazówki:**
- Implementuj walidację dla pytań i odpowiedzi
- Obsługuj terminy oddania zadań
- Zwracaj szczegółowy raport postępu
- Możliwość pobrania certyfikatu w PDF
===== Podsumowanie =====
Zadania obejmują:
* Operacje CRUD z REST API
* Walidację danych
* Obsługę błędów
* Integracją z bazą danych
* Spring Security
* Zaawansowane algorytmy i logikę biznesową
* Raportowanie i eksport danych
Każde zadanie można rozszerzyć o dodatkowe funkcjonalności.