You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.3 KiB
84 lines
2.3 KiB
import type {Pool} from "mysql2/promise";
|
|
|
|
import type Scope from "$lib/models/scope";
|
|
import type { ScopeEntry, ScopeInput } from "$lib/models/scope";
|
|
import type { ScopeRepo } from "../interfaces";
|
|
|
|
export default class MysqlDBScopes implements ScopeRepo {
|
|
userId: string;
|
|
connection: Pool;
|
|
|
|
constructor(connection: Pool, userId: string) {
|
|
this.connection = connection;
|
|
this.userId = userId;
|
|
}
|
|
|
|
async find(id: number): Promise<Scope> {
|
|
const [[scopeRows], [projectRows], [statRows]] = await Promise.all([
|
|
this.connection.execute(`
|
|
SELECT scope.*, scope_member.name as display_name
|
|
FROM scope
|
|
INNER JOIN scope_member ON scope.id = scope_member.scope_id
|
|
WHERE scope.id = ?
|
|
`, [id]),
|
|
this.connection.execute(`
|
|
SELECT id,name,status
|
|
FROM project
|
|
WHERE scope_id = ?
|
|
`, [id]).catch(() => []),
|
|
this.connection.execute(`
|
|
SELECT *
|
|
FROM stats
|
|
WHERE scope_id = ?
|
|
`, [id]).catch(() => []),
|
|
]);
|
|
|
|
const r = scopeRows[0] as any;
|
|
if (!r) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
id: r.id,
|
|
name: r.name,
|
|
abbreviation: r.abbreviation,
|
|
displayName: r.display_name,
|
|
projects: ((projectRows||[]) as any[]).map((p:any) => ({
|
|
id: p.id,
|
|
name: p.name,
|
|
status: p.status,
|
|
})),
|
|
stats: ((statRows||[]) as any[]).map((s:any) => ({
|
|
id: s.id,
|
|
name: s.name,
|
|
weight: s.weight,
|
|
description: s.description,
|
|
allowedAmounts: s.allowed_amounts || void(0),
|
|
})),
|
|
}
|
|
}
|
|
async list(): Promise<ScopeEntry[]> {
|
|
const [rows] = await this.connection.execute(`
|
|
SELECT scope.*, scope_member.name as display_name
|
|
FROM scope
|
|
INNER JOIN scope_member ON id = scope_id
|
|
WHERE user_id = ?
|
|
`, [this.userId]);
|
|
|
|
return (rows as any[]).map(r => ({
|
|
id: r.id,
|
|
name: r.name,
|
|
abbreviation: r.abbreviation,
|
|
displayName: r.display_name,
|
|
}))
|
|
}
|
|
create(input: ScopeInput): Promise<Scope> {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
update(id: number, input: Partial<ScopeInput>): Promise<Scope> {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
delete(id: number): Promise<void> {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
}
|