Mahakbajpai/servicesync
GitHub: Mahakbajpai/servicesync
一个基于 MERN 全栈技术栈的服务预订平台,通过集成 Solidity 智能合约为预订状态变更提供区块链审计追踪。
Stars: 0 | Forks: 0
# ServiceSync — 实时服务预订 API 与 Dashboard
ServiceSync 是一个精简的全栈服务预订平台,包含 Node.js/Express 后端 API、使用 Tailwind CSS 设计的 React dashboard 前端,以及用于记录预订状态变更的不可篡改的 Solidity 智能合约审计追踪。
## 🌐 在线部署
- **前端 Dashboard (Vercel)**:`https://servicesync-delta.vercel.app`
- **后端 API 网关 (Render)**:`https://servicesync-backend-kin4.onrender.com`
## 🚀 快速入门指南
按照以下步骤在本地机器上运行区块链网络、后端服务器和前端 dashboard。
### 前置条件
请确保已安装以下内容:
- **Node.js**(推荐 v18 或更高版本)
- **MongoDB**(在本地端口 `27017` 运行,或使用 MongoDB Atlas URI)
### 第一步:安装依赖
在项目根目录下运行:
```
npm run install:all
```
*此脚本会自动为根目录 monorepo、backend、frontend 和 blockchain 项目安装相关包依赖。*
### 第二步:启动区块链节点
打开一个终端窗口并运行:
```
# 启动本地 Hardhat Ethereum 节点
npm run blockchain
```
*该节点运行在 `http://127.0.0.1:8545`(Chain ID:`1337`)。你将看到一系列账户和私钥。*
### 第三步:部署智能合约
打开一个新的终端窗口并部署 Solidity 审计合约:
```
# 部署合约并记录地址
npm run deploy:contract
```
**示例输出:**
```
BookingAudit contract successfully deployed!
Address: 0x5FbDB2315678afecb367f032d93F642f64180aa3
```
*注意:如果部署地址与 `0x5FbDB2315678afecb367f032d93F642f64180aa3` 不同,请复制该地址并更新 `backend/.env` 中的 `CONTRACT_ADDRESS` 值。*
### 第四步:同时运行后端与前端
在新的终端窗口中,同时启动 Express 和 Vite 开发服务器:
```
npm run dev
```
- **后端 API**:运行于 [http://localhost:5000](http://localhost:5000)
- **前端 Dashboard**:运行于 [http://localhost:3000](http://localhost:3000)
*或者,你可以使用单个命令同时运行这三个进程(区块链 + 后端 + 前端):`npm run dev:full`。*
## 📁 仓库目录结构
```
servicesync/
├── backend/
│ ├── config/ # Database connection setup
│ ├── middleware/ # JWT parsing and role guard middleware
│ ├── models/ # Mongoose schemas (User, Service, Booking, Review)
│ ├── routes/ # REST API routers
│ ├── services/ # Ethers.js blockchain connection module
│ ├── .env # Local development variables (CORS, JWT, RPC)
│ ├── .env.example # Env configuration template
│ ├── package.json # Backend dependencies
│ └── server.js # Server bootstrapper & configuration
├── blockchain/
│ ├── contracts/ # Solidity smart contracts
│ │ └── BookingAudit.sol
│ ├── scripts/ # Contract deployment scripts
│ │ └── deploy.js
│ ├── hardhat.config.js # Hardhat development setup
│ └── package.json # Blockchain dependencies
├── frontend/
│ ├── src/
│ │ ├── components/ # Reusable React components (Navbar, etc.)
│ │ ├── context/ # AuthContext for session management
│ │ ├── pages/ # LandingPage, AuthPages, Dashboards
│ │ ├── services/ # Axios API helper config
│ │ ├── App.jsx # Layout structure & routes
│ │ ├── index.css # Tailwind directives
│ │ └── main.jsx # Bootstrap entry
│ ├── tailwind.config.js # Styling setups
│ └── package.json # Frontend dependencies
├── ServiceSync_Postman_Collection.json # Imports-ready API requests collection
├── package.json # Monorepo configuration
├── verify.js # Diagnostic sanity compilation checks
└── README.md # Setup and documentation manual
```
## ⚙️ 环境变量 (`backend/.env`)
在 `backend/` 文件夹中创建 `.env` 文件(会自动创建默认文件):
- `PORT`:服务器运行的端口(默认为 `5000`)。
- `MONGO_URI`:连接到你的 MongoDB 实例的连接字符串。
- `JWT_SECRET`:Token 签名密钥。
- `RPC_URL`:与 Ethereum 通信的 JSON-RPC endpoint(默认为 `http://127.0.0.1:8545`)。
- `CONTRACT_ADDRESS`:已部署的 `BookingAudit` 合约地址。
- `ACTOR_PRIVATE_KEY`:后端用于签署交易的 Hardhat 账户私钥(使用默认的第一个账户)。
## 🔌 API 文档
所有 API 响应均返回一致的 JSON 封装结构:
```
{
"success": true,
"data": { ... },
"message": "Information status text"
}
```
### 1. Authentication Endpoints
- **`POST /api/auth/register`**:注册新账号。
- Body:`{ "name": "...", "email": "...", "password": "...", "role": "Customer" | "Provider" }`
- **`POST /api/auth/login`**:进行身份验证并获取 JWT token。
- Body:`{ "email": "...", "password": "..." }`
### 2. Service Listings Endpoints
- **`POST /api/services`**:创建新的服务列表(*仅限 Provider*)。
- Headers:`Authorization: Bearer `
- Body:`{ "title": "...", "category": "...", "price": 40, "coordinates": [lng, lat], "description": "..." }`
- **`GET /api/services`**:获取分页的服务列表,支持可选过滤器和地理空间排序。
- Query Params:
- `page`(默认:1)
- `limit`(默认:10)
- `category`(可选:按类别过滤)
- `longitude` & `latitude`(可选:根据坐标将服务按距离远近排序!)
- **`GET /api/services/:id`**:获取完整的服务详情。
- **`PUT /api/services/:id`**:更新列表(*仅限服务所有者*)。
- **`DELETE /api/services/:id`**:删除列表(*仅限服务所有者*)。
### 3. Bookings Endpoints
- **`POST /api/bookings`**:预订服务(*仅限 Customer*)。
- Headers:`Authorization: Bearer `
- Body:`{ "serviceId": "..." }`
- *业务规则:Provider 不能预订自己的服务。*
- **`PATCH /api/bookings/:id/status`**:更新预订状态(*仅限服务所有者*)。
- Headers:`Authorization: Bearer `
- Body:`{ "status": "confirmed" | "completed" }`
- *强制状态流程:pending ➔ confirmed ➔ completed。日志更新事件会直接记录在链上。*
- **`POST /api/bookings/:id/rate`**:评价已完成的预订(*仅限该预订的 Customer*)。
- Body:`{ "rating": 1-5, "comment": "..." }`
- **`GET /api/bookings/:id/audit`**:获取该预订的区块链审计追踪。
- *从智能合约获取不可篡改的账本状态历史记录。*
### 4. Ratings Profile Endpoint
- **`GET /api/providers/:id/profile`**:公开 endpoint,用于汇总 Provider 的平均评分和评论列表。
## 🔒 区块链审计追踪详情
账本通过智能合约(`blockchain/contracts/BookingAudit.sol`)记录状态更新:
- **合约类型**:Solidity `BookingAudit`
- **功能**:
- `recordStatusChange(string bookingId, string oldStatus, string newStatus, address actor)`:记录状态转换、时间戳和操作者地址。
- `getAuditLogs(string bookingId)`:返回该预订的完整状态操作数组。
- **优雅降级**:如果本地区块链节点未运行,后端将处理该错误,把事件写入模拟的 mock 账本中,并在 API 响应中包含 `"mode": "mock"` 键,从而确保应用流程绝不中断。
标签:GNU通用公共许可证, MERN, MITM代理, Node.js, React, Syscalls, 区块链, 智能合约, 服务预订平台, 自定义脚本