Aucune description

neyrogovnarik 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
.github 8ac67d5043 P0: Security & production readiness il y a 1 mois
backend 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
deploy 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
frontend 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
obsidian_data 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
.editorconfig 375ea1940b Initial commit: PhotoPlaces MVP il y a 2 mois
.env.example 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
.gitignore 8ac67d5043 P0: Security & production readiness il y a 1 mois
CONTRIBUTING.md 195ecabd23 Полная документация проекта + фикс бага callerInfo il y a 1 mois
FINDINGS.md 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois
Makefile 8ac67d5043 P0: Security & production readiness il y a 1 mois
README.md 3b2601cb81 add README.md with full setup instructions il y a 2 mois
docker-compose.yml 4fdc008203 Production readiness: sentinel errors, WebSocket CORS, Docker secrets, тесты, ErrorBoundary, Obsidian Zettelkasten, CSP, DI il y a 1 mois

README.md

PhotoPlaces

Сервис онлайн-карты с отметками мест для фотосъёмки, аренды фотостудий и найма фотографов.

Стек

Компонент Технология
Фронтенд Next.js 14, React 18, TypeScript, Tailwind CSS
Бэкенд Go 1.22, Chi router, pgx
База данных PostgreSQL 16 + PostGIS
Кеш Redis 7
Файлы MinIO (S3-совместимое хранилище)
Аутентификация JWT (access + refresh токены)
Инфраструктура Docker, docker-compose

Быстрый старт

1. Клонировать и перейти в проект

git clone http://192.168.88.96:10880/foxtime/photoplaces.git
cd photoplaces

2. Запустить инфраструктуру (БД, Redis, MinIO)

docker compose up -d postgres redis minio

3. Инициализировать переменные окружения

cp backend/.env.example backend/.env
cp frontend/.env.local.example frontend/.env.local

4. Запустить бэкенд

cd backend
go run ./cmd/api

Бэкенд будет доступен на http://localhost:8080/api/v1

5. Запустить фронтенд (в другом терминале)

cd frontend
npm install
npm run dev

Фронтенд будет доступен на http://localhost:3000

Либо через Make

make dev    # docker compose + go run + npm run dev одной командой

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

photoplaces/
├── backend/
│   ├── cmd/api/main.go          # точка входа API
│   ├── internal/
│   │   ├── config/              # загрузка конфигурации из env
│   │   ├── handlers/            # HTTP-обработчики (auth, places, services...)
│   │   ├── middleware/          # JWT-аутентификация, rate limiter
│   │   ├── models/              # структуры данных (User, Place, Booking…)
│   │   ├── repository/          # работа с PostgreSQL
│   │   └── services/            # бизнес-логика
│   ├── migrations/              # SQL-миграции (golang-migrate)
│   └── docs/                    # документация
│       ├── SPEC.md              # техническое задание
│       ├── API_CONTRACT.md      # контракт API
│       ├── DB_SCHEMA.md         # схема базы данных
│       ├── MAP_PROVIDERS.md     # провайдеры карт
│       └── PAYMENT_INTEGRATION.md
├── frontend/
│   ├── src/
│   │   ├── app/                 # страницы и layout (Next.js App Router)
│   │   ├── components/          # React-компоненты
│   │   ├── hooks/               # кастомные хуки (useAuth)
│   │   ├── lib/                 # утилиты (api, map)
│   │   ├── styles/              # глобальные стили
│   │   └── types/               # TypeScript-типы
│   └── public/
├── deploy/                      # продакшен-окружение
│   ├── docker-compose.prod.yml
│   ├── env.prod
│   ├── deploy.sh
│   └── setup.sh
├── docker-compose.yml           # локальное окружение
└── Makefile                     # вспомогательные команды

Доступные команды

make dev      # локальная разработка
make prod     # продакшен-сборка
make logs     # логи продакшена
make stop     # остановка контейнеров
make clean    # остановка + удаление volume
make ps       # статус контейнеров

API

Документация: backend/docs/API_CONTRACT.md

Базовый URL: http://localhost:8080/api/v1

Основные эндпоинты

Метод Путь Аутентификация
POST /auth/register
POST /auth/login
POST /auth/refresh
POST /auth/logout +
GET /auth/me +
GET /places
GET /places/:id
POST /places +
PATCH /places/:id +
DELETE /places/:id +
POST /places/:id/moderate moderator+
GET /tags
GET /features
GET /services
POST /services +
PATCH /services/:id +
DELETE /services/:id +
POST /bookings +
GET /bookings/me +
PATCH /bookings/:id/cancel +
GET /reviews
POST /reviews +
GET /users/:id
PATCH /users/me +
GET /admin/users moderator+
PATCH /admin/users/:id moderator+
POST /upload/presigned-url +
GET /ws/visitors — (WebSocket)

Переменные окружения

Бэкенд (backend/.env)

Переменная По умолчанию Обязательная
APP_ENV development
SERVER_PORT 8080
DATABASE_URL postgres://photoplaces:photoplaces_dev@localhost:5432/photoplaces?sslmode=disable да
REDIS_URL redis://localhost:6379/0 да
S3_ENDPOINT http://localhost:9000 да
S3_PUBLIC_ENDPOINT http://localhost:9000 да
S3_ACCESS_KEY photoplaces да
S3_SECRET_KEY photoplaces_dev да
S3_BUCKET photoplaces да
JWT_SECRET dev-secret да
JWT_REFRESH_SECRET dev-refresh-secret да
ALLOWED_ORIGINS http://localhost:3000

Фронтенд (frontend/.env.local)

Переменная По умолчанию
NEXT_PUBLIC_API_URL http://localhost:8080/api/v1
NEXT_PUBLIC_MAP_PROVIDER yandex
NEXT_PUBLIC_YANDEX_MAPS_API_KEY (пусто)

Миграции

Миграции накатываются автоматически в продакшене через migrate/migrate (см. deploy/docker-compose.prod.yml). Локально можно накатить вручную:

docker compose run --rm migrations

Файлы миграций: backend/migrations/

Роли пользователей

Роль Описание
superadmin Полный доступ
moderator Модерация мест, управление пользователями
landlord Добавление и управление своими студиями
executor Добавление услуг фото/видеосъёмки
customer Добавление мест для съёмки

Безопасность

  • JWT-аутентификация: access token (15 мин) + refresh token (30 дней)
  • Rate limiting: in-memory, 60 запр/мин на IP
  • CORS: настроен для разрешённых доменов
  • Параметризованные SQL-запросы (pgx)
  • Валидация загружаемых файлов (тип, размер)
  • Мягкое удаление (deleted_at)
  • Проверка владельца ресурса при изменении/удалении