{"id":29153320,"url":"https://github.com/trhgatu/e-commerce-backend","last_synced_at":"2026-03-16T23:32:23.466Z","repository":{"id":289848973,"uuid":"972488546","full_name":"trhgatu/e-commerce-backend","owner":"trhgatu","description":"Production-ready E-Commerce Backend – Modular Node.js + TypeScript + MongoDB + VNPAY IPN + Redis + Docker + CI/CD","archived":false,"fork":false,"pushed_at":"2025-06-25T10:45:56.000Z","size":417,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-25T11:45:21.789Z","etag":null,"topics":["backend","ci-cd","docker","ecommerce","express","github-actions","modular-architecture","mongodb","nodejs","redis","render","socket-io","typescript","vnpay-api","zod"],"latest_commit_sha":null,"homepage":"","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/trhgatu.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,"zenodo":null}},"created_at":"2025-04-25T06:53:08.000Z","updated_at":"2025-06-25T10:45:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"d7ccef32-e24c-444f-8431-a6156f5ba225","html_url":"https://github.com/trhgatu/e-commerce-backend","commit_stats":null,"previous_names":["trhgatu/e-commerce-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/trhgatu/e-commerce-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trhgatu%2Fe-commerce-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trhgatu%2Fe-commerce-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trhgatu%2Fe-commerce-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trhgatu%2Fe-commerce-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trhgatu","download_url":"https://codeload.github.com/trhgatu/e-commerce-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trhgatu%2Fe-commerce-backend/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262880612,"owners_count":23378815,"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":["backend","ci-cd","docker","ecommerce","express","github-actions","modular-architecture","mongodb","nodejs","redis","render","socket-io","typescript","vnpay-api","zod"],"created_at":"2025-07-01T01:39:48.038Z","updated_at":"2025-10-23T23:18:22.008Z","avatar_url":"https://github.com/trhgatu.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛠️ E-Commerce Backend – Modular, Scalable, Production-Ready\n\n[![Render](https://img.shields.io/badge/render-live-success?logo=render\u0026style=flat-square)](https://e-commerce-backend-develop.onrender.com/api-docs)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/code-typescript-blue?style=flat-square\u0026logo=typescript)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/node.js-18+-brightgreen?style=flat-square\u0026logo=node.js)](https://nodejs.org/)\n[![MongoDB](https://img.shields.io/badge/mongoDB-atlas-success?style=flat-square\u0026logo=mongodb)](https://www.mongodb.com/atlas)\n[![Swagger](https://img.shields.io/badge/docs-swagger-yellow?style=flat-square\u0026logo=swagger)](https://e-commerce-backend-develop.onrender.com/api-docs)\n\n\u003e A backend system for modern e-commerce platforms, built with **Node.js**, **TypeScript**, **MongoDB**, **Redis**, **Zod**, and **Swagger**, following **modular architecture** for long-term scalability.\n\n---\n\n## 🚀 Features\n\n- 🔐 JWT Authentication with refresh token\n- 🧑‍⚖️ RBAC – Role \u0026 Permission-based access\n- 📦 Inventory-aware Cart \u0026 Order management\n- 💰 Payment via **VNPAY** (IPN webhook supported)\n- 🏷️ Voucher support \u0026 discount logic\n- ☁️ Image uploads via **Supabase Storage**\n- ⚡ Redis caching for performance\n- 🔎 Full Swagger API documentation\n- 🧾 Audit logs via middleware\n\n---\n\n## ⚙️ Tech Stack\n\n| Layer         | Technology                          |\n|---------------|--------------------------------------|\n| Language      | Node.js (v18+) + TypeScript         |\n| Framework     | Express.js                          |\n| Database      | MongoDB (Mongoose ODM)              |\n| Auth          | JWT + RBAC                          |\n| Caching       | Redis Cloud                         |\n| Validation    | Zod                                 |\n| Docs          | Swagger (OpenAPI 3.0)               |\n| Storage       | Supabase                            |\n| Deployment    | Docker + Render                     |\n\n---\n\n## 🧱 Folder Structure\n\n```\nsrc/\n├── config/              # DB, Redis, Swagger, env\n├── routes/              # App route entrypoints\n├── middlewares/         # Auth, logger, validation, etc\n├── common/              # Utils, base models\n├── shared/              # Services: redis, upload, usecases\n├── modules/             # Feature-based modules (DDD)\n│   └── \u003cmodule\u003e/\n│       ├── controller.ts\n│       ├── service.ts\n│       ├── route.ts\n│       ├── model.ts\n│       ├── validator.ts\n│       ├── dtos/\n│       └── docs/\n├── types/               # Global type declarations\n└── server.ts            # App entry\n```\n\n---\n\n## 🧪 Development Setup\n\n```bash\n# Clone repo\ngit clone https://github.com/trhgatu/e-commerce-backend.git\ncd e-commerce-backend\n\n# Install deps\nnpm install\n\n# Setup env\ncp .env.example .env\n```\n\nStart dev server:\n\n```bash\nnpm run dev\n```\n\nBuild \u0026 run production:\n\n```bash\nnpm run build\nnpm start\n```\n\n---\n\n## 🔐 Authentication \u0026 Security\n\n- Access \u0026 Refresh token via JWT\n- Secure route middleware with `requireAuth`, `requireRole`\n- All inputs validated via `Zod`\n- Middleware logging for audit \u0026 actions\n- Redis prevents brute-force login (rate-limit ready)\n\n---\n\n## 💼 Major Modules\n\n- **Core:** `auth`, `user`, `role`, `permission`, `log`\n- **Product-related:** `product`, `category`, `brand`, `color`, `inventory`\n- **Order-related:** `cart`, `order`, `voucher`, `payment (VNPAY)`\n- **UX-enhancement:** `wishlist`, `notification`, `address`, `upload-image`\n\n---\n\n## 🧠 Design Guidelines\n\n- Controller: thin layer to receive \u0026 respond\n- Service: business logic lives here\n- Zod Validator: input check before logic\n- Middleware: logging, access control\n- Redis: used for pagination cache, single-object cache, and invalidation by pattern\n\n---\n\n## 🛠️ CI/CD – Render Deployment\n\n- 🎯 Push to GitHub → auto build \u0026 deploy via Render\n- 🧱 Docker containerized (multi-env ready)\n- 🧩 Supports environment secrets (via Render dashboard)\n- 🔄 Auto restart on crash (PM2 inside Docker optional)\n\n---\n\n## 📘 API Documentation\n\n- Develop: [`/api-docs`](https://e-commerce-backend-develop.onrender.com/api-docs)\n- Production: [`/api-docs`](https://e-commerce-backend-prod-v1.onrender.com/api-docs)\n- Built with `swagger-jsdoc` + `swagger-ui-express`\n- Each module has `.swagger.ts` for documentation\n\n---\n\n## 🌍 Environment Variables\n\n\u003cdetails\u003e\n\u003csummary\u003e.env setup\u003c/summary\u003e\n\n```env\n# Server\nPORT=5000\nNODE_ENV=development\nAPI_URL=http://localhost:5000/api/v1\n\n# MongoDB\nMONGODB_URI=mongodb://localhost:27017/ecommerce\n\n# Redis\nREDIS_USERNAME=default\nREDIS_HOST=your.redis.host\nREDIS_PORT=12345\nREDIS_PASSWORD=your_password\n\n# JWT\nJWT_SECRET=your_jwt_secret\n\n# Supabase\nSUPABASE_URL=https://xyz.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=your_supabase_key\n\n# VNPAY\nVNP_TMNCODE=your_code\nVNP_HASH_SECRET=your_secret\nVNP_URL=https://sandbox.vnpayment.vn/paymentv2/vpcpay.html\nVNP_RETURN_URL=https://yourdomain.com/api/v1/payments/vnpay/return\n```\n\n\u003c/details\u003e\n\n---\n\n## 📜 License\n\nMIT License – feel free to fork, learn, extend, and build your own system on top of it.\n\n---\n\n## ✨ Author\n\n\u003e Built with passion by [**@trhgatu**](https://github.com/trhgatu) –  \n\u003e *\"Coding isn't just solving problems. It's telling the world who I am.\"*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrhgatu%2Fe-commerce-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrhgatu%2Fe-commerce-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrhgatu%2Fe-commerce-backend/lists"}