Skip to content

marian-roller/laravel_crud

Repository files navigation

Instrukcja obsługi projektu Laravel w Dockerze

Wymagania

  • Docker
  • Docker Compose

1. Klonowanie repozytorium

git clone git@github.com:marian-roller/laravel_crud.git crud_test
cd crud_test
cp .env.example .env

2. Edycja pliku .env

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password

MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

WWWUSER=1000
WWWGROUP=1000

Procedura instalacji:

docker compose up -d
docker compose exec laravel.test bash
composer install
php artisan key:generate
exit
docker compose down -v
docker compose up -d
docker compose exec laravel.test bash
php artisan migrate

4. Testowanie endpointów

W Postmanie, dla dockera base_url: http://localhost

Person API

API do zarządzania rekordami osób (Person) wraz z ich adresami e-mail.


Endpointy

Pobierz wszystkie osoby

GET /api/people
Opis: Zwraca listę wszystkich osób wraz z ich e-mailami.
Przykładowa odpowiedź (200):

[
    {
        "id": 23,
        "firstName": "Stefan",
        "lastName": "Jankowski",
        "phoneNumber": "984654421",
        "created_at": "2025-11-01T10:37:13.000000Z",
        "updated_at": "2025-11-01T10:37:13.000000Z",
        "emails": [
            {
                "id": 42,
                "person_id": 23,
                "email": "a@example.com",
                "created_at": "2025-11-01T10:37:13.000000Z",
                "updated_at": "2025-11-01T10:37:13.000000Z"
            }
        ]
    },
    {
        "id": 26,
        "firstName": "Jan",
        "lastName": "Jankowski",
        "phoneNumber": "984654421",
        "created_at": "2025-11-01T14:56:11.000000Z",
        "updated_at": "2025-11-01T14:56:11.000000Z",
        "emails": [
            {
                "id": 49,
                "person_id": 26,
                "email": "b@example.com",
                "created_at": "2025-11-01T14:56:11.000000Z",
                "updated_at": "2025-11-01T14:56:11.000000Z"
            },
            {
                "id": 50,
                "person_id": 26,
                "email": "c@example.com",
                "created_at": "2025-11-01T14:56:11.000000Z",
                "updated_at": "2025-11-01T14:56:11.000000Z"
            }
        ]
    }
]

Dodaj nową osobę

POST /api/people
Opis: Tworzy nową osobę i wysyła e-maile powitalne do podanych adresów.

Body (JSON):

{
  "firstName": "Paweł",
  "lastName": "Pawłowski",
  "phoneNumber": "984654421",
  "emails": ["m@example.com", "n@example.com"]
}

Przykładowa odpowiedź (201):

{
    "firstName": "Paweł",
    "lastName": "Pawłowski",
    "phoneNumber": "984654421",
    "updated_at": "2025-11-01T18:28:09.000000Z",
    "created_at": "2025-11-01T18:28:09.000000Z",
    "id": 27,
    "emails": [
        {
            "id": 51,
            "person_id": 27,
            "email": "m@example.com",
            "created_at": "2025-11-01T18:28:09.000000Z",
            "updated_at": "2025-11-01T18:28:09.000000Z"
        },
        {
            "id": 52,
            "person_id": 27,
            "email": "n@example.com",
            "created_at": "2025-11-01T18:28:09.000000Z",
            "updated_at": "2025-11-01T18:28:09.000000Z"
        }
    ]
}

Pobierz szczegóły osoby

GET /api/people/{id}
Opis: Zwraca szczegóły pojedynczej osoby wraz z jej e-mailami.

Przykładowa odpowiedź (200):

{
    "id": 23,
    "firstName": "Stefan",
    "lastName": "Jankowski",
    "phoneNumber": "984654421",
    "created_at": "2025-11-01T10:37:13.000000Z",
    "updated_at": "2025-11-01T10:37:13.000000Z",
    "emails": [
        {
            "id": 42,
            "person_id": 23,
            "email": "a@example.com",
            "created_at": "2025-11-01T10:37:13.000000Z",
            "updated_at": "2025-11-01T10:37:13.000000Z"
        }
    ]
}

Zaktualizuj osobę

PUT /api/people/{id}
Opis: Aktualizuje dane osoby oraz zarządza jej e-mailami (dodaje nowe i usuwa stare). Wysyła e-maile powitalne dla nowych i pożegnalne dla usuniętych.

Body (JSON):

(Wyrane pola lub wszystkie)

{
  "firstName": "Marek",
  "lastName": "Markowski",
  "phoneNumber": "984654421",
  "emails": ["u@example.com"]
}

Przykładowa odpowiedź (200):

{
    "id": 27,
    "firstName": "Marek",
    "lastName": "Markowski",
    "phoneNumber": "984654421",
    "created_at": "2025-11-01T18:28:09.000000Z",
    "updated_at": "2025-11-01T18:32:54.000000Z",
    "emails": [
        {
            "id": 54,
            "person_id": 27,
            "email": "u@example.com",
            "created_at": "2025-11-01T18:32:54.000000Z",
            "updated_at": "2025-11-01T18:32:54.000000Z"
        }
    ]
}

Usuń osobę

DELETE /api/people/{id}
Opis: Usuwa osobę i wysyła e-maile pożegnalne do wszystkich powiązanych adresów.

Przykładowa odpowiedź (200):

{
    "message": "Rekord Piotr Piotrowski został usunięty, wysłano maile pożegnalne."
}

5. Funkcjonalność dodatkowa

  • Wysłanie maila powitalnego na każdy adres e-mail dodawanej osoby (store request).
  • Wysłanie maila powitalnego na każdy adres e-mail dodany podczas update danej osoby.
  • Wysłanie maila pożegnalnego na każdy adres e-mail usuwany podczas update danej osoby.
  • Wysłanie maila pożegnalnego na wszystkie adresy e-mail usuwanej osoby (destroy request).

Maile trafiają do skrzynki MailPita: http://localhost:8025

Testy (w kontenerze laravel.test):

php artisan test

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages