Инновационная платформа для поиска работы и подбора персонала с использованием современных технологий и AI.
- Описание
- Технологический стек
- Архитектура проекта
- Требования к системе
- Быстрый старт
- Установка и настройка
- Запуск проекта
- Структура проекта
- Backend разработка
- Frontend разработка
- Работа с базой данных
- API документация
- Тестирование
- Форматирование кода
- Развертывание
- Участие в разработке
- Лицензия
OpWork - это платформа для поиска работы с открытым исходным кодом, которая предоставляет:
- Для соискателей: поиск вакансий, создание резюме, отклик на вакансии
- Для работодателей: публикация вакансий, поиск резюме, управление откликами
- AI-функции: умный поиск, рекомендации, анализ резюме и вакансий
- NestJS - прогрессивный Node.js фреймворк
- Prisma - современная ORM для работы с базой данных
- PostgreSQL - реляционная база данных с поддержкой pgvector
- Fastify - высокопроизводительный HTTP-сервер
- JWT - аутентификация и авторизация
- LangChain - интеграция с AI/LLM моделями
- Swagger - документация API
- Vue 3 - реактивный UI фреймворк
- TypeScript - типизированный JavaScript
- Vite - быстрый сборщик
- Ant Design Vue - библиотека компонентов
- pnpm - менеджер пакетов
- Docker & Docker Compose - контейнеризация
- PM2 - менеджер процессов
- Husky - git hooks
opwork/
├── backend/ # NestJS backend приложение
│ ├── src/ # Исходный код
│ ├── prisma/ # Prisma схема и миграции
│ ├── test/ # E2E тесты
│ └── client/ # Скомпилированный frontend
├── frontend/ # Vue Vben Admin frontend
│ ├── apps/web-antd/ # Основное веб-приложение
│ ├── packages/ # Переиспользуемые пакеты
│ └── internal/ # Внутренние конфигурации
├── prisma-generator-nestjs-dto/ # Генератор DTO из Prisma
├── docker-compose.yml # Docker конфигурация
└── ecosystem.config.json # PM2 конфигурация
Перед началом работы убедитесь, что у вас установлены:
- Node.js >= 18.0 (рекомендуется использовать LTS версию)
- npm >= 9.0
- pnpm >= 8.0
- Docker >= 20.0
- Docker Compose >= 2.0
- Git >= 2.0
Рекомендуемые версии можно установить из файла .nvmrc:
nvm use# 1. Клонируйте репозиторий
git clone git@github.com:site15/opwork.git
cd opwork
# 2. Установите зависимости
npm install
# 3. Запустите проект в режиме разработки
npm run start:devПроект будет доступен по адресу:
- Frontend: http://localhost:5666
- Backend API: http://localhost:3000
- Swagger документация: http://localhost:3000/api
# Установка всех зависимостей проекта
npm installЭта команда автоматически:
- Установит зависимости backend
- Установит зависимости frontend
- Установит зависимости генератора DTO
Создайте файл .env в директории backend/:
cd backend
cp .env.example .envОсновные переменные окружения:
# База данных
DATABASE_URL="postgresql://opwork_user:j4iKD5iZrJSDBIiBb9gYG9MOW46vjgdg@localhost:24432/opwork_db"
# JWT
JWT_SECRET="your-secret-key"
JWT_EXPIRES_IN="7d"
# AI провайдеры (опционально)
OPENAI_API_KEY="your-openai-key"# Запуск всех сервисов (PostgreSQL, Backend, Frontend)
npm run start:dev
# Остановка всех сервисов
npm run stop:devСкрипт start-dev.sh выполняет:
- Запуск PostgreSQL контейнера
- Ожидание готовности базы данных
- Применение миграций Prisma
- Запуск Backend и Frontend через PM2
# Запуск в production режиме
npm run start:prod
# Остановка production сервисов
npm run stop:prod# Только PostgreSQL
docker compose up -d
# Применение миграций
cd backend
./node_modules/.bin/prisma migrate deploy
# Backend
cd backend
npm run start:dev
# Frontend (в отдельном терминале)
cd frontend/apps/web-antd
pnpm devbackend/
├── src/
│ ├── controllers/ # REST контроллеры
│ ├── services/ # Бизнес-логика
│ ├── guards/ # Guards для авторизации
│ ├── decorators/ # Пользовательские декораторы
│ ├── filters/ # Exception filters
│ ├── utils/ # Утилиты
│ ├── types/ # TypeScript типы
│ ├── constants/ # Константы
│ ├── app.module.ts # Главный модуль
│ └── main.ts # Точка входа
├── prisma/
│ ├── schema.prisma # Схема базы данных
│ └── migrations/ # Миграции
└── test/ # E2E тесты
frontend/
├── apps/web-antd/ # Основное приложение
│ ├── src/
│ │ ├── api/ # API вызовы
│ │ ├── views/ # Страницы
│ │ ├── components/ # Компоненты
│ │ ├── router/ # Маршруты
│ │ ├── store/ # State management
│ │ └── locales/ # Локализация
│ └── ...
└── packages/ # Общие пакеты
cd backend
# Генерация Prisma клиента и DTO
npm run generate
# Создание новой миграции
npm run prisma:create <название_миграции>
# Применение всех миграций
npm run prisma:migrate
# Сброс базы данных
npm run prisma:reset
# Запуск в режиме разработки
npm run start:dev
# Запуск с отладкой
npm run start:debug
# Сборка проекта
npm run build
# Запуск production сборки
npm run start:prodПосле изменения схемы Prisma или контроллеров:
# Генерация DTO из Prisma схемы
npm run generate
# Генерация OpenAPI TypeScript клиента
npm run generate:openapi-ts# Создание новой миграции
npm run prisma:create add_user_avatar_field
# Это создаст файл в prisma/migrations/cd frontend
# Установка зависимостей
pnpm install
# Запуск dev сервера
pnpm dev
# Сборка проекта
pnpm build
# Предпросмотр production сборки
pnpm previewcd frontend/apps/web-antd
# Запуск только веб-приложения
pnpm dev
# Сборка
pnpm build# Через psql
psql -h localhost -p 24432 -U opwork_user -d opwork_db
# Или через Docker
docker exec -it opwork_postgres psql -U opwork_user -d opwork_dbcd backend
npx prisma studioОткроется веб-интерфейс для просмотра и редактирования данных: http://localhost:5555
# Просмотр статуса миграций
npx prisma migrate status
# Откат последней миграции
npx prisma migrate reset
# Генерация Prisma клиента
npx prisma generate
# Валидация схемы
npx prisma validateПосле запуска backend, документация доступна по адресу:
http://localhost:3000/api
cd backend
# Спецификация автоматически генерируется при запуске
# Файл: backend/swagger.jsoncd backend
npm run generate:openapi-ts
# Клиент генерируется в директории, указанной в openapi-ts.config.tscd backend
# Unit тесты
npm run test
# Watch режим
npm run test:watch
# E2E тесты
npm run test:e2e
# Покрытие кода
npm run test:cov
# Отладка тестов
npm run test:debug# Один тестовый файл
npm run test:e2e -- test/search-vacancy.e2e-spec.ts
# Тесты по паттерну
npm run test -- --testPathPattern=auth# Форматирование всего кода
npm run format
# Только backend
npm run format:backend
# Только frontend
npm run format:frontend
# Только генератор
npm run format:generator# Backend
cd backend
npm run format
# Frontend
cd frontend
pnpm formatHusky автоматически форматирует код перед коммитом. Убедитесь, что хуки установлены:
npm run prepare # или npx husky install# Backend
cd backend
npm run build
# Frontend
cd frontend/apps/web-antd
pnpm build
# Фронтенд копируется в backend/client/# Запуск production
npm run start:prod
# PM2 управляет процессами
pm2 status
pm2 logs
pm2 restart allФайлы конфигурации:
ecosystem.config.json- developmentecosystem-prod.config.json- production
- Создайте ветку для новой функциональности:
git checkout -b feat/name-of-feature- Внесите изменения и закоммитьте:
git add .
git commit -m "feat: описание новой функциональности"- Отправьте в репозиторий:
git push origin feat/name-of-feature- Создайте Pull Request
Используем Conventional Commits:
feat:- новая функциональностьfix:- исправление ошибокdocs:- документацияstyle:- форматирование (не влияет на код)refactor:- рефакторингtest:- добавление/изменение тестовchore:- обновление зависимостей, конфигурации
Примеры:
git commit -m "feat: add resume search by skills"
git commit -m "fix: correct vacancy pagination"
git commit -m "docs: update API documentation"- Обновите вашу ветку из main:
git fetch origin
git rebase origin/main- Создайте PR на GitHub
- Опишите изменения в PR
- Дождитесь review
# Проверьте, что контейнер запущен
docker ps | grep postgres
# Перезапустите контейнер
docker compose down
docker compose up -d
# Проверьте логи
docker logs opwork_postgres# Сбросить и применить миграции заново
cd backend
npm run prisma:reset
npm run prisma:migrate# Найти процесс на порту 3000
lsof -i :3000
# Остановить процесс
kill -9 <PID>Этот проект лицензирован под MIT License - см. файл LICENSE для деталей.
- Автор: EndyKaufman
- Email: admin@site15.ru
- GitHub: https://github.com/site15/opwork
- Issues: https://github.com/site15/opwork/issues
- NestJS - Backend фреймворк
- Vue Vben Admin - Frontend шаблон
- Prisma - ORM
- LangChain - AI интеграция
Happy Coding! 🎉