# Karta ćwiczenia laboratoryjnego

[![Java](https://img.shields.io/badge/Java-ED8B00?style=for-the-badge&logo=openjdk&logoColor=white)](https://www.java.com/)
[![Spring Boot](https://img.shields.io/badge/Spring_Boot-6DB33F?style=for-the-badge&logo=springboot&logoColor=white)](https://spring.io/projects/spring-boot)
[![Spring Data JPA](https://img.shields.io/badge/Spring_Data_JPA-6DB33F?style=for-the-badge&logo=spring&logoColor=white)](https://spring.io/projects/spring-data-jpa)
[![H2 Database](https://img.shields.io/badge/H2_Database-1A237E?style=for-the-badge&logo=databricks&logoColor=white)](https://www.h2database.com/html/main.html)
[![Thymeleaf](https://img.shields.io/badge/Thymeleaf-005F0F?style=for-the-badge&logo=thymeleaf&logoColor=white)](https://www.thymeleaf.org/)
[![Maven](https://img.shields.io/badge/Maven-C71A36?style=for-the-badge&logo=apachemaven&logoColor=white)](https://maven.apache.org/guides/index.html)


## 📋 Informacje podstawowe

| Pole | Wartość |
| --- | --- |
| Przedmiot | Spring |
| Forma zajęć | laboratorium |
| Ćwiczenie | Lab. 5 / Spring Test + Mockito |
| Data | 23.05.2026 |
| Nazwisko i imię studenta | ...................................................... |
| Rok/semestr | Rok 3, semestr 6 [studia niestacjonarne] |
| Ocena | ocena cząstkowa |
| Uwagi do ćwiczenia | **brak** |

## 📝 Opis zadania laboratoryjnego
Napisz kontroler REST w Spring Boot obsługujący kolekcję 3 rekordów z polami: `id`, `imie`, `nazwisko`, `miasto`. Głównym zadaniem jest przygotowanie testów kontrolera przy użyciu Spring Boot Test i Mockito.

## 📦 Wymagania

Kod programu należy umieścić w polu **Kod programu** tego pliku.
Plik `.md` należy dodać do projektu.

Całość należy spakować do formatu `.zip`:

`WSZIB_R3IN_NazwiskoImie_Spring_Lab5.zip`

W miejscu `NazwiskoImie` należy wpisać swoje nazwisko i imię (uwaga na kolejność).
Wynik pracy w formie archiwum `zip` powinien zawierać:
 - folder `Program` z projektem Spring Boot
 - uzupełniony ten plik tj. `.md`.

Archiwum `WSZIB_R3IN_NazwiskoImie_Spring_Lab5.zip` należy uzupełnić o swoje dane w nazwie i przesłać poprzez:

[![Upload](https://img.shields.io/badge/Upload-upload.pelo.com.pl-blue?style=for-the-badge&logo=upload&logoColor=white)](https://upload.pelo.com.pl)

## 🎯 Ogólny opis zadania

Celem zadania jest przygotowanie prostego kontrolera Spring Boot oraz napisanie testów dla jego metod przy użyciu Spring Boot Test i Mockito.

Aplikacja powinna obsługiwać kolekcję rekordów z polami: `id`, `imie`, `nazwisko`, `miasto`.

Kontroler musi udostępnić:
- GET zwracający wszystkie rekordy,
- GET wyszukujący rekord po `nazwisko`, `imie` lub `miasto`,
- POST dodający nowy rekord,
- DELETE usuwający rekord.

Głównym celem zadania jest napisanie testów dla kontrolera. Możesz przechowywać dane w pamięci (lista) i zainicjalizować co najmniej 3 przykładowe rekordy w kodzie Java.

## ✅ Wymagania funkcjonalne

| Kod wymagania | Wymaganie | Poziom |
| --- | --- | --- |
| WF-01 | Aplikacja udostępnia endpoint GET zwracający wszystkie rekordy. | wysoki |
| WF-02 | Aplikacja udostępnia endpoint GET pozwalający wyszukać rekord po `nazwisko`, `imie` lub `miasto`. | wysoki |
| WF-03 | Aplikacja udostępnia endpoint POST dodający nowy rekord do kolekcji. | wysoki |
| WF-04 | Aplikacja udostępnia endpoint DELETE usuwający rekord z kolekcji. | wysoki |
| WF-05 | Aplikacja inicjalizuje co najmniej 3 przykładowe rekordy w kodzie Java. | wysoki |
| WF-06 | Napisz testy Spring Boot Test + Mockito dla co najmniej jednego GET oraz jednego POST/DELETE. | wysoki |

## 🔧 Wymagania niefunkcjonalne

| Kod wymagania | Wymaganie | Poziom |
| --- | --- | --- |
| WNF-01 | Aplikacja powinna wykorzystywać Spring Boot z zależnościami `spring-boot-starter-web` i `spring-boot-starter-test`. | wysoki |
| WNF-02 | Kod i testy powinny być czytelne, poprawnie sformatowane oraz podzielone na osobne klasy/pliki (model, serwis, kontroler, test). | średni |
| WNF-03 | Struktura projektu powinna być zgodna z konwencją Spring Boot (Maven lub Gradle). | średni |
| WNF-04 | Archiwum `.zip` powinno zawierać folder `Program` z projektem oraz uzupełniony ten plik `.md`. | wysoki |

## 🧩 Diagram klas

```mermaid
classDiagram
    class Rekord {
        -Long id
        -String imie
        -String nazwisko
        -String miasto
    }
    class RekordService {
        +getWszystkie() List~Rekord~
        +szukaj(String imie, String nazwisko, String miasto) Rekord
        +dodaj(Rekord rekord) Rekord
        +usun(Long id) void
    }
    class RekordController {
        +getWszystkie() List~Rekord~
        +getRekord(String imie, String nazwisko, String miasto) Rekord
        +dodajRekord(Rekord rekord) Rekord
        +usunRekord(Long id) void
    }
    class RekordControllerTest {
        +testGetWszystkie()
        +testGetRekord()
        +testDodajRekord()
        +testUsunRekord()
    }

    RekordService --> RekordController : @Autowired
```

**Legenda diagramu:**

| Symbol | Opis |
| --- | --- |
| `──>` (linia ciągła) | Zależność przez wstrzykiwanie `@Autowired` |


## <span style="color:red">💻 KOD PROGRAMU - REALIZACJA</span>

### JAVA (Application.java)
```java
// Wklej tutaj kod Java
```

### JAVA (Rekord.java)
```java
// Wklej tutaj kod Java
```

### JAVA (RekordService.java)
```java
// Wklej tutaj kod Java
```

### JAVA (RekordController.java)
```java
// Wklej tutaj kod Java
```

### JAVA (RekordControllerTest.java)
```java
// Wklej tutaj kod Java
```

## 🏆 Ocena [wypełnia prowadzący]

### Ocena kodu

| Kryterium | Opis | Punkty (max) | Punkty uzyskane |
| --- | --- | --- | --- |
| K-01 | Poprawna struktura projektu Spring Boot i podział na klasy. | 2 | |
| K-02 | Endpointy GET, POST i DELETE działają poprawnie. | 2 | |
| K-03 | Testy kontrolera napisane przy użyciu Spring Boot Test i Mockito. | 3 | |
| K-04 | Kod i testy są czytelne, poprawnie sformatowane i dobrze podzielone. | 2 | |
| K-05 | Inicjalizacja co najmniej 3 rekordów w pamięci Java. | 1 | |
| **Suma** | | **10** | |

### Ocena końcowa

| Pole | Wartość |
| --- | --- |
| Ocena (2–5) | |
| Uwagi prowadzącego | |
| Data wystawienia oceny | |
| Podpis prowadzącego | |

