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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user