import { Modules } from "../Modules"; import { CourierUserPreferences, CourierUserPreferencesChannel, CourierUserPreferencesStatus, CourierUserPreferencesTopic } from "../models/CourierUserPreferences"; export class PreferenceClient { readonly clientId: string; constructor(clientId: string) { this.clientId = clientId; } /** * Retrieves user preferences. * @param props - Optional properties for pagination. * @param props.paginationCursor - Optional cursor for pagination. * @returns A promise that resolves with CourierUserPreferences containing user preference items and paging information. */ public async getUserPreferences(props?: { paginationCursor?: string }): Promise { const json = await Modules.Client.getUserPreferences(this.clientId, props?.paginationCursor); const rawData = JSON.parse(json); return { items: rawData.items.map((item: any) => ({ defaultStatus: item.default_status as CourierUserPreferencesStatus, hasCustomRouting: item.has_custom_routing, customRouting: item.custom_routing.map((channel: string) => channel as CourierUserPreferencesChannel), status: item.status as CourierUserPreferencesStatus, topicId: item.topic_id, topicName: item.topic_name, sectionName: item.section_name, sectionId: item.section_id })), paging: rawData.paging }; } /** * Retrieves user preference for a specific topic. * @param props - Properties for getting the user preference topic. * @param props.topicId - The ID of the topic to retrieve preferences for. * @returns A promise that resolves with CourierUserPreferencesTopic containing the topic preference details. */ public async getUserPreferenceTopic(props: { topicId: string }): Promise { const json = await Modules.Client.getUserPreferenceTopic(this.clientId, props.topicId); const rawData = JSON.parse(json); const convertedTopic: CourierUserPreferencesTopic = { defaultStatus: rawData.default_status as CourierUserPreferencesStatus, hasCustomRouting: rawData.has_custom_routing, customRouting: rawData.custom_routing.map((channel: string) => channel as CourierUserPreferencesChannel), status: rawData.status as CourierUserPreferencesStatus, topicId: rawData.topic_id, topicName: rawData.topic_name, sectionName: rawData.section_name, sectionId: rawData.section_id }; return convertedTopic; } /** * Updates user preference for a specific topic. * @param props - Properties for updating the user preference topic. * @param props.topicId - The ID of the topic to update preferences for. * @param props.status - The new status for the topic preference. * @param props.hasCustomRouting - Whether the topic has custom routing. * @param props.customRouting - Array of custom routing channels. * @returns A promise that resolves when the update is complete. */ public async putUserPreferenceTopic(props: { topicId: string, status: CourierUserPreferencesStatus, hasCustomRouting: boolean, customRouting: CourierUserPreferencesChannel[] }): Promise { await Modules.Client.putUserPreferenceTopic(this.clientId, props.topicId, props.status, props.hasCustomRouting, props.customRouting); } }