Files
portal/docs/superpowers/findings/2026-06-27-remove-project-count-limit.md
T
Дмитрий 16937a7f14 feat: убрать лимит по числу проектов — ограничение только по балансу/лидам
Правило продукта: ограничений по количеству проектов нет, лимит только
по балансу и заказанным лидам. Убран гейт 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>
2026-06-27 12:47:49 +03:00

4.0 KiB
Raw Blame History

Снятие лимита по числу проектов (max_projects) — готово к выкату

Дата: 27.06.2026. Причина: правило продукта — ограничений по количеству проектов нет, ограничение только по балансу / заказанным лидам. В коде же был лишний гейт max_projects (дефолт 10), который блокировал создание проектов у клиентов с >10 проектами (у tenant 2 — 117 шт, видел сообщение «Достигнут лимит проектов (10). Смените тариф.»).

Что сделано (по TDD, RED→GREEN)

Бэкенд:

  • ProjectService.php:620убран гейт max_projects (бросал 403). Балансовый префлайт в ProjectController::store (409 balance_insufficient) — настоящий лимит — не тронут.
  • DashboardController.php:82,144 — убран расчёт maxProjects и поле active_projects.limit из ответа.

Фронт:

  • dashboard.ts:15 — тип active_projects без limit.
  • DashboardView.vue:110 — плитка «Активные проекты» показывает просто количество, без «/ N лимит тарифа».

Комментарии (чистка вводящего в заблуждение):

Колонка 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.

Проверки (всё зелёное)

  • ProjectsStoreTest13/13 passed.
  • DashboardSummaryTest11/11 passed.
  • DashboardView.spec.ts (Vitest) — 8/8 passed.
  • vue-tsc type-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-error source_locked (дрейф типа Project из Эпика 3). Я этот файл не трогал; чинить — отдельно.