Об этом проекте

ParkCore представляет собой full-stack приложение для управления парковочными операциями, предназначенное для владельцев независимых парковок. Его область применения намеренно ограничена: управление повседневным состоянием парковки, а не бронирование или обработка платежей. В README четко указано, что система не является маркетплейсом бронирования или платежной платформой. Возможности - Публичный поиск: любой пользователь может искать и фильтровать активные парковки по адресу и почасовой ставке через каталог только для чтения. - Жизненный цикл парковки: владельцы управляют своими объектами, контролируя их активность, публичную видимость и доступность для новых регистраций. - Операции с сессиями: регистрация въезда автомобиля, мониторинг активных сессий, завершение или отмена пребывания, а также просмотр истории сессий. - Распознавание транспортных средств: номерные знаки нормализуются, чтобы идентификатор автомобиля можно было использовать повторно при последующих визитах на конкретную парковку. - Снимки цен: почасовая ставка и валюта фиксируются в момент въезда, поэтому итоговая сумма остается корректной даже при последующем изменении конфигурации объекта. Инженерный подход Правила домена сосредоточены на границе API: парковка должна быть активна для приема автомобиля, и только ее владелец может управлять парковкой или сессиями. Вместимость защищена от одновременных регистраций с помощью сериализуемого сохранения данных и ограничений базы данных, которые также предотвращают дублирование активных автомобилей на одной парковке. Веб-клиент работает на основе контрактов: TypeScript-пакет @parkcore/api-client генерируется из OpenAPI-артефакта API, а команда pnpm contract:check обнаруживает расхождения между API и клиентом. Браузерное приложение не импортирует внутренние механизмы API или типы Prisma; оно взаимодействует с API исключительно через сгенерированный клиент. Верификация разделена по системным границам, указанным в README: тесты API на базе PostgreSQL для проверки поведения домена и персистентности, веб-тесты для компонентов и маршрутов, Playwright для рабочих процессов владельца, а также отдельные проверки реального стека для развернутой системы. Архитектура и стек Поток данных: Браузер → веб-приложение на Vercel (React/Vite и сгенерированный API-клиент) → API на Render → Neon PostgreSQL. API-приложение отвечает за аутентификацию, правила домена, авторизацию и персистентность через Prisma. Веб-приложение отвечает за публичный поиск и операции владельца, используя React Router для навигации и TanStack Query для серверного состояния. Инструментарий включает pnpm workspaces, Vitest, Playwright, ESLint, Prettier и Docker Compose; на стороне API используются Node.js, Express 5, Prisma, PostgreSQL, Zod и OpenAPI. Быстрый старт Необходимые требования: Node.js 24, pnpm 10 и Docker Desktop. После копирования файлов .env.example для API и веб-приложений выполняется последовательность команд: pnpm install, pnpm docker:up, pnpm db:setup и pnpm dev. API запускается на порту 3000, а веб-приложение обычно на порту 5173. Скрипты качества охватывают форматирование, линтинг, проверку типов, тесты с покрытием, сквозной запуск Playwright, проверку контрактов и сборку (для которой требуется VITE_API_URL). Документация в репозитории охватывает область проекта, архитектуру, рабочий процесс разработки, тестирование и развертывание. Ссылки на живые демо веб-приложения и эндпоинт проверки состояния API доступны в README.