{"id":22521744,"url":"https://github.com/al0olo/hiring-platform-api","last_synced_at":"2025-03-28T03:24:59.225Z","repository":{"id":264832550,"uuid":"894409003","full_name":"Al0olo/hiring-platform-api","owner":"Al0olo","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-09T09:30:26.000Z","size":115,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-02T04:41:39.365Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Al0olo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-26T10:01:02.000Z","updated_at":"2024-12-09T09:30:30.000Z","dependencies_parsed_at":"2024-11-26T15:01:17.925Z","dependency_job_id":null,"html_url":"https://github.com/Al0olo/hiring-platform-api","commit_stats":null,"previous_names":["al0olo/hiring-platform-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Al0olo%2Fhiring-platform-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Al0olo%2Fhiring-platform-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Al0olo%2Fhiring-platform-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Al0olo%2Fhiring-platform-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Al0olo","download_url":"https://codeload.github.com/Al0olo/hiring-platform-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245962921,"owners_count":20701209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-07T05:12:47.272Z","updated_at":"2025-03-28T03:24:59.195Z","avatar_url":"https://github.com/Al0olo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hiring System Backend API\n\nA robust NestJS-based RESTful API for managing user registrations. Built with TypeScript, PostgreSQL, and modern development practices.\n\n## Features\n\n### Core Functionality\n- RESTful API endpoints for user management\n- PostgreSQL database integration\n- Data validation and sanitization\n- Swagger API documentation\n- Error handling and logging\n- Database migrations\n- Input validation with class-validator\n- API rate limiting\n\n### Technical Features\n- TypeORM for database management\n- Repository pattern implementation\n- Environment-based configuration\n- Custom exception filters\n- Request validation pipes\n- API versioning\n- CORS configuration\n- Production-ready setup\n\n## Tech Stack\n\n- **Framework:** NestJS\n- **Language:** TypeScript\n- **Database:** PostgreSQL\n- **ORM:** TypeORM\n- **API Documentation:** Swagger/OpenAPI\n- **Validation:** class-validator \u0026 class-transformer\n- **Testing:** Jest\n- **API Testing:** SuperTest\n- **Linting:** ESLint\n- **Code Formatting:** Prettier\n\n## Prerequisites\n\nBefore you begin, ensure you have:\n- Node.js (version 18 or later)\n- npm (version 8 or later)\n- PostgreSQL (version 12 or later)\n\n## Installation\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/Al0olo/hiring-platform-api\ncd hiring-platform-api\n```\n\n2. Install dependencies:\n```bash\nnpm install\n```\n\n3. Create a `.env` file in the root directory:\n```env\n# Application\nPORT=3001\nNODE_ENV=development\n\n# Database\nDB_HOST=localhost\nDB_PORT=5432\nDB_USERNAME=postgres\nDB_PASSWORD=your_password\nDB_NAME=users_db\n```\n\n4. Start the development server:\n```bash\nnpm run start:dev\n```\n\nThe API will be available at `http://localhost:3001`\nSwagger documentation will be available at `http://localhost:3001/api`\n\n## Project Structure\n\n```\nsrc/\n├── config/\n│   ├── database.config.ts\n│   ├── swagger.config.ts\n│   └── validation.config.ts\n├── users/\n│   ├── dto/\n│   │   ├── create-user.dto.ts\n│   │   └── update-user.dto.ts\n│   ├── entities/\n│   │   └── user.entity.ts\n│   ├── users.controller.ts\n│   ├── users.service.ts\n│   └── users.module.ts\n├── migrations/\n│   └── initial-migration.ts\n├── app.module.ts\n└── main.ts\n```\n\n## Available Scripts\n\n```bash\n# Development\nnpm run start           # Start application\nnpm run start:dev      # Start application in watch mode\nnpm run start:debug    # Start application in debug mode\n\n# Production\nnpm run build          # Build application\nnpm run start:prod     # Start production application\n\n# Database\nnpm run migration:generate  # Generate new migration\nnpm run migration:run      # Run migrations\nnpm run migration:revert   # Revert last migration\n\n# Testing\nnpm run test          # Run unit tests\nnpm run test:e2e     # Run end-to-end tests\nnpm run test:cov     # Generate test coverage report\n\n# Code Quality\nnpm run lint         # Run ESLint\nnpm run format       # Format code with Prettier\n```\n\n## Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| PORT | API port | 3001 |\n| NODE_ENV | Environment | development |\n| DB_HOST | Database host | localhost |\n| DB_PORT | Database port | 5432 |\n| DB_USERNAME | Database username | postgres |\n| DB_PASSWORD | Database password | - |\n| DB_NAME | Database name | users_db |\n\n## API Documentation\n\n### Users Endpoints\n\n#### Get All Users\n```http\nGET /users\n```\n\n#### Create User\n```http\nPOST /users\n```\nRequest body:\n```json\n{\n  \"fullName\": \"string\",\n  \"dateOfBirth\": \"string\",\n  \"preferredLocation\": \"string\",\n  \"programmingSkills\": \"string[]\",\n  \"resumeSummary\": \"string\"\n}\n```\n\n#### Get User by ID\n```http\nGET /users/{id}\n```\n\n### API Validation Rules\n\n- **fullName**: Required, max length 50 characters\n- **dateOfBirth**: Required, valid date format\n- **preferredLocation**: Required, must be one of predefined locations\n- **programmingSkills**: Required, array of strings\n- **resumeSummary**: Required, max length 250 characters\n\n## Database Schema\n\n### Users Table\n```sql\nCREATE TABLE users (\n  id SERIAL PRIMARY KEY,\n  fullName VARCHAR(50) NOT NULL,\n  dateOfBirth DATE NOT NULL,\n  preferredLocation VARCHAR(255) NOT NULL,\n  programmingSkills TEXT[] NOT NULL,\n  resumeSummary TEXT NOT NULL,\n  createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n```\n\n## Error Handling\n\nThe API includes standardized error responses:\n\n```json\n{\n  \"statusCode\": number,\n  \"message\": string,\n  \"error\": string,\n  \"timestamp\": string,\n  \"path\": string\n}\n```\n\n## Testing\n\n### Unit Tests\n```bash\nnpm run test\n```\n\n### E2E Tests\n```bash\nnpm run test:e2e\n```\n\n### Test Coverage\n```bash\nnpm run test:cov\n```\n\n## Production Deployment\n\n1. Build the application:\n```bash\nnpm run build\n```\n\n2. Set production environment variables\n3. Run database migrations:\n```bash\nnpm run migration:run\n```\n\n4. Start the production server:\n```bash\nnpm run start:prod\n```\n\n## Security Features\n\n- Helmet for HTTP headers security\n- Rate limiting\n- CORS configuration\n- Input validation\n- Query injection prevention\n- Sanitized error responses\n\n## Development Guidelines\n\n### Code Style\n- Follow NestJS best practices\n- Use TypeScript decorators appropriately\n- Implement proper error handling\n- Write comprehensive tests\n- Document all public methods\n- Use dependency injection\n\n## Troubleshooting\n\n### Common Issues\n\n1. Database Connection\n```bash\n# Check database connection\nnpm run typeorm query \"SELECT NOW()\"\n```\n\n2. Migration Issues\n```bash\n# Reset migrations\nnpm run migration:revert\nnpm run migration:run\n```\n\n3. Port Already in Use\n```bash\n# Find and kill process\nlsof -i :3001\nkill -9 PID\n```\n\n## Performance Optimization\n\n- Database indexing\n- Query optimization\n- Response caching\n- Rate limiting\n- Connection pooling\n\n## Monitoring\n\n- Winston logger implementation\n- Error tracking\n- Performance monitoring\n- Database query logging\n- API endpoint metrics\n\n## Acknowledgments\n\n- [NestJS](https://nestjs.com/)\n- [TypeORM](https://typeorm.io/)\n- [PostgreSQL](https://www.postgresql.org/)\n- [Swagger](https://swagger.io/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fal0olo%2Fhiring-platform-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fal0olo%2Fhiring-platform-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fal0olo%2Fhiring-platform-api/lists"}