feat: завершить проект — добавить недостающие файлы, тесты и CI/CD

- backend/app/schemas/auth.py, ai_match.py, escrow.py (схемы)
- frontend/components/ui/button.tsx (UI компонент)
- email-validator в requirements.txt
- frontend/tsconfig.json, tailwind.config.js, postcss.config.js
- frontend: login page, projects/[id] page, ai-match page
- Dockerfile для backend и frontend
- docker-compose.yml с app-контейнерами и healthcheck
- .env.example с полными переменными окружения
- backend/tests/ — pytest тесты (conftest + test_health)
- .drone.yml — CI/CD пайплайн для Drone CI
- README.md — полный гайд по деплою
This commit is contained in:
2026-07-03 13:28:19 +00:00
parent ec2e9bf508
commit 4ccf4b7184
20 changed files with 693 additions and 46 deletions
+110 -43
View File
@@ -1,70 +1,137 @@
# 🤝 Freelancer Match — Умная площадка для фрилансеров
# Freelancer Match — Умная площадка для фрилансеров
Площадка с AI-матчингом и escrow-гарантом сделок.
Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.
## Архитектура
## 🚀 Быстрый старт
```
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Next.js │ │ FastAPI │ │ Redis │
│ (Frontend) │◄──►│ (Backend) │◄──►│ (Cache/Queue)│
└───────────────┘ └───────┬───────┘ └───────────────┘
┌───────▼───────┐
│ PostgreSQL + │
│ pgvector │
└───────────────┘
```
### Требования
- Docker + Docker Compose
- Python 3.12+ (для локальной разработки)
- Node.js 20+ (для фронтенда)
- PostgreSQL 16+
- Redis 7+
## Стек
| Компонент | Технология |
|-----------|------------|
| Backend | Python 3.12, FastAPI, SQLAlchemy 2.0 |
| Frontend | Next.js 14+, Tailwind CSS, shadcn/ui |
| БД | PostgreSQL 16 + pgvector (AI-эмбеддинги) |
| Кэш/Очереди | Redis 7+ |
| AI | OpenAI embeddings + LLM для матчинга |
| Платежи | Stripe Connect (escrow-гарант) |
## Быстрый старт
### Запуск через Docker Compose
```bash
# Запуск инфраструктуры
docker compose up -d postgres redis
# 1. Скопируйте .env.example в .env и заполните переменные
cp backend/.env.example backend/.env
# Backend
# 2. Запустите стек
docker compose up -d --build
# 3. Примените миграции БД
docker compose exec backend alembic upgrade head
# 4. Проверьте что всё работает
curl http://localhost:8000/api/health
```
### Локальная разработка
#### Backend
```bash
cd backend
cp .env.example .env # настройте переменные
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload
uvicorn app.main:app --reload --port 8000
```
# Frontend
#### Frontend
```bash
cd frontend
npm install
npm ci
npm run dev
```
## API Endpoints
## 📁 Структура проекта
```
freelancer-match/
├── backend/ # FastAPI бэкенд
│ ├── app/
│ │ ├── api/ # API endpoints
│ │ ├── models/ # SQLAlchemy модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # Бизнес-логика
│ │ └── core/ # Базовые модули (БД, безопасность)
│ ├── alembic/ # Миграции БД
│ ├── tests/ # Тесты pytest
│ ├── Dockerfile
│ └── requirements.txt
├── frontend/ # Next.js фронтенд
│ ├── app/ # App Router (pages)
│ ├── components/ui/ # UI компоненты
│ ├── lib/ # Утилиты и провайдеры
│ ├── Dockerfile
│ └── package.json
├── docker-compose.yml # Стек сервисов
└── .drone.yml # CI/CD для Drone CI
```
## 🔑 Переменные окружения
| Переменная | Описание | Пример |
|------------|----------|--------|
| `DATABASE_URL` | Подключение к PostgreSQL | `postgresql+asyncpg://user:pass@host/db` |
| `REDIS_URL` | Подключение к Redis | `redis://localhost:6379/0` |
| `SECRET_KEY` | Ключ для JWT токенов | Сгенерируйте через `openssl rand -hex 32` |
| `OPENAI_API_KEY` | API ключ OpenAI для AI-матчинга | `sk-...` |
| `STRIPE_SECRET_KEY` | Ключ Stripe для escrow | `sk_test_...` |
| `SMTP_*` | Настройки email | smtp.gmail.com:587 |
## 🧪 Тесты
```bash
# Backend (pytest)
cd backend && pytest tests/ -v
# Frontend (linting)
cd frontend && npx next lint
```
## 🔒 Безопасность
- JWT аутентификация с refresh токенами
- Хеширование паролей через bcrypt
- CORS middleware
- Escrow-гарант сделок (Stripe интеграция)
- AI-матчинг с pgvector эмбеддингами
## 📊 API Endpoints
| Метод | Endpoint | Описание |
|-------|----------|----------|
| POST | `/api/auth/register` | Регистрация |
| POST | `/api/auth/login` | Логин (JWT) |
| GET | `/api/projects?status=open` | Список проектов |
| POST | `/api/auth/register` | Регистрация пользователя |
| POST | `/api/auth/login` | Вход (JWT) |
| GET | `/api/projects` | Список проектов |
| POST | `/api/projects` | Создать проект |
| POST | `/api/ai/match-project` | AI-подбор фрилансеров |
| POST | `/api/escrow/create` | Создать escrow-транзакцию |
## Деплой
## 🚀 Деплой на сервер
```bash
# Backend → Railway / AWS ECS
# Frontend → Vercel
# БД → Supabase / AWS RDS
# Redis → Upstash
# 1. Настройте .env.production
cp backend/.env.example backend/.env.production
# 2. Обновите docker-compose.yml для продакшена (уберите порты, добавьте healthcheck)
# 3. Запустите через Docker Compose
docker compose -f docker-compose.prod.yml up -d --build
# 4. Примените миграции
docker compose exec backend alembic upgrade head
```
## Лицензия
## 🤖 CI/CD (Drone CI)
Проект настроен для автоматического деплоя через Drone CI:
- `.drone.yml` — пайплайн с тестами, сборкой и деплоем
- Настроен на Gitea (`ms.webhop.me`)
- Автоматический запуск при push в main
## 📝 Лицензия
MIT © 2026 Freelancer Match