61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import { z } from 'zod';
|
|
import sql from '../sql.js';
|
|
|
|
export default class Network {
|
|
schema = z.object({
|
|
name: z.string(),
|
|
apps: z.array(z.string()),
|
|
logo: z.string(),
|
|
abbreviation: z.string(),
|
|
stripeAccountId: z.string().nullable(),
|
|
stripeAccessToken: z.string().nullable()
|
|
}).strict();
|
|
|
|
async get(id) {
|
|
const [network] = await sql`
|
|
SELECT * FROM networks WHERE id = ${id}
|
|
`;
|
|
return network ?? null;
|
|
}
|
|
|
|
async getByAbbreviation(abbreviation) {
|
|
const [network] = await sql`
|
|
SELECT * FROM networks WHERE abbreviation = ${abbreviation}
|
|
`;
|
|
return network ?? null;
|
|
}
|
|
|
|
async update(id, data) {
|
|
if (data.id || data.created) {
|
|
throw new Error("Can't update id or created time!");
|
|
}
|
|
|
|
const [updated] = await sql`
|
|
UPDATE networks SET ${sql(data, ...Object.keys(data))}
|
|
WHERE id = ${id}
|
|
RETURNING *
|
|
`;
|
|
return updated;
|
|
}
|
|
|
|
async add(n) {
|
|
let result = this.schema.safeParse(n);
|
|
if (!result.success) {
|
|
console.error(result.error);
|
|
throw new global.ServerError(400, "Invalid Network Data!");
|
|
}
|
|
|
|
const [network] = await sql`
|
|
INSERT INTO networks ${sql({
|
|
name: n.name,
|
|
apps: n.apps,
|
|
logo: n.logo,
|
|
abbreviation: n.abbreviation,
|
|
stripe_account_id: n.stripeAccountId,
|
|
stripe_access_token: n.stripeAccessToken
|
|
})}
|
|
RETURNING *
|
|
`;
|
|
return network;
|
|
}
|
|
} |