# ER-схема

## roles / permissions / users

| Таблица | Ключевые поля |
|---------|---------------|
| roles | slug, name, scope |
| permissions | slug, name, group |
| role_permissions | role_id, permission_id |
| users | email, name, last_name, patronymic, phone, role_id, status |
| refresh_tokens | user_id, token_hash, expires_at |

## regions / places

| Таблица | Ключевые поля |
|---------|---------------|
| regions | slug, name, is_active, sort_order |
| places | region_id, slug, name, kind, is_active, sort_order |

## organizations / objects / offers / attributes

| Таблица | Ключевые поля |
|---------|---------------|
| organizations | slug, name, is_active |
| objects | organization_id, place_id, region_id, slug, name, type, status, cover_image_url, published_at |
| object_offers | object_id, slug, name, status, max_guests, rooms_count, base_price, currency, is_default |
| object_media | object_id, storage_key, caption, sort_order |
| offer_media | offer_id, storage_key, caption, sort_order |
| attribute_definitions | slug, scope, value_type, group_slug, is_filterable |
| attribute_options | attribute_id, slug, label |
| object_attribute_values | object_id, attribute_id, option_id, value_bool |
| offer_attribute_values | offer_id, attribute_id, value_bool |

## Связи

```
roles 1──* users
roles *──* permissions (role_permissions)
regions 1──* places
organizations 1──* objects
regions 1──* objects
places 1──* objects
objects 1──* object_media
objects 1──* object_offers
objects 1──* object_attribute_values
object_offers 1──* offer_media
object_offers 1──* offer_attribute_values
attribute_definitions 1──* attribute_options
```

> Таблицы `bookings`, `availability_blocks` — в следующем этапе.

См. [object-offers-attributes.md](design/object-offers-attributes.md), [catalog-objects.md](design/catalog-objects.md).
