aut 数据操作 #45

This commit is contained in:
728
2023-11-10 11:12:50 +08:00
parent 658ec8f722
commit a91b8762b3
3 changed files with 46 additions and 1 deletions

32
eid/aut.ts Normal file
View File

@@ -0,0 +1,32 @@
import type { Aut, Usr } from "./typ.ts"
import { DocR, DocU, coll } from "./db.ts"
import { is_aut, is_in } from "./is.ts"
export async function aut(
): DocR<Omit<Aut, "_id">> {
return await coll.aut.findOne({ _id: 1 }, { projection: { _id: 0 } }) ?? null
}
export async function aut_f(
usr: Usr["_id"],
): Promise<(keyof Omit<Aut, "_id">)[]> {
const a = await aut()
if (!a) return []
const l: (keyof Omit<Aut, "_id">)[] = []
if (is_in(a.sup, usr)) l.push("sup")
if (is_in(a.aut, usr)) l.push("aut")
if (is_in(a.wsl, usr)) l.push("wsl")
if (is_in(a.lit, usr)) l.push("lit")
return l
}
export async function aut_u(
a: Omit<Aut, "_id">,
): DocU {
if (!is_aut({ _id: 1, ...a })) return null
try {
const { matchedCount, modifiedCount } = await coll.aut.updateOne({ _id: 1 }, { $set: a })
if (matchedCount > 0) return modifiedCount > 0 ? 1 : 0
else return null
} catch { return null }
}

View File

@@ -36,6 +36,12 @@ export function is_idl(
) {
return idl.length <= len && idl.every(is_id)
}
export function is_in(
idl: Id["_id"][],
id: Id["_id"],
) {
return idl.includes(id)
}
export function is_utc(
utc: number,
) {

View File

@@ -3,7 +3,8 @@ import { usr_c, usr_d, usr_r, usr_u } from "../eid/usr.ts"
import { soc_c, soc_d, soc_r, soc_u } from "../eid/soc.ts"
import { agd_c, agd_d, agd_r, agd_u } from "../eid/agd.ts"
import { assertEquals } from "./mod.test.ts"
import { msg_c, msg_f, msg_r, msg_u } from "../eid/msg.ts";
import { msg_c, msg_f, msg_r, msg_u } from "../eid/msg.ts"
import { aut, aut_f, aut_u } from "../eid/aut.ts"
await db("tst", true)
@@ -58,3 +59,9 @@ Deno.test("msg", async () => {
assertEquals("msg2", m2?.msg)
assertEquals([m1?._id, m2?._id], (await msg_f(coll.wsl)).map(m => m._id))
})
Deno.test("aut", async () => {
assertEquals({ sup: [1, 2], aut: [2], wsl: [], lit: [] }, await aut())
assertEquals(1, await aut_u({ sup: [1, 2], aut: [2, 3], wsl: [3, 4], lit: [3, 4] }))
assertEquals(["aut", "wsl", "lit"], await aut_f(3))
})