src/server/lib/idapi/newsletters.ts (111 lines of code) (raw):

import { idapiFetch, APIGetOptions, APIPatchOptions, APIPostOptions, APIAddOAuthAuthorization, } from '@/server/lib/IDAPIFetch'; import { NewslettersErrors } from '@/shared/model/Errors'; import { NewsLetter } from '@/shared/model/Newsletter'; import { logger } from '@/server/lib/serverSideLogger'; import { IdapiError } from '@/server/models/Error'; import { NewsletterPatch } from '@/shared/model/NewsletterPatch'; interface NewsletterAPIResponse { id: string; theme: string; name: string; description: string; frequency: string; subscribed: boolean; exactTargetListId: number; } const handleError = () => { throw new IdapiError({ message: NewslettersErrors.GENERIC, status: 500 }); }; const responseToEntity = (newsletter: NewsletterAPIResponse): NewsLetter => { const { name, description, frequency, exactTargetListId, id } = newsletter; return { id: exactTargetListId.toString(), description, name, frequency, nameId: id, }; }; export const read = async (): Promise<NewsLetter[]> => { const options = APIGetOptions(); try { return ( (await idapiFetch({ path: '/newsletters', options, })) as NewsletterAPIResponse[] ).map(responseToEntity); } catch (error) { logger.error(`IDAPI Error newsletters read '/newsletters'`, error); return handleError(); } }; export const update = async ({ accessToken, payload, }: { accessToken: string; payload: NewsletterPatch[]; }) => { const options = APIAddOAuthAuthorization( APIPatchOptions(payload), accessToken, ); try { await idapiFetch({ path: '/users/me/newsletters', options, }); return; } catch (error) { logger.error( `IDAPI Error newsletters update '/users/me/newsletters'`, error, ); return handleError(); } }; interface Subscription { listId: number; } export const readUserNewsletters = async ({ accessToken, }: { ip?: string; accessToken: string; }) => { const options = APIAddOAuthAuthorization(APIGetOptions(), accessToken); try { return ( await idapiFetch({ path: '/users/me/newsletters', options, }) ).result.subscriptions.map((s: Subscription) => s.listId.toString()); } catch (error) { logger.error( `IDAPI Error readUserNewsletters '/users/me/newsletters'`, error, ); return handleError(); } }; export const touchBraze = async ({ accessToken }: { accessToken: string }) => { const options = APIAddOAuthAuthorization(APIPostOptions(), accessToken); try { await idapiFetch({ path: '/users/me/touch-braze', options, }); return; } catch (error) { logger.error(`IDAPI Error touchBraze '/users/me/touch-braze'`, error); return handleError(); } };