MOC-backend-patterns.md 2.7 KB

MOC: Backend-паттерны и архитектурные решения

Слоистая архитектура

graph TB
    HTTP[HTTP Request] --> Chi[Chi Router]
    Chi --> MW[Middleware: Auth, CORS, Rate Limit, Logger]
    MW --> H[Handler]
    H --> S[Service: бизнес-логика]
    S --> R[Repository: PostgreSQL/pgx]
    S --> C[Cache: Redis]
    S --> FS[File Storage: MinIO/S3]
    R --> PG[(PostgreSQL + PostGIS)]

Ключевые решения

Паттерн Где реализовано Заметка
Sentinel errors services/*.go [[atomic-sentinel-errors-go]]
Dependency Injection (интерфейсы) services/*.go [[atomic-dependency-inversion-go]]
Graceful shutdown cmd/api/main.go [[atomic-graceful-shutdown]]
Refresh token rotation services/auth.go [[decision-jwt-refresh-storage]]
Rate limiting (Redis) middleware/ratelimit_redis.go [[decision-rate-limiter-redis]]
WebSocket origin check handlers/websocket.go [[atomic-websocket-origin-check]]
Refresh token race fix services/auth.go [[atomic-refresh-token-race-condition]]
SSRF protection via MaxBytesReader handlers/*.go [[atomic-request-body-limit]]

Error handling chain

sequenceDiagram
    Handler->>Service: call
    Service->>Repo: query
    Repo-->>Service: pgx error
    Service-->>Handler: sentinel error (%w)
    Handler->>Handler: errors.Is() -> HTTP status

Request body size limit

Все хендлеры, принимающие JSON, обёрнуты в http.MaxBytesReader(w, r.Body, 1MB). Это предотвращает атаки исчерпания памяти через гигантские payloads.

Удаление неиспользуемых параметров

Убраны appEnv из конструкторов 6 хендлеров, где он не использовался ([[atomic-unused-appenv-parameter]]).

Тестирование

Уровень Инструмент Пример
Unit (сервисы) testing + моки [[atomic-test-patterns-go]]
Integration testcontainers-go [[decision-test-strategy]]
E2E Playwright [[decision-test-strategy]]

Связанные заметки

  • [[architecture-overview]] — общая архитектура
  • [[backend-auth-security]] — JWT и refresh token
  • [[backend-validation]] — валидация через go-playground/validator
  • [[backend-rate-limiting]] — rate limiting
  • [[deploy-production-readiness]] — production readiness

#architecture #backend #golang #MOC #best-practice