Move medipostPrivateMessage.service to separate classes, improve logging
This commit is contained in:
87
lib/services/medipost/medipostMessageClient.service.ts
Normal file
87
lib/services/medipost/medipostMessageClient.service.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
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})`);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user