Refactor pricing endpoints and enhance support for pricing retrieval
- Added a new endpoint `/api/support/pricing` to allow users to retrieve pricing information, making it accessible for role request dialogs. - Introduced the `GetSupportPricing` method to handle pricing queries, ensuring that pricing data is available to non-admin users. - Updated frontend components to integrate the new pricing retrieval functionality, displaying estimated costs based on user-selected configurations. - Removed the `PricingSettingsDto` as it is no longer needed, streamlining the pricing data structure. - Enhanced API documentation to reflect the new endpoint and its usage in the support context.
This commit is contained in:
@@ -156,6 +156,7 @@ status, createdAt }`. `expiresAt` всегда `null` (лимиты по сро
|
||||
| Метод | Путь | Тело запроса | Тело ответа |
|
||||
| ----- | ----------------------------------------- | ---------------------------------------------------------------------------- | ------------- |
|
||||
| GET | `/api/support/roles` | — | `RoleDto[]` (без `admin` и без текущей роли пользователя) — для выбора существующей роли в заявке |
|
||||
| GET | `/api/support/pricing` | — | `PricingSettingsDto` — та же цена, что и `/api/admin/pricing`, для справки в диалоге заявки на роль |
|
||||
| GET | `/api/support/tickets` | query: `type?, status?, page=1, pageSize=20` | `PagedList<TicketSummaryDto>` (только свои) |
|
||||
| GET | `/api/support/tickets/{id}` | — | `TicketDetailDto` (404, если не свой) |
|
||||
| POST | `/api/support/tickets/bug-reports` | multipart: `message` + `files[]` (до 5, изображения до 5 МБ) | `TicketDetailDto` |
|
||||
|
||||
+11
-5
@@ -6,7 +6,8 @@
|
||||
|
||||
Тарифы `Plan` и лимиты трафика на конфиг (`TrafficLimit`) не реализованы — единственная квота:
|
||||
число активных конфигов на роль (`AppRole.MaxConfigs`). Есть глобальная справочная цена за один
|
||||
конфиг (`PricingSettings`, видна только админу) — это не биллинг: без статусов оплаты, дат окончания
|
||||
конфиг (`PricingSettings`; редактирует только `admin`, но справочно видна и активированным пользователям
|
||||
в заявке на роль) — это не биллинг: без статусов оплаты, дат окончания
|
||||
и интеграций с платёжными системами, см. ниже.
|
||||
|
||||
## Диаграмма связей
|
||||
@@ -328,10 +329,15 @@ PricePerConfigPerQuarter × 3` и `PricePerConfigPerYear × 12 ≥ PricePerConfi
|
||||
полугодовая ставка не задана — год сверяется напрямую с кварталом: `PricePerConfigPerYear × 12 ≥
|
||||
PricePerConfigPerQuarter × 3`).
|
||||
|
||||
`GET/PUT /api/admin/pricing` — только `admin` (в отличие от `RoleDto`, цена никогда не попадает в
|
||||
`GET /api/support/roles`, доступный любому активированному пользователю, — это два независимых DTO).
|
||||
Сидируется пустой строкой при старте (`IPricingSettingsSeeder`, если таблица пуста) и заново после
|
||||
полного сброса панели (см. «Полный сброс панели» выше).
|
||||
`GET/PUT /api/admin/pricing` — только `admin` (редактирование). `GET /api/support/pricing` — то же
|
||||
чтение, но доступно любому активированному пользователю (не `admin`-эндпоинт) — используется в
|
||||
диалоге заявки на роль, чтобы показать ориентировочную стоимость выбранной/предлагаемой роли, с
|
||||
пометкой, что цены пока ознакомительные. Это два разных Query (`GetPricingSettingsQuery` в
|
||||
`Admin/Pricing`, `GetSupportPricingQuery` в `Support`) над одним и тем же общим `PricingSettingsDto`
|
||||
(`Common/Interfaces`) — по аналогии с `ListRolesQuery`/`ListSelectableRolesQuery` для ролей. В отличие
|
||||
от `RoleDto`, у `PricingSettingsDto` нет чувствительных per-роль данных, поэтому шарить DTO между
|
||||
admin- и user-facing путями безопасно. Сидируется пустой строкой при старте (`IPricingSettingsSeeder`,
|
||||
если таблица пуста) и заново после полного сброса панели (см. «Полный сброс панели» выше).
|
||||
|
||||
### ActivationRequest — запрос активации
|
||||
Пользователь просит активацию у админа; админ одобряет/отклоняет на сайте или в Telegram.
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@
|
||||
| -------------------------- | --------------------------------------------------------------------------------- |
|
||||
| Ролей у пользователя | Ровно одна роль (квота = `MaxConfigs` роли) |
|
||||
| Секреты нод | ASP.NET Core Data Protection (шифрование at-rest, key-ring на томе) |
|
||||
| Тарифы/лимиты трафика | Не реализованы — конфиги без лимитов трафика/срока. Есть глобальная справочная цена за конфиг (`PricingSettings`, видна только админу) — без биллинг-логики |
|
||||
| Тарифы/лимиты трафика | Не реализованы — конфиги без лимитов трафика/срока. Есть глобальная справочная цена за конфиг (`PricingSettings`, редактирует только `admin`, справочно видна и в заявке на роль) — без биллинг-логики |
|
||||
| i18n | RU + EN (react-i18next) |
|
||||
| Telegram-транспорт | Long polling |
|
||||
| Регистрация через Telegram | Поддержана (логин — Telegram `@username`/id, пароль генерируется и присылается в чат) |
|
||||
|
||||
Reference in New Issue
Block a user