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 }