aut 数据操作 #45
This commit is contained in:
32
eid/aut.ts
Normal file
32
eid/aut.ts
Normal 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 }
|
||||
}
|
@@ -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,
|
||||
) {
|
||||
|
@@ -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))
|
||||
})
|
||||
|
Reference in New Issue
Block a user