Files
vps-tracker/AGENTS.md
T
DenozordecandCursor 6fbd1a9113 refactor(repo): переход на pnpm monorepo с shadcn/ui и Fastify+Drizzle
Frontend:
- apps/web (Vite+TS, TanStack Router/Query, shadcn/ui @cfdm/ui base-nova)
- 10 страниц в routes/_auth/, Recharts через shadcn Chart, lucide-react
- формы на RHF + Zod (FormSheet/FormField)
- удалены Tabler, Chart.js, react-router-dom

Backend (параллельный трек):
- apps/api (Fastify 5 + Drizzle + better-sqlite3)
- packages/db: Drizzle-схема и repositories по сущностям
- packages/shared: Zod-контракты
- роуты с валидацией и единым форматом ошибок { error: { code, message } }
- sync/backup — заглушки 501 (billmanager-адаптеры переносятся отдельно)
- legacy Express оставлен как runtime по умолчанию (RUNTIME=express)

Infra:
- Dockerfile multi-stage под pnpm workspaces
- .dockerignore и docker-compose обновлены под monorepo

Rules:
- удалены нерелевантные правила (rust, cloudflare, server/frontend-conventions)
- project-structure.mdc и AGENTS.md переписаны под monorepo
- frontend-shadcn.mdc, shadcn-ui-production.mdc, sqlite.mdc обновлены

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 13:42:05 +07:00

5.6 KiB
Raw Blame History

VPS Tracker — Руководство для ИИ

Описание проекта

VPS Tracker — приложение для учёта виртуальных серверов (VPS), провайдеров, аккаунтов, платежей и балансов. Поддерживает синхронизацию с BILLmanager 6 API.

Стек

  • Monorepo: pnpm workspaces (apps/*, packages/*)
  • Frontend (apps/web): Vite + React 19 + TypeScript, TanStack Router v1 + Query v5, shadcn/ui (@cfdm/ui), Tailwind v4, lucide-react, Recharts (через shadcn Chart), react-hook-form + Zod
  • Backend (apps/api): Fastify 5 + TypeScript, @fastify/* plugins, контракты через @cfdm/shared (Zod)
  • DB (packages/db): Drizzle ORM + better-sqlite3 (WAL, foreign_keys=ON)
  • Тесты: Vitest (app.inject() для backend, happy-dom для frontend)

Структура проекта

vps-tracker/
├── apps/
│   ├── web/              # Vite SPA (TSX) — TanStack + shadcn/ui
│   │   └── src/
│   │       ├── routes/           # file-based (TanStack Router)
│   │       ├── queries/          # queryOptions + key factories
│   │       ├── components/       # shared + layout + domain
│   │       └── lib/              # api-client, queryClient, router, schemas
│   └── api/              # Fastify 5 API (TS)
│       └── src/
│           ├── routes/           # тонкие plugins
│           ├── services/         # бизнес-логика + billmanager/
│           │   └── billmanager/  # client, parsers, mappers, operations, sync
│           └── plugins/          # @fastify/* registration
├── packages/
│   ├── ui/               # @cfdm/ui — shadcn primitives
│   │   └── src/
│   │       ├── components/       # output `shadcn add` (не трогать под кейс)
│   │       ├── hooks/            # use-mobile и др.
│   │       ├── lib/utils.ts      # cn()
│   │       └── styles/globals.css # только output `shadcn apply --only theme`
│   ├── shared/           # @cfdm/shared — Zod-контракты, общие типы
│   └── db/               # @cfdm/db — Drizzle schema, repositories, миграции
│       └── src/
│           ├── schema/           # tables по сущностям
│           ├── repositories/     # typed queries
│           └── migrations/       # drizzle-kit
├── data/                 # SQLite база (том Docker, gitignored)
├── pnpm-workspace.yaml
└── package.json

Основные сущности

Сущность Описание
providers Хостинг-провайдеры; для BILLmanager: apiType, apiBaseUrl (один URL на хостера)
provider_accounts Аккаунты у провайдера; apiCredentials (логин:пароль API) для синка с BILLmanager
vps Виртуальные серверы (ip, ram, disk, tariffType, paidUntil)
payments Платежи (пополнение баланса, оплата VPS)
balance_ledger Движения по балансу
active_tariffs Тарифы, загруженные из BILLmanager vds.order
settings Настройки приложения (baseCurrency, ratesUrl, syncEnabled)

Где искать код по доменам

  • Sync (BILLmanager)apps/api/src/services/billmanager/, apps/api/src/routes/sync.ts, scheduler в apps/api/src/services/
  • Тарифыapps/api/src/services/billmanager/operations.ts (fetchVdsOrderPricelist), apps/api/src/services/billmanager/sync.ts
  • VPS CRUDapps/api/src/routes/vps.ts, packages/db/src/repositories/vps.ts
  • Платежи/балансapps/api/src/routes/payments.ts, apps/api/src/routes/balance-ledger.ts
  • Курсы валютapps/web/src/lib/format.ts (convertCurrency, formatInBaseCurrency), настройки в settings.ratesUrl
  • UI sharedapps/web/src/components/ (PageShell, PageHeader, EmptyState, QueryState, ConfirmDialog, DataTableCard, SectionCards, StatusBadge, FormSheet, FormField, TableCard, LoadingButton)
  • UI primitivespackages/ui/src/components/* (только output shadcn add)

BILLmanager API

Формат запроса: ?authinfo=user:pass&out=bjson&func=vds|payment|dashboard.info|vds.order

Команды

pnpm install
pnpm --filter web dev          # frontend dev
pnpm --filter api dev          # backend dev
pnpm --filter web build        # production build frontend
pnpm --filter api test         # Vitest backend
pnpm --filter web test         # Vitest frontend

Соглашения