# ТЗ: Evrone Auction — онлайн-аукцион

Демонстрационная версия документа · категория «Торги» · №05

> Это демонстрационное техническое задание: оно показывает структуру и глубину
> документа, который передаётся вместе с прототипом. Боевое ТЗ по этому солюшену
> готовится и заменит этот файл.

## 1. Суть решения

Торги в реальном времени: ставки, автобид, антиснайпинг, кабинет аукциониста.

Торги на повышение в реальном времени. Каталог лотов с фото и описанием, регистрация участников с депозитом/допуском, торговая сессия (WebSocket: ставки, автобид, антиснайпинг-автопродление), уведомления о перебитой ставке, итоги и выкуп лота, кабинет аукциониста (создание торгов, стартовые цены, шаги).

## 2. Технологический стек

| Слой | Решение |
|---|---|
| Backend | Ruby on Rails 8, PostgreSQL |
| Frontend | Hotwire (Turbo + Stimulus), Tailwind CSS |
| Фоновые задачи | Solid Queue |
| Файлы | Active Storage, S3-совместимое хранилище |
| Деплой | Docker, Kamal, production + staging |

## 3. Роли

- Участник торгов
- Аукционист
- Наблюдатель

## 4. Модель данных

### 4.1. Auction

```
state: enum # анонс, приём заявок, торги, завершён
starts_at: datetime
step: integer
anti_sniping_seconds: integer
```

### 4.2. Lot

```
auction_id: references
start_price: integer
current_price: integer
photos: has_many_attached
```

### 4.3. Bid

```
lot_id: references
participant_id: references
amount: integer
placed_at: datetime
auto_bid_limit: integer, nullable
```

## 5. Ключевые сценарии

1. Участник регистрируется, вносит депозит и получает допуск к торгам
2. Торговая сессия идёт в реальном времени, ставки прилетают по WebSocket
3. Ставка в последние минуты продлевает торги - антиснайпинг
4. Победитель получает счёт и выкупает лот

## 6. Интеграции

- WebSocket-канал торгов
- Приём депозитов
- Уведомления о перебитой ставке

## 7. Нефункциональные требования

- Серверный рендеринг, работоспособность ключевых страниц без JavaScript
- Мобильная адаптивность обязательна
- Роли и права проверяются на уровне сервера, а не интерфейса
- Логирование действий пользователей по значимым операциям
- Покрытие тестами моделей и ключевых сценариев
- Развёртывание одной командой, окружения production и staging

## 8. Состав MVP

Один аукцион от создания до оплаты лота.

## 9. Критерии приёмки

1. Все сценарии из раздела 5 проходят end-to-end на тестовом стенде
2. Роли из раздела 3 видят только то, что им положено
3. Интеграции из раздела 6 работают через слой адаптеров и переключаются конфигурацией
4. Прототип разворачивается из репозитория одной командой
5. Документация по запуску и переменным окружения лежит в README
