瀏覽代碼

docs: update README with startup instructions

b 1 月之前
父節點
當前提交
07fc55c700
共有 1 個文件被更改,包括 70 次插入3 次删除
  1. 70 3
      README.md

+ 70 - 3
README.md

@@ -1,5 +1,72 @@
-# 测试用例
+# 订单服务
 
-## 需求
+简化的订单 HTTP 服务,支持创建订单、服务者接单、取消订单三个操作。
 
-Go 后端小测试,建议投入 1.5~2 小时,并在收到后 48 小时内提交。请实现一个可在本地运行的简化订单 HTTP 服务,数据保存在内存即可,无需数据库、登录、Docker、Swagger、支付、退款或线上部署。服务只需支持三个操作:创建订单(包含服务时间、时长和地址,初始状态为 pending)、服务者接单(提交 provider_id,仅 pending 订单可以接单)和取消订单(pending 或 accepted 状态可以取消,取消后变为 canceled)。重点验证两种情况:同一订单被两名服务者先后接单时,只允许第一次成功,第二次必须失败且不能覆盖原接单人;订单取消后再次接单或取消时,必须拒绝并返回容易理解的业务错误。有余力可任选自动化测试、并发接单处理或 SQLite 存储之一,但不做也不影响结果。提交方式任选其一:发送源码或压缩包并附启动说明;或录制 3~5 分钟视频,演示创建订单、首次接单成功、第二次接单失败及取消后的非法操作被拒绝。可以使用 AI,但请同时说明主动简化或未完成的内容、AI 主要用在哪里及修正了什么,以及如果再有两小时最想优先改进什么。请勿提交以前公司的私有代码。
+## 快速启动
+
+```bash
+# 启动服务(内存存储 — 默认)
+cd project/cheng-xing && go run main.go
+
+# 启动服务(SQLite 存储)
+cd project/cheng-xing && STORAGE=sqlite go run main.go
+```
+
+服务启动在 `http://localhost:8080`
+
+## API
+
+### 创建订单
+```bash
+curl -X POST http://localhost:8080/orders \
+  -H "Content-Type: application/json" \
+  -d '{"service_time":"2025-08-01T14:00:00Z","duration":120,"address":"北京朝阳区xxx路xxx号"}'
+```
+
+### 服务者接单
+```bash
+curl -X PUT http://localhost:8080/orders/{id}/accept \
+  -H "Content-Type: application/json" \
+  -d '{"provider_id":"prov_001"}'
+```
+
+### 取消订单
+```bash
+curl -X PUT http://localhost:8080/orders/{id}/cancel \
+  -H "Content-Type: application/json" \
+  -d '{}'
+```
+
+## 测试
+
+```bash
+cd project/cheng-xing && go test ./... -v -race
+```
+
+## 业务规则
+
+- 仅 `pending` 订单可接单
+- 同一订单只能被一名服务者接单(并发安全,CAS 乐观锁保证)
+- `pending` 或 `accepted` 订单可取消
+- `canceled` 订单不可再操作
+
+## 项目结构
+
+```
+├── main.go              # 入口,依赖注入,存储选择
+├── model/order.go       # 数据模型、状态常量、错误类型
+├── repository/
+│   ├── order.go         # OrderRepository 接口
+│   ├── memory.go        # 内存实现(sync.RWMutex + CAS)
+│   └── sqlite.go        # SQLite 实现(行锁 + WHERE CAS)
+├── service/order.go     # 业务逻辑(状态机)
+├── handler/order.go     # HTTP handler(Gin)
+└── */*_test.go          # 单元测试 + 集成测试
+```
+
+## 技术栈
+
+- **语言**: Go
+- **框架**: Gin
+- **存储**: 内存 / SQLite(mattn/go-sqlite3)
+- **测试**: testing + httptest