From 5a94a16f47c666377d0dd8a18053a2dd9b6ad8e8 Mon Sep 17 00:00:00 2001 From: 728 Date: Tue, 22 Nov 2022 15:43:18 +0800 Subject: [PATCH] db #25 --- .gitignore | 3 +- cli/dbexport.zsh | 27 +++++---- cli/dbimport.zsh | 27 +++++---- cli/jsonfix.ts | 129 +++++++++++++++++++++++++++++++++++++++---- ismism.ts/src/db.ts | 18 +++--- ismism.ts/src/typ.ts | 42 +++++--------- 6 files changed, 174 insertions(+), 72 deletions(-) diff --git a/.gitignore b/.gitignore index 3e23dfd..8100587 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /ui /log /jwk.json -/json +/dbimport +/dbexport diff --git a/cli/dbexport.zsh b/cli/dbexport.zsh index 08130a8..0a0a6eb 100644 --- a/cli/dbexport.zsh +++ b/cli/dbexport.zsh @@ -1,17 +1,20 @@ -echo mongoexport --jsonArray -d=ismism -c=user -o=json/user.json -mongoexport --jsonArray -d=ismism -c=user -o=json/user.json +echo mongoexport --jsonArray -d=ismism -c=user -o=dbexport/user.json +mongoexport --jsonArray -d=ismism -c=user -o=dbexport/user.json -echo mongoexport --jsonArray -d=ismism -c=soc -o=json/soc.json -mongoexport --jsonArray -d=ismism -c=soc -o=json/soc.json +echo mongoexport --jsonArray -d=ismism -c=soc -o=dbexport/soc.json +mongoexport --jsonArray -d=ismism -c=soc -o=dbexport/soc.json -echo mongoexport --jsonArray -d=ismism -c=agenda -o=json/agenda.json -mongoexport --jsonArray -d=ismism -c=agenda -o=json/agenda.json +echo mongoexport --jsonArray -d=ismism -c=agenda -o=dbexport/agenda.json +mongoexport --jsonArray -d=ismism -c=agenda -o=dbexport/agenda.json -echo mongoexport --jsonArray -d=ismism -c=work -o=json/work.json -mongoexport --jsonArray -d=ismism -c=work -o=json/work.json +echo mongoexport --jsonArray -d=ismism -c=worker -o=dbexport/worker.json +mongoexport --jsonArray -d=ismism -c=worker -o=dbexport/worker.json -echo mongoexport --jsonArray -d=ismism -c=fund -o=json/fund.json -mongoexport --jsonArray -d=ismism -c=fund -o=json/fund.json +echo mongoexport --jsonArray -d=ismism -c=work -o=dbexport/work.json +mongoexport --jsonArray -d=ismism -c=work -o=dbexport/work.json -echo mongoexport --jsonArray -d=ismism -c=dat -o=json/dat.json -mongoexport --jsonArray -d=ismism -c=dat -o=json/dat.json +echo mongoexport --jsonArray -d=ismism -c=fund -o=dbexport/fund.json +mongoexport --jsonArray -d=ismism -c=fund -o=dbexport/fund.json + +echo mongoexport --jsonArray -d=ismism -c=dat -o=dbexport/dat.json +mongoexport --jsonArray -d=ismism -c=dat -o=dbexport/dat.json diff --git a/cli/dbimport.zsh b/cli/dbimport.zsh index fb3ae66..f17597c 100644 --- a/cli/dbimport.zsh +++ b/cli/dbimport.zsh @@ -1,20 +1,23 @@ -echo mongoimport --jsonArray -d=ismism -c=user --file=json/user.json -mongoimport --jsonArray -d=ismism -c=user --file=json/user.json +echo mongoimport --jsonArray -d=ismism -c=user --file=dbimport/user.json +mongoimport --jsonArray -d=ismism -c=user --file=dbimport/user.json -echo mongoimport --jsonArray -d=ismism -c=soc --file=json/soc.json -mongoimport --jsonArray -d=ismism -c=soc --file=json/soc.json +echo mongoimport --jsonArray -d=ismism -c=soc --file=dbimport/soc.json +mongoimport --jsonArray -d=ismism -c=soc --file=dbimport/soc.json -echo mongoimport --jsonArray -d=ismism -c=agenda --file=json/agenda.json -mongoimport --jsonArray -d=ismism -c=agenda --file=json/agenda.json +echo mongoimport --jsonArray -d=ismism -c=agenda --file=dbimport/agenda.json +mongoimport --jsonArray -d=ismism -c=agenda --file=dbimport/agenda.json -echo mongoimport --jsonArray -d=ismism -c=work --file=json/work.json -mongoimport --jsonArray -d=ismism -c=work --file=json/work.json +echo mongoimport --jsonArray -d=ismism -c=worker --file=dbimport/worker.json +mongoimport --jsonArray -d=ismism -c=worker --file=dbimport/worker.json -echo mongoimport --jsonArray -d=ismism -c=fund --file=json/fund.json -mongoimport --jsonArray -d=ismism -c=fund --file=json/fund.json +echo mongoimport --jsonArray -d=ismism -c=work --file=dbimport/work.json +mongoimport --jsonArray -d=ismism -c=work --file=dbimport/work.json -echo mongoimport --jsonArray -d=ismism -c=dat --file=json/dat.json -mongoimport --jsonArray -d=ismism -c=dat --file=json/dat.json +echo mongoimport --jsonArray -d=ismism -c=fund --file=dbimport/fund.json +mongoimport --jsonArray -d=ismism -c=fund --file=dbimport/fund.json + +echo mongoimport --jsonArray -d=ismism -c=dat --file=dbimport/dat.json +mongoimport --jsonArray -d=ismism -c=dat --file=dbimport/dat.json mongosh ismism --eval 'db.getCollectionNames().forEach(coll => { const idx = db.getCollection(coll).getIndexes() diff --git a/cli/jsonfix.ts b/cli/jsonfix.ts index 83ad163..89a6cc1 100644 --- a/cli/jsonfix.ts +++ b/cli/jsonfix.ts @@ -1,16 +1,121 @@ import { User, Work } from "../ismism.ts/src/typ.ts"; -const user: User[] = JSON.parse(Deno.readTextFileSync("json/user.json")) -const work: Work[] = JSON.parse(Deno.readTextFileSync("json/work.json")) - -let n = 0 -for (const w of work) { - w._id = ++n - if (typeof w.uid === "number") continue - const u = user.find(u => u.name === w.uid as unknown as string) - console.log(`uid: ${w.uid} -> ${u?._id}`) - if (u) w.uid = u._id +function rand_utc( + utc: number +): number { + return utc + Math.round(Math.random() * 10000) - 5000 } -console.log(`scanned ${n} work records`) -Deno.writeTextFileSync("json/work-fix.json", JSON.stringify(work)) +const user: User[] = JSON.parse(Deno.readTextFileSync("json/user.json")) +const uid_by_name = new Map(user.map(u => [u.name, u._id])) + +const activity = [ + { aid: 1, date: "2021-04-03 12:00", uid: "川羽", op: "work", msg: "魔怔人论坛上线" }, + { aid: 1, date: "2021-05-28 12:00", uid: "川羽", op: "work", msg: "魔怔人论坛内测结束" }, + { aid: 1, date: "2022-07-04 01:38", uid: "未明子", op: "video", title: "【实践】我的行动路径——我卖什么货,我开什么店,我成立什么团体,我追求什么理想", src: "https://www.bilibili.com/video/BV1if4y1Z7xo" }, + { aid: 1, date: "2022-08-01 01:46", uid: "未明子", op: "video", title: "【公告】我们眼下的行动路径", src: "https://www.bilibili.com/video/BV1wa411M7jK" }, + { aid: 1, date: "2022-08-14 01:45", uid: "未明子", op: "video", title: "【行动计划】我们打算做一个什么样的网站(1)——初步功能", src: "https://www.bilibili.com/video/BV1EG411t7Wh" }, + { aid: 1, date: "2022-09-05 12:00", uid: "万大可", op: "work", msg: "主义主义活动公示网站上线" }, + { aid: 1, date: "2022-09-07 02:45", uid: "未明子", op: "video", title: "【项目追踪】主义主义网站(临时站点)目前的功能:首批项目内容的简单公示", src: "https://www.bilibili.com/video/BV1r14y1s75s" }, + + { aid: 2, date: "2022-08-04 14:35", uid: "张正午", op: "video", title: "工人子弟晚托班苏州星星家园环境改造/伙食改善公益项目工作记录", src: "https://www.bilibili.com/video/BV1zT411L7JP" }, + { aid: 2, date: "2022-08-04 22:17", uid: "未明子", op: "video", title: "【现实行动】我们目前的一个行动项目", src: "https://www.bilibili.com/video/BV1xG4y1v7MV" }, + { aid: 2, date: "2022-09-07 02:45", uid: "未明子", op: "video", title: "【项目追踪】主义主义网站(临时站点)目前的功能:首批项目内容的简单公示", src: "https://www.bilibili.com/video/BV1r14y1s75s" }, + { aid: 2, date: "2022-09-09 04:05", uid: "未明子", op: "video", title: "【项目追踪】晚托班环境改造成果展示预览版(直播讲解版)", src: "https://www.bilibili.com/video/BV19d4y1g7Hc" }, + + { aid: 3, date: "2022-08-04 14:35", uid: "张正午", op: "video", title: "工人子弟晚托班苏州星星家园环境改造/伙食改善公益项目工作记录", src: "https://www.bilibili.com/video/BV1zT411L7JP" }, + { aid: 3, date: "2022-08-04 22:17", uid: "未明子", op: "video", title: "【现实行动】我们目前的一个行动项目", src: "https://www.bilibili.com/video/BV1xG4y1v7MV" }, + { aid: 3, date: "2022-08-17 00:37", uid: "未明子", op: "video", title: "【项目跟踪】晚托班项目硬装计划介绍", src: "https://www.bilibili.com/video/BV1dg41167Y9" }, + { aid: 3, date: "2022-08-23 00:46", uid: "未明子", op: "video", title: "【项目追踪】晚托班改造计划硬装部分阶段性介绍", src: "https://www.bilibili.com/video/BV1eB4y1z7Qc" }, + + { aid: 3, date: "2022-08-31 20:00", uid: "张东冬", op: "work", msg: "在八月 27 - 28 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "盛航航", op: "work", msg: "在八月 26 - 31 日共参与施工 6 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "刘源", op: "work", msg: "在八月 24 日共参与施工 1 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "许沛洋", op: "work", msg: "在八月 23 日共参与施工 1 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "张恒光", op: "work", msg: "在八月 23 - 30 日共参与施工 8 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "李思源", op: "work", msg: "在八月 23 - 24 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "朱宏基", op: "work", msg: "在八月 23 - 25 日共参与施工 3 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "郑昊", op: "work", msg: "在八月 23 - 24 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "应一楷", op: "work", msg: "在八月 22 - 24 日共参与施工 3 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "田浩楠", op: "work", msg: "在八月 22 - 26, 28 日共参与施工 6 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "孙陆钧", op: "work", msg: "在八月 22 - 23 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "张洲", op: "work", msg: "在八月 22 - 25 日共参与施工 4 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "刘叙辰", op: "work", msg: "在八月 22 - 24 日共参与施工 3 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "庞哲昊", op: "work", msg: "在八月 21 - 28, 30 - 31 日共参与施工 10 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "燕少昕", op: "work", msg: "在八月 21 - 23, 28 - 29, 30 日共参与施工 6 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "胡明达", op: "work", msg: "在八月 21 日共参与施工 1 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "张成昊", op: "work", msg: "在八月 21 - 30 日共参与施工 10 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "陆毅", op: "work", msg: "在八月 21 - 33 日共参与施工 3 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "辛子豪", op: "work", msg: "在八月 21 - 22 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "马琳娜", op: "work", msg: "在八月 21, 27 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "梁卫天", op: "work", msg: "在八月 21 - 28 日共参与施工 8 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "沙名轩", op: "work", msg: "在八月 21, 23 - 25 日共参与施工 4 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "纪培煜", op: "work", msg: "在八月 21, 27 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "斯通", op: "work", msg: "在八月 21 日共参与施工 1 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "陆一帜", op: "work", msg: "在八月 21 日共参与施工 1 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "张济达", op: "work", msg: "在八月 21, 28 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "曹子函", op: "work", msg: "在八月 21 - 22 日共参与施工 2 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "张明明", op: "work", msg: "在八月 21, 23, 25 日共参与施工 3 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "张超培", op: "work", msg: "在八月 21 - 30 日共参与施工 10 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "谢宇", op: "work", msg: "在八月 22, 24 - 25, 27 - 28 日共参与施工 5 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "蔡思忘", op: "work", msg: "在八月 22 - 24, 26 - 27, 29 日共参与施工 6 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "用户132", op: "work", msg: "在八月 27 日共参与施工 1 天" }, + { aid: 3, date: "2022-08-31 20:00", uid: "赵贺", op: "work", msg: "在八月 27 - 28 日共参与施工 2 天" }, + { aid: 3, date: "2022-09-07 20:00", uid: "未明子", op: "video", title: "【项目追踪】主义主义网站(临时站点)目前的功能:首批项目内容的简单公示", src: "https://www.bilibili.com/video/BV1r14y1s75s" }, + { aid: 3, date: "2022-09-09 20:00", uid: "未明子", op: "video", title: "【项目追踪】晚托班环境改造成果展示预览版(直播讲解版)", src: "https://www.bilibili.com/video/BV19d4y1g7Hc" }, + { aid: 3, date: "2022-09-13 20:00", uid: "未明子", op: "video", title: "【项目追踪】爱心小屋改造全纪实", src: "https://www.bilibili.com/video/BV1Cd4y1u7Ya" }, + + { aid: 4, date: "2022-10-19 20:00", uid: "盛航航", op: "work", msg: "本日工作内容:拆墙面(全天)" }, + { aid: 4, date: "2022-10-20 20:00", uid: "盛航航", op: "work", msg: "本日工作内容:油烟机清洗(全天)" }, + { aid: 4, date: "2022-10-22 20:00", uid: "盛航航", op: "work", msg: "本日工作内容:拆顶部墙板(全天)" }, + { aid: 4, date: "2022-11-12 20:00", uid: "盛航航", op: "work", msg: "本日工作内容:美缝(全天)" }, + { aid: 4, date: "2022-11-13 20:00", uid: "盛航航", op: "work", msg: "本日工作内容:美缝,装油烟机,打包快递(全天)" }, + { aid: 4, date: "2022-11-14 20:00", uid: "盛航航", op: "work", msg: "本日工作内容:买油烟管道(全天)" }, + + { aid: 4, date: "2022-10-12 20:00", uid: "庞哲昊", op: "work", msg: "本日工作内容:检查管道(3小时)" }, + { aid: 4, date: "2022-10-15 20:00", uid: "庞哲昊", op: "work", msg: "本日工作内容:清洗厨房物具(白天)" }, + + { aid: 4, date: "2022-11-12 20:00", uid: "梁卫天", op: "work", msg: "本日工作内容:打扫卫生,包徽章快递(7小时)" }, + { aid: 4, date: "2022-11-13 20:00", uid: "梁卫天", op: "work", msg: "本日工作内容:拍摄,挪东西,包徽章快递(全天)" }, + + { aid: 4, date: "2022-10-15 20:00", uid: "田浩楠", op: "work", msg: "本日工作内容:拆除原有木板,清洗厨具(全天)" }, + { aid: 4, date: "2022-10-18 20:00", uid: "田浩楠", op: "work", msg: "本日工作内容:搬运轻质砖水泥瓷砖(6小时)" }, + { aid: 4, date: "2022-10-22 20:00", uid: "田浩楠", op: "work", msg: "本日工作内容:搬运轻质砖水泥瓷砖(6小时)" }, + { aid: 4, date: "2022-11-13 20:00", uid: "田浩楠", op: "work", msg: "本日工作内容:包徽章快递(5小时)" }, + + { aid: 4, date: "2022-10-15 20:00", uid: "蔡思忘", op: "work", msg: "本日工作内容:清洗厨房物具(3小时)" }, + { aid: 4, date: "2022-10-22 20:00", uid: "蔡思忘", op: "work", msg: "本日工作内容:搬砖(3小时)" }, + { aid: 4, date: "2022-11-01 20:00", uid: "蔡思忘", op: "work", msg: "本日工作内容:搬砖(3小时)" }, + { aid: 4, date: "2022-11-09 20:00", uid: "蔡思忘", op: "work", msg: "本日工作内容:美缝(2小时)" }, + + { aid: 4, date: "2022-10-19 20:00", uid: "陆毅", op: "work", msg: "本日工作内容:拆除原有墙板(3小时)" }, + + { aid: 4, date: "2022-10-12 20:00", uid: "沙名轩", op: "work", msg: "本日工作内容:量尺寸绘图(1小时)" }, + { aid: 4, date: "2022-11-11 20:00", uid: "沙名轩", op: "work", msg: "本日工作内容:贴美缝纸(2小时)" }, + { aid: 4, date: "2022-11-12 20:00", uid: "沙名轩", op: "work", msg: "本日工作内容:贴美缝纸包徽章快递(4小时)" }, + + { aid: 4, date: "2022-11-12 20:00", uid: "杨景然", op: "work", msg: "在 10月12日 至 11月12日 期间参与施工,零散时间拍摄记录设备监控,11月13日及之后由梁卫天接手" }, + + { aid: 4, date: "2022-11-11 20:00", uid: "朱同方", op: "work", msg: "本日工作内容:美缝(约3小时)" }, + { aid: 4, date: "2022-11-12 20:00", uid: "朱同方", op: "work", msg: "本日工作内容:美缝,包徽章快递(约8小时)" }, + { aid: 4, date: "2022-11-13 20:00", uid: "朱同方", op: "work", msg: "本日工作内容:挪东西包徽章快递(约7小时)" }, + + { aid: 4, date: "2022-10-20 20:00", uid: "杨然福", op: "work", msg: "本日工作内容:油烟机清洗(全天)" }, + { aid: 4, date: "2022-10-21 20:00", uid: "杨然福", op: "work", msg: "本日工作内容:拆墙板(全天)" }, + { aid: 4, date: "2022-10-22 20:00", uid: "杨然福", op: "work", msg: "本日工作内容:拆墙板(全天)" }, + { aid: 4, date: "2022-11-11 20:00", uid: "杨然福", op: "work", msg: "本日工作内容:采购厨房用品(全天)" }, + { aid: 4, date: "2022-11-12 20:00", uid: "杨然福", op: "work", msg: "本日工作内容:打美缝胶(全天)" }, + { aid: 4, date: "2022-11-13 20:00", uid: "杨然福", op: "work", msg: "本日工作内容:安装油烟机,包快递(全天)" }, +] +const work: Work[] = activity.map(a => { + const uid = uid_by_name.get(a.uid)! + const op = a.op as "work" | "video" + const utc = new Date(a.date).getTime() + const _id = { aid: a.aid, utc: op === "work" ? rand_utc(utc) : utc } + switch (op) { + case "work": return { _id, uid, op, msg: a.msg! } + case "video": return { _id, uid, op, title: a.msg!, src: a.src! } + } +}) +Deno.writeTextFileSync("json/work.json", JSON.stringify(work)) + diff --git a/ismism.ts/src/db.ts b/ismism.ts/src/db.ts index 68dcc4f..3894c3d 100644 --- a/ismism.ts/src/db.ts +++ b/ismism.ts/src/db.ts @@ -10,6 +10,7 @@ export const coll = { user: db.collection("user"), soc: db.collection("soc"), agenda: db.collection("agenda"), + worker: db.collection("worker"), work: db.collection("work"), fund: db.collection("fund"), dat: db.collection("dat"), @@ -35,29 +36,32 @@ export async function init( await coll.agenda.createIndexes({ indexes: [{ key: { name: 1 }, name: "name", unique: true, + }] + }) + await coll.worker.createIndexes({ + indexes: [{ + key: { "_id.aid": 1, "_id.utc": -1 }, name: "aid-utc" }, { key: { uid: 1 }, name: "uid" - }, { - key: { sid: 1 }, name: "sid" }] }) await coll.work.createIndexes({ indexes: [{ - key: { uid: 1 }, name: "uid" + key: { "_id.aid": 1, "_id.utc": -1 }, name: "aid-utc" }, { - key: { aid: 1 }, name: "aid" + key: { uid: 1 }, name: "uid" }] }) await coll.fund.createIndexes({ indexes: [{ - key: { uid: 1 }, name: "uid" + key: { "_id.aid": 1, "_id.utc": -1 }, name: "aid-utc" }, { - key: { aid: 1 }, name: "aid" + key: { uid: 1 }, name: "uid" }] }) await coll.dat.createIndexes({ indexes: [{ - key: { typ: 1, tid: 1, utc: -1 }, name: "typ-tid-utc" + key: { "_id.aid": 1, typ: 1, "_id.utc": -1 }, name: "aid-typ-utc" }] }) return await db.listCollectionNames() diff --git a/ismism.ts/src/typ.ts b/ismism.ts/src/typ.ts index d5d6a3e..e4f630f 100644 --- a/ismism.ts/src/typ.ts +++ b/ismism.ts/src/typ.ts @@ -20,8 +20,6 @@ export const sid_ofs = 10000 export type Agenda = { _id: number, name: string, - uid: number[], - sid: number[], budget: number, fund: number, expense: number, @@ -35,49 +33,37 @@ export type Goal = { pct: number, } -export type Work = { - _id: number, +export type Worker = { + _id: { aid: number, utc: number }, uid: number, - utc: number, -} & ({ - op: "init", - aid: number, -} | { - op: "goal", - aid: number, - goal: Goal, -} | { - op: "done", - aid: number, - done: string, -} | { - op: "join", - aid: number, role: string, +} + +export type Work = { + _id: { aid: number, utc: number }, + uid: number, +} & ({ + op: "goal", + goal: Goal[], } | { op: "work", - aid: number, msg: string } | { op: "video", - aid: number[], title: string, src: string, }) export type Fund = { - _id: number, + _id: { aid: number, utc: number }, uid: number, - aid: number, fund: number, - utc: number + msg: string, } export type Dat = { - _id: number, - utc: number, + _id: { aid: number, utc: number }, } & ({ - typ: "imgsrc-aid", - tid: number, + typ: "imgsrc", img: { title: string, src: string }[] })