feat: Freelancer Match — AI-матчинг, escrow, milestones, portfolio, skill-tests, verification
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
# Freelancer Match — Умная площадка для фрилансеров
|
||||
|
||||
Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.
|
||||
|
||||
## 🚀 Быстрый старт
|
||||
|
||||
### Требования
|
||||
- Docker + Docker Compose
|
||||
- Python 3.12+ (для локальной разработки)
|
||||
- Node.js 20+ (для фронтенда)
|
||||
- PostgreSQL 16+
|
||||
- Redis 7+
|
||||
|
||||
### Запуск через Docker Compose
|
||||
|
||||
```bash
|
||||
# 1. Скопируйте .env.example в .env и заполните переменные
|
||||
cp backend/.env.example backend/.env
|
||||
|
||||
# 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
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
uvicorn app.main:app --reload --port 8000
|
||||
```
|
||||
|
||||
#### Frontend
|
||||
```bash
|
||||
cd frontend
|
||||
npm ci
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## 🔑 Настройка переменных окружения
|
||||
|
||||
Скопируйте `backend/.env.example` в `backend/.env` и заполните значения.
|
||||
|
||||
### Обязательные (без них не запустится)
|
||||
|
||||
| Переменная | Описание | Где взять |
|
||||
|------------|----------|-----------|
|
||||
| `DATABASE_URL` | Подключение к PostgreSQL | Создайте БД: `createdb freelancer_match` |
|
||||
| `REDIS_URL` | Подключение к Redis | По умолчанию: `redis://localhost:6379/0` |
|
||||
| `SECRET_KEY` | Ключ для JWT токенов | Сгенерируйте: `openssl rand -hex 32` |
|
||||
|
||||
### Опциональные (но нужны для полноценной работы)
|
||||
|
||||
| Переменная | Описание | Где взять |
|
||||
|------------|----------|-----------|
|
||||
| `OPENAI_API_KEY` | API ключ OpenAI для AI-матчинга | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) |
|
||||
| `STRIPE_SECRET_KEY` | Ключ Stripe для escrow | [dashboard.stripe.com/test/keys](https://dashboard.stripe.com/test/keys) (Test mode) |
|
||||
| `STRIPE_WEBHOOK_SECRET` | Секрет для webhook Stripe | Настройте в Stripe Dashboard → Webhooks |
|
||||
|
||||
### Email (опционально)
|
||||
|
||||
| Переменная | Описание | Где взять |
|
||||
|------------|----------|-----------|
|
||||
| `SMTP_USER` | Email для отправки писем | Ваш email (Gmail, Mail.ru и т.д.) |
|
||||
| `SMTP_PASSWORD` | Пароль SMTP | Для Gmail — используйте App Passwords (не обычный пароль) |
|
||||
|
||||
### OAuth (опционально, если хотите вход через Google/GitHub)
|
||||
|
||||
| Переменная | Описание | Где взять |
|
||||
|------------|----------|-----------|
|
||||
| `GOOGLE_CLIENT_ID` | OAuth client ID для входа через Google | [Google Cloud Console](https://console.cloud.google.com/apis/credentials) |
|
||||
| `GITHUB_CLIENT_ID` + `GITHUB_CLIENT_SECRET` | OAuth для GitHub | [GitHub Developer Settings → OAuth Apps](https://github.com/settings/developers) |
|
||||
|
||||
## 📁 Структура проекта
|
||||
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
## 🧪 Тесты
|
||||
|
||||
```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` | Список проектов |
|
||||
| POST | `/api/projects` | Создать проект |
|
||||
| POST | `/api/ai/match-project` | AI-подбор фрилансеров |
|
||||
| POST | `/api/escrow/create` | Создать escrow-транзакцию |
|
||||
|
||||
## 🚀 Деплой на сервер
|
||||
|
||||
```bash
|
||||
# 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
|
||||
Reference in New Issue
Block a user