♻ update
This commit is contained in:
+59
-39
@@ -1,6 +1,51 @@
|
||||
# Changelog
|
||||
|
||||
## [0.6.11-beta] - 2026-10-12
|
||||
# Changelog
|
||||
|
||||
## [0.15.1-rc] - 2026-10-17
|
||||
### Добавлено
|
||||
**История платежей (Backend)**
|
||||
`GET /api/billing/payments` — новый эндпоинт для получения списка заказов пользователя с пагинацией (`limit`, `offset`). Возвращает метаданные: `total`, `has_more`. Реализовано через `PaymentService.ListOrders` и `postgresPaymentRepo.ListByUserID`.
|
||||
|
||||
**Интерфейс оплаты (Frontend)**
|
||||
Страница `/billing/history` — визуализация истории покупок. Карточки заказов отображают статус, продукт, сумму и дату. Клик по карточке ведет на детальную страницу заказа.
|
||||
Функция `listPayments()` в `lib/billing.ts` для работы с новым API.
|
||||
|
||||
**Детальная страница заказа (Frontend)**
|
||||
Маршрут `/billing/payments/:id` (или модальное окно/страница статуса) позволяет пользователю проверить актуальный статус конкретного платежа после возвращения с ЮKassa или при повторном посещении истории.
|
||||
|
||||
### Изменено
|
||||
**UX процесса покупки**
|
||||
Кнопка «Купить» теперь инициирует создание платежа через бэкенд и открывает `confirmation_url` в новой вкладке, вместо прямой выдачи кредитов (которая была доступна только в dev-mode).
|
||||
|
||||
---
|
||||
|
||||
## [0.14.5-beta] - 2026-10-16
|
||||
### Добавлено
|
||||
**Интеграция с YooKassa (СБП/Карта)**
|
||||
Новый модуль `internal/billing/payment`:
|
||||
- `YooKassaGateway`: реализация интерфейса шлюза на чистом `net/http`. Поддержка создания платежей СБП (`payment_method_data.type=sbp`) и банковских карт (`bank_card`) через конфигурацию.
|
||||
- Автоматическая генерация `Idempotence-Key` на бэкенде (UUID) для защиты от дублирования заказов при повторных запросах клиента.
|
||||
- Проверка подлинности вебхуков: обязательный запрос состояния платежа через API ЮKassa перед начислением товаров (защита от фейковых уведомлений).
|
||||
|
||||
**Миграция базы данных**
|
||||
Таблица `payment_orders`: хранение локальных заказов, сумм, статусов (`pending`, `paid`, `canceled`, `failed`), связей с провайдером (`provider_payment_id`) и ключей идемпотентности. Индексы для быстрого поиска по пользователю и ID платежа.
|
||||
|
||||
**Безопасность биллинга**
|
||||
- Отключение бесплатного эндпоинта `POST /api/billing/purchase` в режиме `release`. Теперь кредиты выдаются только после подтверждения оплаты через ЮKassa.
|
||||
- IP-фильтрация вебхуков (`YOOOKASSA_WEBHOOK_ALLOWED_CIDRS`): блокировка входящих уведомлений от неизвестных источников.
|
||||
|
||||
### Исправлено
|
||||
**Обработка смены магазина/способа оплаты**
|
||||
Логика `intentFromExisting` обновлена: если заказ существует, но платёж у провайдера не найден (404) или был создан с другими параметрами (ошибка идемпотентности), система автоматически сбрасывает привязку к старому платежу и создаёт новый. Это устраняет ошибки "Payment method is not available" и конфликты ключей при переходе с тестового на боевой магазин или с карты на СБП.
|
||||
|
||||
### Изменено
|
||||
**Архитектура зависимостей**
|
||||
Введение слоя `PaymentService`, который оркеструет взаимодействие между `QuotaService` (бизнес-логика квот) и `YooKassaGateway` (внешний мир). Бизнес-логика начисления кредитов и активации подписок осталась изолированной в существующих сервисах, что позволило переиспользовать её без дублирования кода.
|
||||
|
||||
---
|
||||
|
||||
## [0.13.6] - 2026-10-12
|
||||
|
||||
### Добавлено
|
||||
- **Cleanup job** — автоматическая очистка записей `conversion_logs` старше 90 дней через `CleanupOldLogs()`.
|
||||
@@ -23,7 +68,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [0.6.10-beta] - 2026-10-10
|
||||
## [0.12.3-rs] - 2026-10-10
|
||||
|
||||
### Добавлено
|
||||
- **🎨 Редизайн главной страницы** — шесть новых информационных блоков на landing page для улучшения onboarding и конверсии.
|
||||
@@ -52,7 +97,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [0.6.9-beta] - 2026-10-05
|
||||
## [0.11.4-beta] - 2026-10-05
|
||||
|
||||
### Добавлено
|
||||
- **Три типа монетизации** — единый ответ `GET /api/billing/packages` теперь возвращает `{ free, credits, subscriptions }` вместо плоского списка пакетов.
|
||||
@@ -75,7 +120,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [0.6.8-beta] - 2026-10-04
|
||||
## [0.10.4] - 2026-10-04
|
||||
|
||||
### Добавлено
|
||||
- **💳 Подписки (Subscriptions)** — новая модель безлимитного доступа к конвертеру.
|
||||
@@ -100,7 +145,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [0.5.8-beta] - 2026-10-03
|
||||
## [0.9.2-rc.1] - 2026-10-03
|
||||
|
||||
### Добавлено
|
||||
- **📑 Оглавление (Table of Contents)** — новая опция `include_toc` в API-запросе для генерации оглавления на основе заголовков H1–H3.
|
||||
@@ -115,7 +160,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [0.5.7-beta] - 2026-10-03
|
||||
## [0.8.3-rc] - 2026-10-03
|
||||
|
||||
### Добавлено
|
||||
- **🔍 Автоматическое определение языка контента** — триграммный анализ через `whatlanggo` с предочисткой текста от Markdown-разметки, кода и URL-адресов.
|
||||
@@ -133,7 +178,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [0.5.6-beta] - 2026-09-27
|
||||
## [0.7.3-beta.3] - 2026-09-27
|
||||
|
||||
### Добавлено
|
||||
|
||||
@@ -202,31 +247,6 @@
|
||||
- **Responsive Design**: Адаптивная верстка для мобильных устройств
|
||||
- **Accessibility**: ARIA-атрибуты, фокус-менеджмент, keyboard navigation
|
||||
|
||||
### Миграция БД
|
||||
|
||||
```sql
|
||||
CREATE TABLE api_keys (
|
||||
id UUID PRIMARY KEY,
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name VARCHAR(50) NOT NULL DEFAULT 'Default Key',
|
||||
key_prefix VARCHAR(50) NOT NULL,
|
||||
key_hash TEXT NOT NULL,
|
||||
last_used_at TIMESTAMPTZ,
|
||||
expires_at TIMESTAMPTZ,
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX idx_api_keys_user_unique
|
||||
ON api_keys(user_id)
|
||||
WHERE is_active = TRUE;
|
||||
|
||||
CREATE INDEX idx_api_keys_hash
|
||||
ON api_keys(key_hash)
|
||||
WHERE is_active = TRUE;
|
||||
```
|
||||
|
||||
### Тестирование
|
||||
|
||||
- **Postman Collection**: Готовая коллекция для тестирования всех сценариев
|
||||
@@ -235,7 +255,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.4.6-beta] - 2026-09-26
|
||||
## [0.6.3-beta.2] - 2026-09-26
|
||||
|
||||
### Добавлено
|
||||
|
||||
@@ -260,7 +280,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.4.5-beta] - 2026-09-25
|
||||
## [0.5.4-beta.1] - 2026-09-25
|
||||
|
||||
### Добавлено
|
||||
|
||||
@@ -329,7 +349,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.4.4-beta] - 2026-09-24
|
||||
## [0.4.6-beta] - 2026-09-24
|
||||
|
||||
### Добавлено
|
||||
|
||||
@@ -362,7 +382,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.4.3-beta] - 2026-09-23
|
||||
## [0.3.10] - 2026-09-23
|
||||
|
||||
### Добавлено
|
||||
|
||||
@@ -389,7 +409,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.3.2-beta] - 2026-09-22
|
||||
## [0.2.3-beta] - 2026-09-22
|
||||
|
||||
### Добавлено
|
||||
- **Billing & Subscriptions**: Модуль управления тарифными планами (`Free`, `Basic`, `Pro`) с ежемесячными квотами и атомарным трекингом использования (`usage tracking`).
|
||||
@@ -405,7 +425,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.2.1-alpha] - 2026-06-15
|
||||
## [0.1.3-alpha] - 2026-06-15
|
||||
|
||||
### Добавлено
|
||||
- Базовый API конвертации HTML в чистый Markdown для LLM.
|
||||
@@ -414,7 +434,7 @@ CREATE INDEX idx_api_keys_hash
|
||||
|
||||
---
|
||||
|
||||
## [0.1.0-alpha] - 2026-03-01
|
||||
## [0.1.0-alpha] - 2026-05-01
|
||||
|
||||
### Добавлено
|
||||
- Инициализация проекта MarkClean, MVP мотора конвертации текста.
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user