# Архитектура PhotoPlaces — Обзор (MOC) **Контекст**: Карта технического долга и архитектурных решений проекта PhotoPlaces для оценки жизнеспособности и планирования рефакторинга. ## Суть Проект — fullstack приложение (Next.js + Go) для карты мест фотосъёмок, аренды студий и найма фотографов. Использует PostgreSQL + PostGIS, Redis, MinIO. Развертывание через Docker Compose. ## Основные компоненты ### Backend (Go 1.22) - **Router**: Chi v5 - **DB**: pgx/v5 (PostgreSQL + PostGIS) - **Auth**: JWT (access 15min + refresh 30d) - **Architecture**: Layered (handlers → services → repository) - **Migrations**: golang-migrate ### Frontend (Next.js 14 App Router) - **State**: React Context (AuthProvider) - **API**: Custom fetch wrapper - **Maps**: Yandex Maps API - **Styling**: Tailwind CSS ### Infrastructure - **Local**: `docker-compose.yml` (postgres, redis, minio, backend, frontend) - **Prod**: `deploy/docker-compose.prod.yml` + `deploy/deploy.sh` ## Критические проблемы (P0) | Проблема | Файл | Описание | |----------|------|----------| | **Refresh tokens не хранятся в БД** | `auth.go` | Refresh токены валидируются только по подписи, нет отзыва, нет ротации, утечка = полный доступ 30 дней | | **Rate limiter in-memory** | `ratelimit.go`, `main.go` | Не работает в кластере, сбрасывается при рестарте | | **Нет валидации входных данных** | handlers | Ручная проверка `if req.Title == ""`, нет схем валидации | | **Hardcoded secrets в dev** | `.env.example`, `docker-compose.yml` | `dev-secret`, `photoplaces_dev` — опасно если попадут в прод | | **Нет тестов** | Везде | 0% покрытие — нельзя рефакторить безопасно | ## Архитектурные решения (Decision Records) - [[decision-jwt-refresh-storage]] — Почему refresh tokens должны храниться в БД - [[decision-rate-limiter-redis]] — Переход на Redis-based rate limiting - [[decision-validation-library]] — Выбор библиотеки валидации (go-playground/validator) - [[decision-test-strategy]] — Стратегия тестирования (unit/integration/e2e) ## Связанные заметки - [[backend-auth-security]] - [[backend-rate-limiting]] - [[backend-validation]] - [[frontend-api-client]] - [[deploy-production-readiness]] - [[database-migrations]] ## Теги #architecture #backend #frontend #security #technical-debt #moc