Select Git revision
pdm_build.py
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
MrX.entity.ts 1.83 KiB
import { sql } from "../db";
export class MrXEntry {
id!: number;
mrx!: number;
time!: Date;
text!: string|null;
image!: string|null;
static parse(data: any): MrXEntry|undefined {
if(!data) return;
return Object.assign(new MrXEntry(), data, { time: new Date(data.time) });
}
static async create(entry: Omit<MrXEntry, "id">): Promise<number> {
return (await sql`INSERT INTO mrx_entries ${sql(entry)} RETURNING id`)[0].id;
}
static async update(id: number, entry: Partial<MrXEntry>): Promise<void> {
await sql`UPDATE mrx_entries SET ${sql(entry)} WHERE id=${id}`;
}
static async delete(id: number): Promise<void> {
await sql`DELETE FROM mrx_entries WHERE id = ${id}`;
}
}
export class MrX {
id!: number;
name!: string;
entries!: MrXEntry[];
static parse(data: any): MrX|undefined {
if(!data) return;
const m = Object.assign(new MrX(), data);
m.entries = (data.entries as any[] || [])
.map(e => MrXEntry.parse(e))
.filter(e=>!!e)
.sort((a,b)=>b.time.getTime()-a.time.getTime());
return m;
}
static async getById(id: number): Promise<MrX|undefined> {
const row = (await sql`SELECT row_to_json(mrx.*) AS mr_x, json_agg(row_to_json(mrx_entries.*)) AS entries FROM mrx LEFT JOIN mrx_entries ON mrx.id = mrx_entries.mrx WHERE mrx.id = ${id} GROUP BY mrx.id`)[0];
if(!row) return;
return MrX.parse(Object.assign(row.mrX, { entries: row.entries }));
}
static async getAll(): Promise<MrX[]> {
const rows = await sql`SELECT row_to_json(mrx.*) AS mr_x, json_agg(row_to_json(mrx_entries.*)) AS entries FROM mrx LEFT JOIN mrx_entries ON mrx.id = mrx_entries.mrx GROUP BY mrx.id`;
return rows.map((row: any) => MrX.parse(Object.assign(row.mrX, { entries: row.entries }))!);
}
static async create(mrX: Omit<MrX, "id"|"entries">): Promise<number> {
return (await sql`INSERT INTO mrx ${sql(mrX)} RETURNING id`)[0].id;
}
}