diff --git a/changelog.md b/changelog.md index 9c87f6a..5cb46d4 100644 --- a/changelog.md +++ b/changelog.md @@ -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 мотора конвертации текста. \ No newline at end of file diff --git a/markclean-api-en.pdf b/markclean-api-en.pdf new file mode 100644 index 0000000..f45ddbf Binary files /dev/null and b/markclean-api-en.pdf differ diff --git a/markclean-api-ru.pdf b/markclean-api-ru.pdf new file mode 100644 index 0000000..5ec9d74 Binary files /dev/null and b/markclean-api-ru.pdf differ