architecture-overview.md 2.9 KB

Архитектура 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