Ver Fonte

add mock server

WuXinyu há 7 anos atrás
pai
commit
5a90f5a5ca

+ 7 - 0
mock/data.js

@@ -0,0 +1,7 @@
+const PREFIX = "/api/v1";
+
+export default [
+  {
+    url: `${PREFIX}/`
+  }
+];

+ 48 - 0
mock/index.js

@@ -0,0 +1,48 @@
+const express = require("express");
+const bodyParser = require("body-parser");
+const app = express();
+const port = 4000; // set our port
+
+// 给app配置bodyParser中间件
+// 通过如下配置再路由种处理request时,可以直接获得post请求的body部分
+app.use(bodyParser.urlencoded({ extended: true }));
+app.use(bodyParser.json());
+
+// API路由配置
+// =============================================================================
+const router = express.Router();
+
+/**
+ * /authorization
+ * [POST]/login 登陆 done
+ * [POST]/register 注册 done
+ */
+router.use("/authorization", require("./modules/authorization"));
+/**
+ * /user
+ *[GET]/:userId 获得用户信息 done
+ *[POST]/:userId 修改用户信息 done
+ *[POST]/:userId/password 修改密码 done
+ *[POST]/:userId/tag  添加标签 done
+ */
+router.use("/user", require("./modules/user"));
+/**
+ * /tag
+ *[POST] "/" 新增标签 done
+ *[POST] "/:shareLink" 加入标签 done
+ *[GET] "/" 获取标签列表 done
+ */
+router.use("/tag", require("./modules/tag"));
+
+/**
+ * /doc
+ * [GET] 获得待处理文档列表
+ * [GET]/:docId 获得文档详情
+ */
+router.use("/doc", require("./modules/doc"));
+
+app.use("/api/v1", router);
+app.listen(port);
+
+/* eslint no-console:0 */
+console.log("Mock is on " + port);

+ 40 - 0
mock/modules/authorization/index.js

@@ -0,0 +1,40 @@
+const express = require("express");
+const router = express.Router();
+const UserSerializer = require("../../serializers/UserSerializer");
+
+router.route("/login").post((req, res) => {
+  //登录
+  const token = "Bearer EGbbP8ZWU1u-7dogAj97N5gemefVyVpR_50eErvfssA";
+  const setSendValue = role => {
+    res.append("Authorization", token);
+    res.send({
+      data: UserSerializer(role)
+    });
+  };
+  const { body = {} } = req;
+  switch (body.username) {
+    case "student":
+      setSendValue("STUDENT");
+      break;
+    case "teacher":
+      setSendValue("TEACHER");
+      break;
+    case "assistant":
+      setSendValue("ASSISTANT");
+      break;
+    case "error":
+      res.status(418).send({ message: "用户名密码不匹配" });
+      break;
+    default:
+      setSendValue("STUDENT");
+      break;
+  }
+});
+
+router.route("/register").post((req, res) => {
+  //注册
+  res.send({});
+  // res.status(418).send({ message: '用户名已存在' });
+});
+
+module.exports = router;

+ 57 - 0
mock/modules/doc/index.js

@@ -0,0 +1,57 @@
+const express = require("express");
+const router = express.Router();
+const DocSimpleSerializer = require("../../serializers/DocSimpleSerializer");
+const DocSerializer = require("../../serializers/DocSerializer");
+const DocResultSerializer = require("../../serializers/DocResultSerializer");
+const CheckListItemSerializer = require("../../serializers/CheckListItemSerializer");
+
+router.route("").get((req, res) => {
+  //获得文档列表
+  res.send({
+    data: [
+      DocSimpleSerializer(req.query.self),
+      DocSimpleSerializer(),
+      DocSimpleSerializer(),
+      DocSimpleSerializer(),
+      DocSimpleSerializer()
+    ]
+  });
+});
+
+router.route("/:docId").get((req, res) => {
+  //获得文档详情
+  res.send({
+    data: DocSerializer()
+  });
+});
+
+router
+  .route("/:docId/checklist")
+  .get((req, res) => {
+    res.send({
+      data: [
+        CheckListItemSerializer(),
+        CheckListItemSerializer(),
+        CheckListItemSerializer(),
+        CheckListItemSerializer()
+      ]
+    });
+  })
+  .post((req, res) => {
+    res.send({
+      data: [
+        CheckListItemSerializer(),
+        CheckListItemSerializer(),
+        CheckListItemSerializer(),
+        CheckListItemSerializer()
+      ]
+    });
+  });
+
+router.route("/:docId/result").get((req, res) => {
+  res.send({
+    data: [DocResultSerializer(), DocResultSerializer(true)] //Result
+  });
+});
+
+module.exports = router;

+ 12 - 0
mock/modules/tag/index.js

@@ -0,0 +1,12 @@
+const express = require("express");
+const router = express.Router();
+const TagSerializer = require("../../serializers/TagSerializer");
+
+router.route("").get((req, res) => {
+  //获得用户标签列表
+  res.send({
+    data: [TagSerializer(), TagSerializer(), TagSerializer()]
+  });
+});
+
+module.exports = router;

+ 25 - 0
mock/modules/user/index.js

@@ -0,0 +1,25 @@
+const express = require("express");
+const router = express.Router();
+const UserSerializer = require("../../serializers/UserSerializer");
+
+router.route("/:userId").get((req, res) => {
+  //获得用户信息
+  res.send({
+    data: UserSerializer(),
+    abilities: {
+      update: true
+    }
+  });
+});
+
+router.route("/:userId").post((req, res) => {
+  //修改用户信息
+  res.send({
+    data: UserSerializer(),
+    abilities: {
+      update: true
+    }
+  });
+});
+
+module.exports = router;

