16937a7f14
Правило продукта: ограничений по количеству проектов нет, лимит только по балансу и заказанным лидам. Убран гейт tenants.limits.max_projects в ProjectService::create и показ лимита проектов на дашборде. Поле limits оставлено как резерв; max_users и api_rps в коде не используются. Заодно фикс типа в EditProjectDialog.spec: sampleProject типизирован настоящим Project, source_locked больше не краснит vue-tsc. Тесты: ProjectsStore 13/13, DashboardSummary 11/11, DashboardView 8/8, EditProjectDialog 7/7; vue-tsc чисто; pint чисто; vite build ок. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.0 KiB
4.0 KiB
Снятие лимита по числу проектов (max_projects) — готово к выкату
Дата: 27.06.2026. Причина: правило продукта — ограничений по количеству проектов нет,
ограничение только по балансу / заказанным лидам. В коде же был лишний гейт max_projects
(дефолт 10), который блокировал создание проектов у клиентов с >10 проектами (у tenant 2 — 117 шт,
видел сообщение «Достигнут лимит проектов (10). Смените тариф.»).
Что сделано (по TDD, RED→GREEN)
Бэкенд:
- ProjectService.php:620 — убран гейт
max_projects(бросал 403). Балансовый префлайт вProjectController::store(409balance_insufficient) — настоящий лимит — не тронут. - DashboardController.php:82,144 — убран расчёт
maxProjectsи полеactive_projects.limitиз ответа.
Фронт:
- dashboard.ts:15 — тип
active_projectsбезlimit. - DashboardView.vue:110 — плитка «Активные проекты» показывает просто количество, без «/ N лимит тарифа».
Комментарии (чистка вводящего в заблуждение):
- Tenant.php:61, миграция add_limits_to_tenants — отметка, что
max_projectsубран;max_users/api_rpsв коде не используются (зарезервированы).
Колонка tenants.limits ОСТАВЛЕНА (она cast'ится в Tenant и TariffPlan; дроп — отдельная schema-миграция с риском, по правилу «не рвать швы» не делаю). Просто перестали читать max_projects.
Тесты:
- ProjectsStoreTest.php:125 — бывший «rejects when exceeds max_projects» переписан в «лимита по числу проектов нет»: даже при
max_projects=1второй проект создаётся (201). - DashboardSummaryTest.php — убрана проверка
active_projects.limit, добавленаassertJsonMissingPath. - DashboardView.spec.ts — моки без
limit.
Проверки (всё зелёное)
ProjectsStoreTest— 13/13 passed.DashboardSummaryTest— 11/11 passed.DashboardView.spec.ts(Vitest) — 8/8 passed.vue-tsctype-check — мои правки чисты.pint— passed (стиль ок).
Деплой (по команде владельца, я сам НЕ катаю)
- Миграций НЕТ, БД не меняется. Нужна пересборка фронта (Vite) — менялись
.vue/.ts. - Метод — штатный
bin/deploy-source-edit.sh(rsync overlay gitea→прод + npm build), как обычно. - Откат: вернуть прежние версии 9 файлов (или
git revertкоммита) + пересобрать фронт. БД-отката не требуется.
Пред-существующее (НЕ от этой правки — для сведения)
tests/Frontend/EditProjectDialog.spec.ts:111— type-errorsource_locked(дрейф типаProjectиз Эпика 3). Я этот файл не трогал; чинить — отдельно.