88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
import axios from 'axios';
|
|
|
|
import type { GetMessageListResponse } from '~/lib/types/medipost';
|
|
import { MedipostAction } from '~/lib/types/medipost';
|
|
import type { MedipostOrderResponse } from '@/packages/shared/src/types/medipost-analysis';
|
|
|
|
import { validateMedipostResponse } from './medipostValidate.service';
|
|
import { parseXML } from '../util/xml.service';
|
|
import { getLatestMessage } from './medipostMessageBase.service';
|
|
|
|
const BASE_URL = process.env.MEDIPOST_URL!;
|
|
const USER = process.env.MEDIPOST_USER!;
|
|
const PASSWORD = process.env.MEDIPOST_PASSWORD!;
|
|
|
|
const IS_ENABLED_DELETE_PRIVATE_MESSAGE =
|
|
process.env.MEDIPOST_ENABLE_DELETE_RESPONSE_PRIVATE_MESSAGE_ON_READ ===
|
|
'true';
|
|
|
|
export default class MedipostMessageClient {
|
|
public async getLatestPrivateMessageListItem({
|
|
excludedMessageIds,
|
|
}: {
|
|
excludedMessageIds: string[];
|
|
}) {
|
|
const { data } = await axios.get<GetMessageListResponse>(BASE_URL, {
|
|
params: {
|
|
Action: MedipostAction.GetPrivateMessageList,
|
|
User: USER,
|
|
Password: PASSWORD,
|
|
},
|
|
});
|
|
|
|
if (data.code && data.code !== 0) {
|
|
throw new Error('Failed to get private message list');
|
|
}
|
|
|
|
return await getLatestMessage({
|
|
messages: data?.messages,
|
|
excludedMessageIds,
|
|
});
|
|
}
|
|
|
|
public async getPrivateMessage(messageId: string) {
|
|
const { data } = await axios.get(BASE_URL, {
|
|
params: {
|
|
Action: MedipostAction.GetPrivateMessage,
|
|
User: USER,
|
|
Password: PASSWORD,
|
|
MessageId: messageId,
|
|
},
|
|
headers: {
|
|
Accept: 'application/xml',
|
|
},
|
|
});
|
|
|
|
await validateMedipostResponse(data, { canHaveEmptyCode: true });
|
|
|
|
return {
|
|
message: (await parseXML(data)) as MedipostOrderResponse,
|
|
xml: data as string,
|
|
};
|
|
}
|
|
|
|
public async deletePrivateMessage({
|
|
medipostPrivateMessageId,
|
|
}: {
|
|
medipostPrivateMessageId: string;
|
|
}) {
|
|
if (!IS_ENABLED_DELETE_PRIVATE_MESSAGE) {
|
|
console.info(`Skipping delete private message id=${medipostPrivateMessageId} because deleting is not enabled`);
|
|
return;
|
|
}
|
|
|
|
const { data } = await axios.get(BASE_URL, {
|
|
params: {
|
|
Action: MedipostAction.DeletePrivateMessage,
|
|
User: USER,
|
|
Password: PASSWORD,
|
|
MessageId: medipostPrivateMessageId,
|
|
},
|
|
});
|
|
|
|
if (data.code && data.code !== 0) {
|
|
throw new Error(`Failed to delete private message (id: ${medipostPrivateMessageId})`);
|
|
}
|
|
}
|
|
}
|