{"id":51095046,"url":"https://github.com/class-fullstack/classs-with-member-khang","last_synced_at":"2026-06-24T05:33:01.328Z","repository":{"id":349768089,"uuid":"1192807816","full_name":"class-fullstack/classs-with-member-khang","owner":"class-fullstack","description":"This is teach for 1:1 with member Khang","archived":false,"fork":false,"pushed_at":"2026-04-07T12:23:37.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T14:46:18.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","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/class-fullstack.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-26T15:25:23.000Z","updated_at":"2026-04-07T12:23:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/class-fullstack/classs-with-member-khang","commit_stats":null,"previous_names":["class-fullstack/classs-with-member-khang"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/class-fullstack/classs-with-member-khang","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/class-fullstack%2Fclasss-with-member-khang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/class-fullstack%2Fclasss-with-member-khang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/class-fullstack%2Fclasss-with-member-khang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/class-fullstack%2Fclasss-with-member-khang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/class-fullstack","download_url":"https://codeload.github.com/class-fullstack/classs-with-member-khang/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/class-fullstack%2Fclasss-with-member-khang/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34719097,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-06-24T05:32:59.879Z","updated_at":"2026-06-24T05:33:01.313Z","avatar_url":"https://github.com/class-fullstack.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# demo-khang\n\nDự án backend Node.js + Express.js với Docker, được tổ chức theo cấu trúc MVC module hóa, hỗ trợ môi trường phát triển (dev) thông qua Docker Compose.\n\n---\n\n## 🚀 Công nghệ sử dụng\n\n| Công nghệ | Phiên bản |\n|---|---|\n| Node.js | 20 (Alpine) |\n| Express.js | ^5.2.1 |\n| Docker | Desktop |\n| Docker Compose | v2 |\n\n---\n\n## 📁 Cấu trúc thư mục\n\n```\ndemo-khang/\n├── docker/\n│   └── dev/\n│       └── dockerfile          # Dockerfile cho môi trường dev\n├── src/\n│   ├── app/\n│   │   └── v1/\n│   │       ├── routes/         # Định nghĩa routes\n│   │       └── services/       # Business logic\n│   ├── configs/                # Cấu hình ứng dụng\n│   ├── constants/              # Hằng số dùng chung\n│   ├── cors/                   # Cấu hình CORS\n│   ├── helpers/                # Hàm hỗ trợ\n│   ├── inits/                  # Khởi tạo ứng dụng\n│   ├── middlewares/            # Middleware Express\n│   ├── templates/              # Templates (email, v.v.)\n│   ├── utils/                  # Tiện ích chung\n│   └── app.js                  # Khởi tạo Express app\n├── server.js                   # Entry point\n├── docker-compose-dev.yml      # Docker Compose cho môi trường dev\n├── makefile                    # Các lệnh tiện ích\n├── package.json\n└── .env                        # Biến môi trường (không commit)\n```\n\n---\n\n## ⚙️ Cài đặt \u0026 Chạy\n\n### Yêu cầu\n- [Node.js 20+](https://nodejs.org/)\n- [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n\n### 1. Clone dự án\n\n```bash\ngit clone \u003crepo-url\u003e\ncd demo-khang\n```\n\n### 2. Tạo file `.env`\n\n```bash\ncp .env.example .env\n# Chỉnh sửa các giá trị trong .env cho phù hợp\n```\n\n---\n\n## 🛠️ Các lệnh Make\n\n| Lệnh | Mô tả |\n|---|---|\n| `make help` | Hiển thị danh sách tất cả các lệnh |\n| `make dev` | Chạy server local với `node --watch` |\n| `make install` | Cài đặt npm dependencies |\n| `make up` | Khởi động Docker container (dev) |\n| `make down` | Dừng và xoá Docker container |\n| `make restart` | Restart Docker container |\n| `make rebuild` | Build lại Docker image và khởi động |\n| `make logs` | Xem logs realtime của container |\n| `make shell` | Vào shell bên trong container |\n| `make clean` | Xoá container, image và `node_modules` |\n\n### Ví dụ sử dụng\n\n```bash\n# Lần đầu chạy với Docker\nmake rebuild\n\n# Xem log\nmake logs\n\n# Chạy local không cần Docker\nmake install\nmake dev\n```\n\n---\n\n## 🌐 API Endpoints\n\n| Method | Endpoint | Mô tả |\n|---|---|---|\n| GET | `/` | Health check – trả về `Hello World!` |\n\n\u003e Server chạy tại: **http://localhost:5001**\n\n---\n\n## 🐳 Docker\n\nDự án sử dụng Docker Compose cho môi trường dev với các tính năng:\n\n- **Hot reload**: Thư mục local được mount vào container (`volumes: .:/app`)\n- **Port**: `5001:5001`\n- **Env file**: Tự động load từ `.env`\n- **Restart policy**: `unless-stopped`\n\n---\n\n## 📝 Scripts npm\n\n```bash\nnpm run dev    # Chạy với node --watch (hot reload)\nnpm run prod   # Chạy production (không watch)\n```\n\n---\n\n## 📄 License\n\nISC\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclass-fullstack%2Fclasss-with-member-khang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclass-fullstack%2Fclasss-with-member-khang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclass-fullstack%2Fclasss-with-member-khang/lists"}