No description
  • PHP 76.1%
  • TypeScript 23.3%
  • Shell 0.3%
  • Dockerfile 0.2%
Find a file
2026-05-26 18:34:03 +03:00
app Add lat long 2026-05-26 18:34:03 +03:00
bootstrap * 2026-03-06 20:47:30 +03:00
config * 2026-05-26 09:42:19 +03:00
crm Add lat long 2026-05-26 18:34:03 +03:00
database Add lat long 2026-05-26 18:34:03 +03:00
docker * 2026-05-26 09:42:19 +03:00
docs * 2026-03-04 10:17:07 +03:00
public * 2026-03-04 10:17:07 +03:00
routes * 2026-05-26 09:42:19 +03:00
storage * 2026-05-26 09:42:19 +03:00
.dockerignore * 2026-03-04 10:17:07 +03:00
.DS_Store * 2026-05-26 09:42:19 +03:00
.env.example * 2026-03-04 10:17:07 +03:00
.gitignore * 2026-03-04 10:17:07 +03:00
artisan * 2026-03-04 10:17:07 +03:00
composer.json * 2026-05-26 09:42:19 +03:00
composer.lock * 2026-05-26 09:42:19 +03:00
docker-compose.yml * 2026-05-26 09:42:19 +03:00
Dockerfile * 2026-05-26 09:42:19 +03:00
README.md * 2026-05-26 09:42:19 +03:00

Kataem API

Laravel 12 API backend with Sanctum auth, OpenAPI 3.0 (Swagger), UUIDv7 primary keys.

Stack

  • PHP 8.2, Laravel 12
  • Auth: Laravel Sanctum (token)
  • API: JSON only, versioned /api/v1
  • Docs: l5-swagger (auto from annotations) + docs/openapi.yaml
  • IDs: UUID v7 (App\Models\Concerns\HasUuidV7 + UuidV7Service)

Standards

  • PSR-12: форматирование (при наличии: ./vendor/bin/pint --test).
  • Типизация: declare(strict_types=1); в Support, Middleware, Policies, части Controllers.
  • Ответы API: единый формат через App\Support\ApiResponse (success: data/meta, error: message/errors). Исключения для api/* обрабатываются в bootstrap/app.php (JSON с тем же форматом).
  • Права: Gate admin, ResortPolicy; create/update/delete для Resorts и вложенных ресурсов — только для admin (middleware auth:sanctum + admin).
  • Swagger: пути в аннотациях соответствуют роутам /api/v1/....

Подробно: docs/project-structure-and-run.md.

Structure

app/
├── Contracts/          # Interfaces (Repositories, Services)
├── DTO/                # Data transfer objects
├── Features/           # Use cases (Auth, User, Resort, Hotel, …)
├── Http/
│   ├── Controllers/Api/V1/
│   ├── Middleware/     # EnsureJsonRequest, EnsureUserIsAdmin
│   ├── Requests/Api/V1/
│   └── Resources/Api/V1/
├── Models/             # Eloquent (BaseModel + UUIDv7)
├── Policies/           # ResortPolicy (admin for create/update/delete)
├── Repositories/       # Implementations of Contracts
├── Services/           # AuthService, UuidV7Service
└── Support/            # ApiResponse (success/error)

Local (Docker)

cp .env.example .env
docker compose up --build

Production build

docker build --build-arg INSTALL_DEV=0 -t kataem-api .

API examples

Register

curl -s -X POST http://localhost:8000/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"name":"Test","email":"test@example.com","password":"password","password_confirmation":"password"}'

Login

curl -s -X POST http://localhost:8000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com","password":"password"}'

Me (with token)

curl -s http://localhost:8000/api/v1/auth/me \
  -H "Authorization: Bearer YOUR_TOKEN"

Swagger

  • Auto: run php artisan l5-swagger:generate (or set L5_SWAGGER_GENERATE_ALWAYS=true).
  • Static: docs/openapi.yaml in repo.

Without Docker

composer install
cp .env.example .env && php artisan key:generate
# set DB_* in .env
php artisan migrate
php artisan l5-swagger:generate
php artisan serve