~~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.