import axios from "axios"; import { CustomError } from "@nimee/error-handler"; const port = process.env.USER_PORT; const basePath = process.env.IS_LOCAL === "true" ? `http://127.0.0.1:${port}` : "http://user"; const segmentUrl = `${basePath}/user/segment`; export class SegmentClient { async addUsersToSegment(params: { jwt: string; marketplaceId: string; sellerId: string; segmentId: string; endUsers: string[]; }) { const { jwt, marketplaceId, sellerId, segmentId, endUsers } = params; if (!jwt || !marketplaceId || !sellerId || !segmentId || !endUsers) { throw new CustomError("param_are_missing_in_addUsersToSegment", 400, `params are: ${JSON.stringify(params)}`); } const response = await axios.post( `${segmentUrl}/addEndUsers/${marketplaceId}/${sellerId}/${segmentId}`, { endUsers }, { headers: { jwt } } ); return response?.data; } async getEndUserSegmentsBySegmentsIds(params: { marketplaceId: string; jwt: string; sellerId: string; segmentsIds: string[]; endUserId: string; }) { const { jwt, sellerId, segmentsIds, endUserId, marketplaceId } = params; if (!jwt || !sellerId || !segmentsIds || !endUserId || !marketplaceId) { throw new CustomError("param_are_missing_in_isEndUserInsideSegments", 400, `params are: ${JSON.stringify(params)}`); } const response = await axios.post( `${segmentUrl}/findEndUserSegmentsBySegmentsIdsAndEndUserId/${marketplaceId}`, { segmentsIds, endUserId, sellerId }, { headers: { jwt } } ); return response?.data; } async getEndUsersBySegmentId(params: { jwt: string; marketplaceId: string; sellerId: string; segmentId: string; shouldPopulateEndUser?: boolean; }) { const { jwt, marketplaceId, sellerId, segmentId, shouldPopulateEndUser = true } = params; if (!jwt || !marketplaceId || !sellerId || !segmentId) { throw new CustomError( "param_are_missing_in_getEndUsersBySegmentId", 400, `params are: ${JSON.stringify(params)}` ); } const response = await axios.get( `${segmentUrl}/getEndUsersBySegmentId/${marketplaceId}/${sellerId}/${segmentId}?shouldPopulateEndUser=${shouldPopulateEndUser}`, { headers: { jwt } } ); return response?.data; } async getEndUsersBySegmentIdPaginated(params: { jwt: string; marketplaceId: string; sellerId: string; segmentId: string; shouldPopulateEndUser?: boolean; offset: number; limit: number; }) { const { jwt, marketplaceId, sellerId, segmentId, shouldPopulateEndUser = true, offset, limit } = params; if (!jwt || !marketplaceId || !sellerId || !segmentId || offset === undefined || limit === undefined) { throw new CustomError( "param_are_missing_in_getEndUsersBySegmentIdPaginated", 400, `params are: ${JSON.stringify(params)}` ); } const response = await axios.get( `${segmentUrl}/getEndUsersBySegmentIdPaginated/${marketplaceId}/${sellerId}/${segmentId}?shouldPopulateEndUser=${shouldPopulateEndUser}&offset=${offset}&limit=${limit}`, { headers: { jwt } } ); return response?.data; } }