/ src / lib / utils / wave / signupSources.ts
signupSources.ts
 1  import z from 'zod';
 2  import { authenticatedCall } from './call';
 3  import parseRes from './utils/parse-res';
 4  import {
 5    paginatedResponseSchema,
 6    type PaginationInput,
 7    toPaginationParams,
 8  } from './types/pagination';
 9  
10  export const signupSourceSchema = z.object({
11    id: z.string(),
12    code: z.string(),
13    name: z.string(),
14    signupCount: z.number().int(),
15    createdBy: z.object({
16      id: z.string(),
17      gitHubUsername: z.string(),
18    }),
19    createdAt: z.coerce.date(),
20    deactivatedAt: z.coerce.date().nullable(),
21  });
22  
23  export type SignupSource = z.infer<typeof signupSourceSchema>;
24  
25  export async function listSignupSources(
26    f = fetch,
27    pagination?: PaginationInput,
28    includeDeactivated = false,
29  ) {
30    const params = new URLSearchParams(toPaginationParams(pagination));
31  
32    if (includeDeactivated) {
33      params.append('includeDeactivated', 'true');
34    }
35  
36    const queryString = params.toString();
37    const path = `/api/admin/signup-sources${queryString ? `?${queryString}` : ''}`;
38  
39    const res = await authenticatedCall(f, path);
40  
41    return parseRes(paginatedResponseSchema(signupSourceSchema), res);
42  }
43  
44  export async function createSignupSource(f = fetch, data: { code: string; name: string }) {
45    await authenticatedCall(f, '/api/admin/signup-sources', {
46      method: 'POST',
47      body: JSON.stringify(data),
48    });
49  }