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; } }