|
|
1 月之前 | |
|---|---|---|
| .github | 2 月之前 | |
| backend | 1 月之前 | |
| deploy | 1 月之前 | |
| frontend | 1 月之前 | |
| obsidian_data | 1 月之前 | |
| .editorconfig | 2 月之前 | |
| .gitignore | 2 月之前 | |
| CONTRIBUTING.md | 1 月之前 | |
| FINDINGS.md | 1 月之前 | |
| Makefile | 2 月之前 | |
| README.md | 2 月之前 | |
| docker-compose.yml | 1 月之前 |
Сервис онлайн-карты с отметками мест для фотосъёмки, аренды фотостудий и найма фотографов.
| Компонент | Технология |
|---|---|
| Фронтенд | 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 |
git clone http://192.168.88.96:10880/foxtime/photoplaces.git
cd photoplaces
docker compose up -d postgres redis minio
cp backend/.env.example backend/.env
cp frontend/.env.local.example frontend/.env.local
cd backend
go run ./cmd/api
Бэкенд будет доступен на http://localhost:8080/api/v1
cd frontend
npm install
npm run dev
Фронтенд будет доступен на http://localhost:3000
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 # статус контейнеров
Документация: 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 | Добавление мест для съёмки |