♻ update

This commit is contained in:
gsr
2026-10-17 20:09:57 +03:00
parent d42640d0e9
commit 51e1c5149b
3 changed files with 59 additions and 39 deletions
+59 -39
View File
@@ -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.