{"id":27937204,"url":"https://github.com/masb0ymas/express-api-typeorm","last_synced_at":"2026-02-27T15:01:21.229Z","repository":{"id":37017641,"uuid":"404384456","full_name":"masb0ymas/express-api-typeorm","owner":"masb0ymas","description":"expresso-api with TypeORM","archived":false,"fork":false,"pushed_at":"2026-02-07T11:56:12.000Z","size":5069,"stargazers_count":8,"open_issues_count":8,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-07T20:24:35.780Z","etag":null,"topics":["aws-s3","expressjs","google-cloud-storage","ioredis","minio","nodejs","nodemailer","repository-pattern","rest-api","typeorm"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/masb0ymas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"masb0ymas","patreon":"masb0ymas","open_collective":null,"ko_fi":"masb0ymas","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-09-08T14:43:27.000Z","updated_at":"2026-01-26T10:25:15.000Z","dependencies_parsed_at":"2023-10-27T16:28:53.865Z","dependency_job_id":"c6f7eb2f-55cc-4883-8324-5d4cdb4595e8","html_url":"https://github.com/masb0ymas/express-api-typeorm","commit_stats":null,"previous_names":["masb0ymas/express-api-typeorm"],"tags_count":43,"template":true,"template_full_name":null,"purl":"pkg:github/masb0ymas/express-api-typeorm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masb0ymas%2Fexpress-api-typeorm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masb0ymas%2Fexpress-api-typeorm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masb0ymas%2Fexpress-api-typeorm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masb0ymas%2Fexpress-api-typeorm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/masb0ymas","download_url":"https://codeload.github.com/masb0ymas/express-api-typeorm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masb0ymas%2Fexpress-api-typeorm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29901116,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T14:46:13.553Z","status":"ssl_error","status_checked_at":"2026-02-27T14:46:10.522Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["aws-s3","expressjs","google-cloud-storage","ioredis","minio","nodejs","nodemailer","repository-pattern","rest-api","typeorm"],"created_at":"2025-05-07T07:11:34.366Z","updated_at":"2026-02-27T15:01:21.222Z","avatar_url":"https://github.com/masb0ymas.png","language":"TypeScript","readme":"# Express API with TypeORM\n\n[![Documentation](https://img.shields.io/badge/Documentation-yes-brightgreen.svg)](https://github.com/masb0ymas/express-api-typeorm#readme)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/masb0ymas/express-api-typeorm/graphs/commit-activity)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/masb0ymas/express-api-typeorm/blob/master/LICENSE.md)\n[![Version](https://img.shields.io/badge/Version-6.0.0--3-blue.svg)](https://github.com/masb0ymas/express-api-typeorm/releases)\n[![Express](https://img.shields.io/badge/Express-4.21.2-informational?logo=express\u0026color=22272E)](https://expressjs.com/)\n\n![Node](https://badges.aleen42.com/src/node.svg)\n![Eslint](https://badges.aleen42.com/src/eslint.svg)\n![TypeScript](https://badges.aleen42.com/src/typescript.svg)\n![Docker](https://badges.aleen42.com/src/docker.svg)\n\nA production-ready Express API server built with TypeScript and TypeORM, featuring comprehensive authentication, authorization, file management, and multi-cloud storage integration.\n\nBase API using [express-api](https://github.com/masb0ymas/express-api)\n\n## Table of Contents\n\n- [Features](#features)\n- [Tech Stack](#tech-stack)\n- [Architecture](#architecture)\n- [Prerequisites](#prerequisites)\n- [Getting Started](#getting-started)\n- [Environment Variables](#environment-variables)\n- [Database Setup](#database-setup)\n- [API Documentation](#api-documentation)\n- [Project Structure](#project-structure)\n- [Development](#development)\n- [Production Deployment](#production-deployment)\n- [Scripts Reference](#scripts-reference)\n- [Testing](#testing)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Features\n\n### Core Functionality\n- **Authentication \u0026 Authorization**\n  - User registration with email verification\n  - JWT-based authentication\n  - Role-based access control (RBAC)\n  - Session management with device tracking\n  - Secure password hashing with Argon2\n\n- **User Management**\n  - Complete CRUD operations\n  - Profile management\n  - Soft delete support\n  - Role assignment (User, Admin, Super Admin)\n\n- **File Upload Management**\n  - Multi-cloud storage support (AWS S3, Google Cloud Storage, MinIO)\n  - Automatic signed URL generation\n  - File metadata tracking\n  - Scheduled URL refresh jobs\n\n- **Session Management**\n  - Multi-device login support\n  - Track user sessions with device and location info\n  - Automatic session cleanup via scheduled jobs\n\n- **Email Notifications**\n  - User registration verification emails\n  - SMTP integration with Nodemailer\n  - Handlebars email templates\n\n### Developer Experience\n- **Type Safety** - Full TypeScript support with strict typing\n- **API Documentation** - Interactive Swagger/OpenAPI 3.0 documentation\n- **Code Quality** - ESLint + Prettier with pre-configured rules\n- **Logging** - Structured logging with Pino\n- **Error Handling** - Centralized error handling with custom error classes\n- **Query Builder** - Advanced filtering, sorting, and pagination\n- **Job Scheduling** - Background jobs with node-cron\n- **Security** - Helmet, HPP, CORS, Rate limiting\n- **Docker Support** - Production-ready Dockerfile\n\n## Tech Stack\n\n### Core Technologies\n- **[Node.js](https://nodejs.org/)** `\u003e= 20.x` - JavaScript runtime\n- **[TypeScript](https://www.typescriptlang.org/)** `5.9+` - Type-safe JavaScript\n- **[Express.js](https://expressjs.com/)** `4.21.x` - Web framework\n- **[TypeORM](https://typeorm.io/)** `0.3.27` - ORM for TypeScript\n- **[PostgreSQL](https://www.postgresql.org/)** - Primary database\n\n### Authentication \u0026 Security\n- **[jsonwebtoken](https://github.com/auth0/node-jsonwebtoken)** `9.0.2` - JWT implementation\n- **[argon2](https://github.com/ranisalt/node-argon2)** `0.41.1` - Password hashing\n- **[helmet](https://helmetjs.github.io/)** `8.1.0` - Security headers\n- **[express-rate-limit](https://github.com/express-rate-limit/express-rate-limit)** `8.1.0` - Rate limiting\n- **[hpp](https://github.com/analog-nico/hpp)** `0.2.3` - HTTP Parameter Pollution protection\n\n### Validation \u0026 Data Handling\n- **[zod](https://zod.dev/)** `4.1.11` - Schema validation\n- **[multer](https://github.com/expressjs/multer)** `1.4.5-lts.1` - File upload handling\n- **[date-fns](https://date-fns.org/)** `4.1.0` - Date manipulation\n- **[lodash](https://lodash.com/)** `4.17.21` - Utility functions\n\n### Cloud Storage\n- **[@aws-sdk/client-s3](https://aws.amazon.com/sdk-for-javascript/)** `3.893.0` - AWS S3 integration\n- **[@google-cloud/storage](https://cloud.google.com/nodejs/docs/reference/storage/latest)** `7.17.1` - Google Cloud Storage\n- **[minio](https://min.io/)** `8.0.6` - MinIO client\n\n### Email \u0026 Communication\n- **[nodemailer](https://nodemailer.com/)** `7.0.6` - Email sending\n- **[handlebars](https://handlebarsjs.com/)** `4.7.8` - Email templates\n\n### Utilities \u0026 Tools\n- **[pino](https://getpino.io/)** `9.11.0` - Fast JSON logger\n- **[node-cron](https://github.com/node-cron/node-cron)** `3.0.3` - Job scheduling\n- **[swagger-ui-express](https://github.com/scottie1984/swagger-ui-express)** `5.0.1` - API documentation\n- **[PM2](https://pm2.keymetrics.io/)** - Process manager for production\n\n### Development Tools\n- **[ESLint](https://eslint.org/)** `9.36.0` - JavaScript linter\n- **[Prettier](https://prettier.io/)** `3.6.2` - Code formatter\n- **[Nodemon](https://nodemon.io/)** `3.1.10` - Development auto-reload\n- **[release-it](https://github.com/release-it/release-it)** `18.1.2` - Version management\n\n## Architecture\n\nThis project follows a **layered architecture** pattern with clear separation of concerns:\n\n```\n┌──────────────────────────────────────────┐\n│          Handler Layer (Controller)      │\n│     HTTP Request/Response Handling       │\n└──────────────────────────────────────────┘\n                    ↓\n┌──────────────────────────────────────────┐\n│           Service Layer                  │\n│    Business Logic \u0026 Validation           │\n└──────────────────────────────────────────┘\n                    ↓\n┌──────────────────────────────────────────┐\n│      Repository Layer (TypeORM)          │\n│         Data Access \u0026 Queries            │\n└──────────────────────────────────────────┘\n                    ↓\n┌──────────────────────────────────────────┐\n│          PostgreSQL Database             │\n└──────────────────────────────────────────┘\n```\n\n### Key Architectural Principles\n\n1. **Separation of Concerns**\n   - Handlers: HTTP request/response management\n   - Services: Business logic and validation\n   - Repositories: Data persistence via TypeORM\n\n2. **Middleware Stack**\n   - Request logging (Pino)\n   - Security headers (Helmet)\n   - Rate limiting\n   - CORS configuration\n   - User agent parsing\n   - Authentication \u0026 authorization\n\n3. **Error Handling**\n   - Custom HTTP error classes (400, 401, 403, 404, 500)\n   - Centralized error middleware\n   - Validation error handling\n   - TypeORM-specific error handling\n\n4. **Data Validation**\n   - Zod schemas for type-safe validation\n   - Request/response validation\n   - Entity validation at service layer\n\n## Prerequisites\n\nBefore you begin, ensure you have the following installed:\n\n- **Node.js** \u003e= 20.x ([Download](https://nodejs.org/))\n- **PostgreSQL** \u003e= 14.x ([Download](https://www.postgresql.org/download/))\n- **npm** or **yarn** or **pnpm** (Package manager)\n- **Docker** (optional, for containerized deployment)\n\n## Getting Started\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/masb0ymas/express-api-typeorm.git\ncd express-api-typeorm\n```\n\n### 2. Install Dependencies\n\nUsing npm:\n```bash\nnpm install\n```\n\nUsing yarn:\n```bash\nyarn install\n```\n\nUsing pnpm:\n```bash\npnpm install\n```\n\n### 3. Generate Environment Variables\n\nYou can generate a `.env` file with secure random secrets:\n\n```bash\nnpm run secret\n```\n\nOr manually copy the example file:\n\n```bash\ncp .env.example .env\n```\n\nThen edit `.env` and configure your settings (see [Environment Variables](#environment-variables)).\n\n### 4. Set Up Database\n\nCreate and initialize the database:\n\n```bash\nnpm run db:sync\n```\n\nThis command will:\n- Create the database (if it doesn't exist)\n- Drop existing schema\n- Synchronize schema with entities\n- Run migrations and seeders\n\nAlternatively, create the database manually:\n\n```bash\n# Create database only\nnpm run db:create\n\n# Reset schema (drop + sync)\nnpm run db:reset\n```\n\n### 5. Start Development Server\n\n```bash\nnpm run dev\n```\n\nThe API will be available at `http://localhost:8000`\n\n### 6. Access API Documentation\n\nOpen your browser and navigate to:\n\n```\nhttp://localhost:8000/api-docs\n```\n\nThis will open the interactive Swagger UI where you can test all endpoints.\n\n## Environment Variables\n\nCreate a `.env` file in the root directory with the following variables:\n\n### Application Settings\n```env\nNODE_ENV=development\nAPP_PORT=8000\nAPP_NAME=express-api-typeorm\nAPP_URL=http://localhost:8000\nAPP_DEFAULT_PASS=defaultPassword123\n```\n\n### Database Configuration\n```env\nTYPEORM_CONNECTION=postgres\nTYPEORM_HOST=localhost\nTYPEORM_PORT=5432\nTYPEORM_USERNAME=postgres\nTYPEORM_PASSWORD=your_password\nTYPEORM_DATABASE=express_typeorm\nTYPEORM_SYNCHRONIZE=false\nTYPEORM_LOGGING=false\nTYPEORM_ENTITIES=dist/app/database/entity/**/*.js\nTYPEORM_MIGRATIONS=dist/app/database/migration/**/*.js\nTYPEORM_SUBSCRIBERS=dist/app/database/subscriber/**/*.js\n```\n\n### JWT Configuration\n```env\nJWT_SECRET=your_jwt_secret_key_here\nJWT_EXPIRES=7d\n```\n\n### Email Configuration (Optional)\n```env\nMAIL_DRIVER=smtp\nMAIL_HOST=smtp.gmail.com\nMAIL_PORT=587\nMAIL_USERNAME=your_email@gmail.com\nMAIL_PASSWORD=your_app_password\nMAIL_ENCRYPTION=tls\nMAIL_FROM_ADDRESS=noreply@yourdomain.com\nMAIL_FROM_NAME=\"${APP_NAME}\"\n```\n\n### Storage Configuration (Optional)\n\nChoose one storage provider:\n\n#### AWS S3\n```env\nSTORAGE_PROVIDER=s3\nAWS_S3_BUCKET=your-bucket-name\nAWS_S3_REGION=us-east-1\nAWS_ACCESS_KEY_ID=your_access_key\nAWS_SECRET_ACCESS_KEY=your_secret_key\n```\n\n#### Google Cloud Storage\n```env\nSTORAGE_PROVIDER=gcs\nGCS_BUCKET=your-bucket-name\nGCS_PROJECT_ID=your-project-id\nGCS_KEY_FILE=path/to/keyfile.json\n```\n\n#### MinIO\n```env\nSTORAGE_PROVIDER=minio\nMINIO_ENDPOINT=localhost\nMINIO_PORT=9000\nMINIO_ACCESS_KEY=minioadmin\nMINIO_SECRET_KEY=minioadmin\nMINIO_BUCKET=your-bucket-name\nMINIO_USE_SSL=false\n```\n\n## Database Setup\n\n### Entity Relationships\n\nThe database schema includes the following entities:\n\n- **User** - User accounts with authentication\n  - Relationships: Role (Many-to-One), Upload (Many-to-One), Sessions (One-to-Many)\n  \n- **Role** - User roles for RBAC\n  - Default roles: User, Admin, Super Admin\n  \n- **Session** - User session tracking\n  - Tracks: JWT tokens, device info, IP addresses\n  \n- **Upload** - File upload metadata\n  - Supports: AWS S3, Google Cloud Storage, MinIO\n\n### Database Commands\n\n```bash\n# Create database\nnpm run db:create\n\n# Drop database\nnpm run db:drop\n\n# Drop schema and sync\nnpm run db:reset\n\n# Create database + reset schema\nnpm run db:sync\n\n# Manual TypeORM commands\nnpx typeorm schema:sync -d ./dist/app/database/connection.js\nnpx typeorm schema:drop -d ./dist/app/database/connection.js\n```\n\n## API Documentation\n\n### Accessing Swagger UI\n\nStart the development server:\n```bash\nnpm run dev\n```\n\nNavigate to:\n```\nhttp://localhost:8000/api-docs\n```\n\n### API Endpoints Overview\n\n#### Base URL: `http://localhost:8000`\n\n#### Health Check\n```\nGET  /                    # Hello World\nGET  /health              # Server health and version info\n```\n\n#### Authentication (`/v1/auth`)\n```\nPOST   /v1/auth/sign-up            # User registration\nPOST   /v1/auth/sign-in            # User login\nGET    /v1/auth/verify-session     # Verify JWT session\nPOST   /v1/auth/sign-out           # User logout\n```\n\n#### User Management (`/v1/user`)\n```\nGET    /v1/user                    # List users (paginated, filtered, sorted)\nPOST   /v1/user                    # Create user (Admin only)\nGET    /v1/user/:id                # Get user by ID\nPUT    /v1/user/:id                # Update user\nDELETE /v1/user/:id                # Delete user (Admin only)\n```\n\n#### Role Management (`/v1/role`)\n```\nGET    /v1/role                    # List roles\nPOST   /v1/role                    # Create role (Admin only)\nGET    /v1/role/:id                # Get role by ID\nPUT    /v1/role/:id                # Update role (Admin only)\nDELETE /v1/role/:id                # Delete role (Admin only)\n```\n\n#### File Uploads (`/v1/upload`)\n```\nPOST   /v1/upload                  # Upload file\nGET    /v1/upload                  # List uploads\nGET    /v1/upload/:id              # Get upload by ID\nDELETE /v1/upload/:id              # Delete upload\n```\n\n#### Session Management (`/v1/session`)\n```\nGET    /v1/session                 # List user sessions\nDELETE /v1/session/:id             # End session\n```\n\n### Query Parameters\n\nAll list endpoints support:\n\n- **Filtering**: `?filtered={\"field\":\"value\"}`\n- **Sorting**: `?sorted={\"field\":\"ASC\"}` or `?sorted={\"field\":\"DESC\"}`\n- **Pagination**: `?page=1\u0026pageSize=10`\n\n## Project Structure\n\n```\nexpress-api-typeorm/\n├── src/\n│   ├── main.ts                          # Application entry point\n│   ├── app/\n│   │   ├── database/\n│   │   │   ├── connection.ts            # TypeORM connection\n│   │   │   ├── entity/                  # Database entities\n│   │   │   │   ├── base.ts              # Base entity (UUID, timestamps)\n│   │   │   │   ├── user.ts\n│   │   │   │   ├── role.ts\n│   │   │   │   ├── session.ts\n│   │   │   │   └── upload.ts\n│   │   │   ├── migration/               # Database migrations\n│   │   │   ├── schema/                  # Zod validation schemas\n│   │   │   └── subscriber/              # Entity subscribers\n│   │   ├── handler/                     # HTTP route handlers\n│   │   │   ├── auth.ts\n│   │   │   ├── user.ts\n│   │   │   ├── role.ts\n│   │   │   ├── session.ts\n│   │   │   └── upload.ts\n│   │   ├── service/                     # Business logic layer\n│   │   │   ├── base.ts\n│   │   │   ├── auth.ts\n│   │   │   ├── user.ts\n│   │   │   └── ...\n│   │   ├── middleware/                  # Express middleware\n│   │   │   ├── authorization.ts         # JWT authentication\n│   │   │   ├── error-handle.ts          # Global error handler\n│   │   │   ├── rate-limit.ts            # Rate limiting\n│   │   │   └── with-permission.ts       # RBAC middleware\n│   │   ├── job/                         # Scheduled jobs\n│   │   │   ├── session.ts               # Session cleanup\n│   │   │   └── upload.ts                # URL refresh\n│   │   └── routes/                      # Route definitions\n│   │       ├── route.ts\n│   │       └── v1.ts\n│   ├── config/                          # Configuration\n│   │   ├── env.ts                       # Environment variables\n│   │   ├── app.ts                       # Express setup\n│   │   ├── logger.ts                    # Pino logger\n│   │   ├── hashing.ts                   # Password hashing\n│   │   ├── smtp.ts                      # Email config\n│   │   └── storage.ts                   # Storage config\n│   └── lib/                             # Shared utilities\n│       ├── async-handler.ts\n│       ├── validate.ts\n│       ├── http/                        # HTTP utilities\n│       │   ├── errors/                  # Custom error classes\n│       │   └── response.ts              # Response formatter\n│       ├── token/\n│       │   └── jwt.ts                   # JWT utilities\n│       ├── query-builder/               # Query helpers\n│       ├── storage/                     # Storage abstraction\n│       ├── smtp/                        # Email templates\n│       ├── upload/                      # File upload\n│       ├── swagger/                     # API documentation\n│       └── constant/                    # Application constants\n├── public/                              # Static assets\n│   ├── swagger/                         # Swagger files\n│   └── email-template/                  # Email templates\n├── logs/                                # Application logs\n├── script/\n│   └── secret.sh                        # Environment generator\n├── .env.example                         # Environment template\n├── Dockerfile                           # Docker configuration\n├── package.json\n├── tsconfig.json\n└── README.md\n```\n\n## Development\n\n### Module System\n\n- The `main` branch uses **ES Modules** (`type: module`)\n- For **CommonJS**, use the `commonjs` branch\n\n### Development Workflow\n\n1. **Start with hot reload**\n   ```bash\n   npm run dev\n   ```\n   This command:\n   - Compiles TypeScript with watch mode\n   - Automatically restarts on file changes\n   - Resolves path aliases\n\n2. **Code linting**\n   ```bash\n   npm run lint\n   ```\n\n3. **Code formatting**\n   ```bash\n   npm run format\n   ```\n\n### Adding New Features\n\n1. **Create Entity** in `src/app/database/entity/`\n2. **Create Schema** in `src/app/database/schema/` (Zod validation)\n3. **Create Service** in `src/app/service/`\n4. **Create Handler** in `src/app/handler/`\n5. **Add Routes** in `src/app/routes/v1.ts`\n6. **Run Migration** (if needed)\n\n### Background Jobs\n\nScheduled jobs are defined in `src/app/job/`:\n\n- **Session Cleanup** - Removes expired sessions\n- **Upload URL Refresh** - Updates signed URLs before expiration\n\nJobs are configured with cron expressions using `node-cron`.\n\n## Production Deployment\n\n### Build for Production\n\n```bash\nnpm run build\n```\n\nThis creates an optimized production build in the `dist/` directory.\n\n### Running Production Server\n\n#### Using Node.js\n```bash\nNODE_ENV=production node ./dist/main.js\n```\n\n#### Using PM2 (Recommended)\n```bash\n# Production\nnpm run start:production\n\n# Staging\nnpm run start:staging\n```\n\nPM2 provides:\n- Process management\n- Auto-restart on crashes\n- Load balancing\n- Log management\n\n### Docker Deployment\n\n#### Build Docker Image\n```bash\ndocker build -t yourname/express-api-typeorm:v6.0.0 .\n```\n\n#### Run Container\n```bash\ndocker run -p 8000:8000 \\\n  -e NODE_ENV=production \\\n  -e TYPEORM_HOST=your_db_host \\\n  -e TYPEORM_PASSWORD=your_db_password \\\n  -d yourname/express-api-typeorm:v6.0.0\n```\n\n#### Docker Compose (Example)\n```yaml\nversion: '3.8'\nservices:\n  api:\n    image: yourname/express-api-typeorm:v6.0.0\n    ports:\n      - \"8000:8000\"\n    environment:\n      - NODE_ENV=production\n      - TYPEORM_HOST=postgres\n      - TYPEORM_USERNAME=postgres\n      - TYPEORM_PASSWORD=password\n      - TYPEORM_DATABASE=express_typeorm\n    depends_on:\n      - postgres\n  \n  postgres:\n    image: postgres:15-alpine\n    environment:\n      - POSTGRES_USER=postgres\n      - POSTGRES_PASSWORD=password\n      - POSTGRES_DB=express_typeorm\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n\nvolumes:\n  postgres_data:\n```\n\n### Environment-Specific Configuration\n\nSet `NODE_ENV` to control behavior:\n\n- `development` - Enables Swagger, verbose logging\n- `staging` - Production-like with some debugging\n- `production` - Optimized, minimal logging, no Swagger\n\n## Scripts Reference\n\n### Development\n```bash\nnpm run dev              # Start with hot reload\nnpm run build            # Build TypeScript\nnpm run clean            # Remove dist folder\nnpm run secret           # Generate .env file\n```\n\n### Database\n```bash\nnpm run db:create        # Create database\nnpm run db:drop          # Drop database\nnpm run db:schema-sync   # Sync schema with entities\nnpm run db:schema-drop   # Drop schema\nnpm run db:reset         # Drop + sync schema\nnpm run db:sync          # Create DB + reset schema\n```\n\n### Production\n```bash\nnpm start                # Run production build\nnpm run start:staging    # Run with PM2 (staging)\nnpm run start:production # Run with PM2 (production)\n```\n\n### Release Management\n```bash\nnpm run release          # Release new version\nnpm run release:patch    # Release patch version (0.0.x)\nnpm run release:minor    # Release minor version (0.x.0)\nnpm run release:major    # Release major version (x.0.0)\nnpm run release:pre      # Release pre-release (beta)\n```\n\n### Testing\n```bash\nnpm test                 # Run tests (not implemented yet)\n```\n\n## Testing\n\nTesting infrastructure is planned but not yet implemented. The project is set up to support:\n\n- Unit tests (Jest)\n- Integration tests\n- E2E tests\n\nContributions to add comprehensive test coverage are welcome!\n\n## Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Code Style\n\n- Use TypeScript\n- Follow ESLint rules\n- Format code with Prettier\n- Write meaningful commit messages\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.\n\n## Author\n\n[![Github](https://badges.aleen42.com/src/github.svg)](https://github.com/masb0ymas)\n[![Twitter](https://badges.aleen42.com/src/twitter.svg)](https://twitter.com/masb0ymas)\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-Informational?logo=linkedin\u0026color=0A66C2\u0026logoColor=white)](https://www.linkedin.com/in/masb0ymas)\n\n**masb0ymas** - [me@masb0ymas.com](mailto:me@masb0ymas.com)\n\n## Support\n\nIf you find this project helpful, consider supporting:\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I03MVAI)\n\n[\u003cimg height=\"40\" src=\"https://trakteer.id/images/mix/navbar-logo-lite.png\"\u003e](https://trakteer.id/masb0ymas)\n\n[\u003cimg height=\"40\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/PayPal.svg/1280px-PayPal.svg.png\"\u003e](https://www.paypal.com/paypalme/masb0ymas)\n\n---\n\n## Acknowledgments\n\n- Base API structure inspired by [express-api](https://github.com/masb0ymas/express-api)\n- Built with modern Node.js best practices\n- TypeScript for type safety\n- TypeORM for elegant database management\n\n## Links\n\n- [Repository](https://github.com/masb0ymas/express-api-typeorm)\n- [Issue Tracker](https://github.com/masb0ymas/express-api-typeorm/issues)\n- [Changelog](https://github.com/masb0ymas/express-api-typeorm/releases)\n","funding_links":["https://github.com/sponsors/masb0ymas","https://patreon.com/masb0ymas","https://ko-fi.com/masb0ymas","https://ko-fi.com/I2I03MVAI","https://www.paypal.com/paypalme/masb0ymas"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasb0ymas%2Fexpress-api-typeorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmasb0ymas%2Fexpress-api-typeorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasb0ymas%2Fexpress-api-typeorm/lists"}