A modern, enterprise-grade hiring management system built with NestJS, designed to streamline recruitment processes for organizations of all sizes.
- Organization Management: Multi-tenant architecture supporting multiple organizations
- Database Management: PostgreSQL with Drizzle ORM for type-safe database operations
- Message Queue: RabbitMQ integration for asynchronous task processing
- Caching: Redis for high-performance data caching
- Job Queue: BullMQ for background job processing
- Authentication: Secure password hashing with Argon2
- API Documentation: OpenAPI/Swagger integration
- CQRS Pattern: Command Query Responsibility Segregation for scalable architecture
- Validation: Comprehensive input validation with class-validator and Zod
- Testing: Full test suite with Jest for unit and e2e tests
- NestJS: Enterprise-grade Node.js framework
- TypeScript: Type-safe JavaScript development
- Express: Web application framework
- PostgreSQL: Primary database with pgvector extension
- Drizzle ORM: Type-safe database toolkit
- Drizzle Kit: Database migration and management
- RabbitMQ: Message broker for inter-service communication
- BullMQ: Redis-based queue for background jobs
- Redis: In-memory data store for caching and sessions
- Argon2: Password hashing
- Class Validator: DTO validation
- Zod: Schema validation
- AJV: JSON schema validation
- ESLint: Code linting
- Prettier: Code formatting
- Jest: Testing framework
- SWC: Fast TypeScript/JavaScript compiler
api/
├── src/ # Application source code
│ ├── app.module.ts # Main application module
│ ├── app.controller.ts # Main application controller
│ ├── app.service.ts # Main application service
│ └── main.ts # Application entry point
├── libs/ # Shared libraries
│ └── db/ # Database library
│ └── src/
│ └── postgres/ # PostgreSQL configurations
│ ├── schema/ # Database schemas
│ ├── migrations/ # Database migrations
│ └── seeds/ # Database seed data
├── docker/ # Docker configurations
│ ├── rabbitmq/ # RabbitMQ setup
│ └── vault/ # HashiCorp Vault setup
├── test/ # Test files
└── docker-compose.yml # Multi-service Docker setup
- Node.js 18+ and npm
- Docker and Docker Compose
- PostgreSQL 16+
- Redis 7+
- RabbitMQ 3.13+
# Clone the repository
git clone <repository-url>
cd api
# Install dependencies
npm install# Start services with Docker Compose
docker-compose up -d
# Run database migrations
npm run db:migration:run
# Seed the database (optional)
npm run db:seed# Start in development mode
npm run start:dev
# Or start in debug mode
npm run start:debugThe API will be available at http://localhost:3000
npm run start:dev- Start in development mode with hot reloadnpm run start:debug- Start in debug modenpm run start:prod- Start in production mode
npm run db:studio- Open Drizzle Studio for database managementnpm run db:migration:generate- Generate new migrationnpm run db:migration:run- Run pending migrationsnpm run db:seed- Seed database with initial data
npm run lint- Run ESLint and TypeScript checksnpm run lint:eslint- Run ESLint onlynpm run lint:types- Run TypeScript type checkingnpm run format- Format code with Prettier
npm run test- Run unit testsnpm run test:watch- Run tests in watch modenpm run test:cov- Run tests with coverage reportnpm run test:e2e- Run end-to-end tests
npm run build- Build the application for production
- API Server: Main NestJS application (Port 3000)
- PostgreSQL: Database server (Port 5433)
- Redis: Cache and session store (Port 6379)
- RabbitMQ: Message broker (Port 5672, Management UI: 15672)
- MinIO: Object storage (Port 9000, Console: 9001)
- API Documentation:
http://localhost:3000/api/docs - RabbitMQ Management:
http://localhost:15672 - MinIO Console:
http://localhost:9001 - Drizzle Studio:
npm run db:studio
The application follows enterprise architecture patterns:
- CQRS: Separates read and write operations for better scalability
- Multi-tenant: Supports multiple organizations with data isolation
- Microservices Ready: Designed for easy service decomposition
- Event-Driven: Uses message queues for asynchronous processing
- Type-Safe: Full TypeScript coverage with strict type checking
This project follows strict development conventions outlined in CLAUDE.md:
- TypeScript: Explicit typing required for all functions and variables
- File Organization: Separate files for entities, interfaces, enums, and types
- Commit Messages: Conventional commits with type, scope, and description
- Code Style: ESLint and Prettier configurations enforced
- Security: Secure authentication, input validation, and error handling
- Follow the development rules in
CLAUDE.md - Run tests before submitting:
npm run test - Ensure code quality:
npm run lint - Use conventional commit messages
- Include appropriate tests for new features
This project is licensed under the UNLICENSED license - see the package.json file for details.
For questions and support, please refer to the project documentation or contact the development team.