| Компонент | Технология |
|---|---|
| Фронтенд | Next.js 14, React 18, TypeScript, Tailwind CSS |
| Бэкенд | Go 1.22, Chi router, pgx v5 |
| База данных | PostgreSQL 16 + PostGIS |
| Кеш | Redis 7 |
| Файлы | MinIO (S3-совместимое) |
| Аутентификация | JWT (access + refresh токены) |
| Инфраструктура | Docker, docker-compose |
git clone http://192.168.88.96:10880/foxtime/photoplaces.git
cd photoplaces
# 1. Поднять инфраструктуру (БД, Redis, MinIO)
docker compose up -d postgres redis minio
# 2. Переменные окружения
cp backend/.env.example backend/.env
cp frontend/.env.local.example frontend/.env.local
# 3. Бэкенд (в терминале 1)
cd backend && go run ./cmd/api
# 4. Фронтенд (в терминале 2)
cd frontend && npm install && npm run dev
feature/краткое-описание, fix/краткое-описаниеgo vet ./..., npm run lint (бэкенд/фронтенд)deploy/env.prod (в .gitignore)backend/.env, frontend/.env.local# Локальная сборка (проверка Dockerfile)
docker compose build backend
docker compose build frontend
# Полный продакшен
bash deploy/deploy.sh
make test-backend # go test ./... -v -race
make test-frontend # npm run test (когда появится)
Тестов пока нет — см. obsidian_data/Photoplaces_data/decision-test-strategy.md.
make migrate # накатить
make migrate-down # откатить последнюю
Новая миграция: migrate create -ext sql -dir backend/migrations -seq название.
backend/
cmd/api/main.go # точка входа
internal/
config/ # загрузка из env / _FILE (Docker secrets)
log/ # структурированное логирование (slog)
models/ # структуры данных (User, Place, Booking...)
repository/ # слой доступа к БД (pgx)
services/ # бизнес-логика
handlers/ # HTTP-обработчики (Chi router)
middleware/ # JWT, rate limiter, CORS
validator/ # кастомные валидаторы (go-playground)
migrations/ # SQL-миграции
docs/ # API контракт, схема БД, ТЗ
frontend/
src/
app/ # Next.js App Router
admin/ # панель модератора
auth/ # логин/регистрация
places/add/ # добавление места
services/add/ # добавление услуги
studios/add/ # добавление студии
components/ # Header, MapView, PlaceForm
hooks/ # useAuth (AuthProvider)
lib/ # api.ts (клиент), map.ts (Яндекс.Карты)
types/ # TypeScript-интерфейсы
// Package xxx) — обязательно для каждого пакета/** ... */) перед каждым экспортомobsidian_data/Photoplaces_data/)err должны быть обработаны)_FILE суффикс для Docker secrets в конфигах