import axios from "axios"; import { CustomError } from "@nimee/error-handler"; import { IDiningBalanceResponse, IDiningCommitCreateResult } from "@nimee/shared-types"; const port = process.env.CRM_PORT; const basePath = process.env.IS_LOCAL === "true" ? `http://127.0.0.1:${port}` : "http://crm"; const crmUrl = `${basePath}/crm`; export class CrmClient { async getEndUsersByCrmEventType(params: { jwt: string; marketplaceId: string; sellerId: string; crmEventType: string }) { const { jwt, marketplaceId, sellerId, crmEventType } = params; if (!jwt || !marketplaceId || !sellerId || !crmEventType) { throw new CustomError("param_are_missing_in_getEndUsersByCrmEventType", 400, `params are: ${params}`); } const response = await axios.get(`${crmUrl}/getEndUsersByCrmEventType/${marketplaceId}/${sellerId}/${crmEventType}`, { headers: { jwt }, }); return response?.data; } async createVisit(params: { jwt: string; marketplaceId: string; sellerId: string; endUserId: string; guests: number; endUserSeasonTicketId?: string; seasonTicketId?: string; scannerSessionId?: string; }) { const { jwt, marketplaceId, sellerId, endUserId, guests, endUserSeasonTicketId, seasonTicketId, scannerSessionId } = params; if (!jwt || !marketplaceId || !sellerId || !endUserId || guests === undefined) { throw new CustomError("param_are_missing_in_createVisit", 400, `params are: ${JSON.stringify(params)}`); } const response = await axios.post( `${crmUrl}/visit/${marketplaceId}/${sellerId}/${endUserId}`, { guests, endUserSeasonTicketId, seasonTicketId, scannerSessionId }, { headers: { jwt } } ); return response?.data; } async createAutoExitVisit(params: { jwt: string; marketplaceId: string; sellerId: string; endUserId: string; guests: number; endUserSeasonTicketId: string; seasonTicketId: string; scannerSessionId: string; }): Promise<{ visit: any; todayVisits: any[] }> { const { jwt, marketplaceId, sellerId, endUserId, guests, endUserSeasonTicketId, seasonTicketId, scannerSessionId } = params; if (!jwt || !marketplaceId || !sellerId || !endUserId || !endUserSeasonTicketId || !seasonTicketId || !scannerSessionId || guests === undefined) { throw new CustomError("param_are_missing_in_createAutoExitVisit", 400, `params are: ${JSON.stringify(params)}`); } const response = await axios.post( `${crmUrl}/visit/${marketplaceId}/${sellerId}/${endUserId}`, { guests, autoExit: true, endUserSeasonTicketId, seasonTicketId, scannerSessionId }, { headers: { jwt } } ); return response?.data; } async createDiningCommit(params: { jwt: string; marketplaceId: string; sellerId: string; endUserId: string; amount: number; orderId: string; orderTotal?: number; orderOpenTime?: string; orderEndTime?: string; items?: unknown[]; siteName?: string; endUserName?: string; endUserPhone?: string; customer?: Record; }): Promise { const { jwt, marketplaceId, sellerId, endUserId, amount, orderId, ...rest } = params; if (!jwt || !marketplaceId || !sellerId || !endUserId || !orderId || amount === undefined) { throw new CustomError( "param_are_missing_in_createDiningCommit", 400, `params are: ${JSON.stringify({ marketplaceId, sellerId, endUserId, orderId, amount })}` ); } const response = await axios.post( `${crmUrl}/dining/commit/${marketplaceId}/${sellerId}/${endUserId}`, { amount, orderId, ...rest }, { headers: { jwt } } ); return response?.data; } async getDiningBalance(params: { jwt: string; marketplaceId: string; sellerId: string; endUserId: string; }): Promise { const { jwt, marketplaceId, sellerId, endUserId } = params; if (!jwt || !marketplaceId || !sellerId || !endUserId) { throw new CustomError( "param_are_missing_in_getDiningBalance", 400, `params are: ${JSON.stringify({ marketplaceId, sellerId, endUserId })}` ); } const response = await axios.get(`${crmUrl}/dining/balance/${marketplaceId}/${sellerId}/${endUserId}`, { headers: { jwt }, }); return response?.data; } }