+ 11 - 0
mock/serializers/CheckListItemSerializer.js

@@ -0,0 +1,11 @@
+const makeId = require("../util/makeId");
+
+module.exports = () => {
+  return {
+    fid: makeId(),
+    content: "该项评价的内容, String",
+    comment: "用户的备注, String",
+    //未来会添加
+    explain: "老师的说明,String"
+  };
+};

+ 21 - 0
mock/serializers/DocResultSerializer.js

@@ -0,0 +1,21 @@
+const makeId = require("../util/makeId");
+
+module.exports = pass => {
+  return {
+    fid: makeId(),
+    content: "该项评价的内容, String",
+    pass: pass || false,
+    result: [
+      {
+        rid: 1,
+        level: 0,
+        comment: "我觉得还行"
+      },
+      {
+        rid: 2,
+        level: 1,
+        comment: "我觉得不行"
+      }
+    ]
+  };
+};

+ 67 - 0
mock/serializers/DocSerializer.js

@@ -0,0 +1,67 @@
+const makeId = require("../util/makeId");
+const tagSerializer = require("./TagSerializer");
+
+module.exports = (filename = "需求规格说明文档") => {
+  return {
+    id: makeId(),
+    filename,
+    owner: tagSerializer(),
+    content:
+      "# 需求规格说明文档\n\n" +
+      "> 参照语雀API基本要求\n" +
+      "\n" +
+      "## 基本路径\n" +
+      "* `/api/v2/`\n" +
+      "\n" +
+      "## HTTP Verbs\n" +
+      "\n" +
+      "| Verb | Description |\n" +
+      "| :--- | :--- |\n" +
+      "| GET | 用于获取数据 |\n" +
+      "| POST | 用于创建数据 |\n" +
+      "| PUT | 用于修改部分数据,例如一个文档标题,正文 |\n" +
+      "| DELETE | 用于删除数据 |\n" +
+      "\n" +
+      "## 用户认证\n" +
+      "使用 Token 机制来实现用户认证。\n" +
+      "在请求的 HTTP Headers 传入 `Authorization` 带入用户的 Token 信息,用于认证。\n" +
+      "\n" +
+      "文档会在需要用户权限的api中标识 __[需要认证] __\n" +
+      "\n" +
+      "## HTTP 状态码\n" +
+      "* 200 - 成功\n" +
+      "* 400 - 请求的参数不正确,或缺少必要信息,请对比文档\n" +
+      "* 401 - 需要用户认证的接口用户信息不正确,即__Token错__\n" +
+      "* 403 - 缺少对应功能的权限,即__权限不足__\n" +
+      "* 404 - 数据不存在,或未开放\n" +
+      "* 500 - 服务器异常\n" +
+      "\n" +
+      "## 返回数据格式[示例]\n" +
+      "* JSON 格式\n" +
+      "\n" +
+      "```json\n" +
+      "{\n" +
+      '    "data": {\n' +
+      '        "id": 10,\n' +
+      '        "slug": "weekly",\n' +
+      '        "name": "技术周刊",\n' +
+      "     },\n" +
+      '    "abilities": {\n' +
+      '        "update": false,\n' +
+      '        "destroy": false\n' +
+      "    },\n" +
+      '    "meta": {\n' +
+      '        "liked": false,\n' +
+      '        "followed": false,\n' +
+      "    }\n" +
+      "}\n" +
+      "```\n" +
+      "\n" +
+      "* id: 每个数据都会有的,Resource 的唯一编号,后续很多地方你可能需要用它查询\n" +
+      "* abilities: 表述当前登陆者对于此资源的权限\n" +
+      "* meta: 一些附加信息,例如是否赞过,是否关注过\n" +
+      "\n" +
+      "## DateTime 格式\n" +
+      "DateTime 使用 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 标准格式,请按照标准方式进行转换。\n"
+  };
+};

+ 10 - 0
mock/serializers/DocSimpleSerializer.js

@@ -0,0 +1,10 @@
+const makeId = require("../util/makeId");
+const tagSerializer = require("./TagSerializer");
+
+module.exports = (filename = "需求规格说明文档") => {
+  return {
+    id: makeId(),
+    filename,
+    owner: tagSerializer()
+  };
+};

+ 15 - 0
mock/serializers/TagSerializer.js

@@ -0,0 +1,15 @@
+const makeId = require("../util/makeId");
+const userSerializer = require("./UserSerializer");
+
+module.exports = (type = "GROUP", name = "TagBaker") => {
+  return {
+    id: makeId(),
+    type,
+    shareLink:
+      "https://bequank.oss-cn-beijing.aliyuncs.com/web-gallery/pixiv39957555.jpg?x-oss-process=style/avatar",
+    name,
+    owner: [userSerializer(), userSerializer()],
+    createdAt: "2010-10-21",
+    updatedAt: "2010-11-21"
+  };
+};

+ 15 - 0
mock/serializers/UserSerializer.js

@@ -0,0 +1,15 @@
+const makeId = require("../util/makeId");
+
+module.exports = (role = "STUDENT") => {
+  return {
+    id: makeId(),
+    role: role,
+    username: "kunduin",
+    nickname: "Bay",
+    bio: "小白白白最最最最帅帅帅帅帅帅帅帅",
+    avatar:
+      "https://bequank.oss-cn-beijing.aliyuncs.com/web-gallery/pixiv39957555.jpg?x-oss-process=style/avatar",
+    createdAt: "2010-10-21",
+    updatedAt: "2010-11-21"
+  };
+};

+ 3 - 0
mock/util/makeId.js

@@ -0,0 +1,3 @@
+module.exports = () => {
+  return Math.floor(Math.random() * 10000000);
+};