Skip to content

Commit

Permalink
Merge pull request #6 from tolerious/feat/refactor-create-group-logic
Browse files Browse the repository at this point in the history
🚧 Refactor create group logic.
  • Loading branch information
tolerious authored Sep 7, 2024
2 parents ef353b5 + 6b88b6a commit 9e57598
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 17 deletions.
66 changes: 51 additions & 15 deletions routes/wordGroup.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const express = require("express");
const { generateResponse } = require("../utils/utils");
const { generateResponse, generateBadResponse } = require("../utils/utils");
const { wordGroupModel } = require("../schemas/wordGroupSchema");
const { userSettingModel } = require("../schemas/userSettingsSchema");
const router = express.Router();
Expand Down Expand Up @@ -29,22 +29,56 @@ router.get("/child", async function (req, res, next) {
res.json(generateResponse(t));
});

// 创建词组
// 创建词组,createdSource必传
router.post("/", async function (req, res, next) {
let user = req.tUser;
let body = req.body;
const { name } = req.body;
const groups = await wordGroupModel.find({ name: name });
if (groups.length > 0) {
res.json(generateResponse(groups[0], 200, "Group exist."));
} else {
Object.assign(body, {
nickName: name,
creator: user._id,
parentGroupID: "",
});
let t = await wordGroupModel.create(body);
res.json(generateResponse(t));
// 检查创建来源
const { createdSource, originalPageUrl, name } = req.body;
if (!createdSource) {
res.json(generateResponse("", 400, "data format not correct"));
return;
}
switch (createdSource) {
case "extension": {
if (!originalPageUrl) {
res.json(generateResponse("", 400, "data format not correct"));
return;
}
const groups = await wordGroupModel.getGroupsByOriginalPageUrlAndUserId(
originalPageUrl,
user
);
if (groups.length === 0) {
const g = await wordGroupModel.create({
...req.body,
creator: user._id,
});
res.json(generateResponse(g, 200));
} else {
const g = groups[0];
res.json(generateResponse(g, 200));
}
return;
}
case "manually": {
if (!name) {
res.json(generateBadResponse());
}
const groups = await wordGroupModel.getGroupByNameAndUserId(name, user);
if (groups.length === 0) {
const g = await wordGroupModel.create({
...req.body,
creator: user._id,
});
res.json(generateResponse(g));
} else {
res.json(generateResponse(groups[0], 200, "exist"));
}
return;
}
default:
res.json(generateResponse("", 400));
break;
}
});

Expand All @@ -57,6 +91,7 @@ router.post("/detail", async function (req, res, next) {
else g = Object.assign(g, { hasChild: false });
res.json(generateResponse(g));
});

router.delete("/", async function (req, res, next) {
let id = req.body.id;
let group = await wordGroupModel.findById(id);
Expand All @@ -77,6 +112,7 @@ router.delete("/", async function (req, res, next) {
res.json(generateResponse(t));
}
});

router.get("/public", async function (req, res, next) {
let groupList = await wordGroupModel.getPublicGroup();
res.json(generateResponse(groupList));
Expand Down
16 changes: 15 additions & 1 deletion schemas/wordGroupSchema.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ const wordGroupSchema = new Schema(
{
// 用作标识group是否唯一
name: { type: String, default: "Default" },
// 使用浏览器插件查询单词的时候获取到的当前页面的url
originalPageUrl: { type: String, default: "" },
// 词组被创建的来源,是浏览器插件功能自动创建的,还是手动创建的,还是在stylish reader官网上youtube视频创建的
createdSource: {
type: String,
enum: ["extension", "manually"],
required: true,
},
// 用作页面上显示的名字
nickName: { type: String, default: "Default" },
// 是否时官方的词组
Expand All @@ -23,11 +31,17 @@ const wordGroupSchema = new Schema(
// 词组对应的文章,视频链接,等所有资料链接
links: { type: Array, default: [] },
// 通过 stylish reader 网站的youtube视频添加的词组,会有这个字段
youtubeId:{type:String,default:''}
youtubeId: { type: String, default: "" },
},
{
timestamps: true,
statics: {
getGroupByNameAndUserId(name, user) {
return this.find({ name, creator: user._id });
},
getGroupsByOriginalPageUrlAndUserId(originalPageUrl, user) {
return this.find({ originalPageUrl, creator: user._id });
},
getOnlyChildGroup(creator) {
return mongoose.model("WordGroup").find({
creator: creator,
Expand Down
14 changes: 13 additions & 1 deletion utils/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ function generateResponse(data = "", code = 200, msg = "success") {
};
}

function generateBadResponse(data = "", msg = "Bad Request") {
return {
code: 400,
msg,
data,
};
}

async function grabWordFromCambridge(word) {
let url = `https://dictionary.cambridge.org/dictionary/english-chinese-simplified/${word}`;
let r = await axios.get(url);
Expand Down Expand Up @@ -209,4 +217,8 @@ async function grabWordFromCambridge(word) {
return entryBodyElList;
}

module.exports = { generateResponse, grabWordFromCambridge };
module.exports = {
generateResponse,
grabWordFromCambridge,
generateBadResponse,
};

0 comments on commit 9e57598

Please sign in to comment.