Skip to content

Commit 30cbeee

Browse files
committed
CCM-12613: Upload to PDM component
1 parent 43b126b commit 30cbeee

File tree

3 files changed

+63
-15
lines changed

3 files changed

+63
-15
lines changed

lambdas/upload-to-pdm-lambda/src/__tests__/apis/sqs-trigger-lambda.test.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ describe('sqs-trigger-lambda', () => {
7979

8080
describe('successful processing', () => {
8181
it('should process single message successfully', async () => {
82-
mockUploadToPdm.send.mockResolvedValue({ outcome: 'sent' });
82+
mockUploadToPdm.send.mockResolvedValue({
83+
outcome: 'sent',
84+
resourceId: 'resource-123',
85+
});
8386
const handler = createHandler({
8487
uploadToPdm: mockUploadToPdm,
8588
eventPublisher: mockEventPublisher,
@@ -218,7 +221,10 @@ describe('sqs-trigger-lambda', () => {
218221

219222
describe('event publishing', () => {
220223
it('should handle partial event publishing failure for successful events', async () => {
221-
mockUploadToPdm.send.mockResolvedValue({ outcome: 'sent' });
224+
mockUploadToPdm.send.mockResolvedValue({
225+
outcome: 'sent',
226+
resourceId: 'resource-123',
227+
});
222228
mockEventPublisher.sendEvents.mockResolvedValue([
223229
{ itemIdentifier: 'failed-event' },
224230
] as any);
@@ -241,7 +247,10 @@ describe('sqs-trigger-lambda', () => {
241247
});
242248

243249
it('should handle event publishing exception for successful events', async () => {
244-
mockUploadToPdm.send.mockResolvedValue({ outcome: 'sent' });
250+
mockUploadToPdm.send.mockResolvedValue({
251+
outcome: 'sent',
252+
resourceId: 'resource-123',
253+
});
245254
mockEventPublisher.sendEvents.mockRejectedValue(
246255
new Error('EventBridge error'),
247256
);
@@ -313,7 +322,7 @@ describe('sqs-trigger-lambda', () => {
313322
describe('mixed outcomes', () => {
314323
it('should handle mix of successful and failed uploads', async () => {
315324
mockUploadToPdm.send
316-
.mockResolvedValueOnce({ outcome: 'sent' })
325+
.mockResolvedValueOnce({ outcome: 'sent', resourceId: 'resource-123' })
317326
.mockResolvedValueOnce({ outcome: 'failed' });
318327
const handler = createHandler({
319328
uploadToPdm: mockUploadToPdm,

lambdas/upload-to-pdm-lambda/src/apis/sqs-trigger-lambda.ts

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@ import type {
99
UploadToPdmOutcome,
1010
UploadToPdmResult,
1111
} from 'app/upload-to-pdm';
12-
import { $TtlItemBusEvent, EventPublisher, Logger, TtlItemEvent } from 'utils';
12+
import {
13+
$TtlItemBusEvent,
14+
EventPublisher,
15+
Logger,
16+
PdmResourceRejectedEvent,
17+
PdmResourceSubmittedEvent,
18+
} from 'utils';
1319

1420
interface ProcessingResult {
1521
result: UploadToPdmResult;
16-
item?: TtlItemEvent;
22+
item?: PdmResourceSubmittedEvent | PdmResourceRejectedEvent;
1723
}
1824

1925
interface CreateHandlerDependencies {
@@ -64,8 +70,8 @@ async function processRecord(
6470

6571
function categorizeResults(
6672
results: PromiseSettledResult<ProcessingResult>[],
67-
successfulEvents: TtlItemEvent[],
68-
failedEvents: TtlItemEvent[],
73+
successfulEvents: PdmResourceSubmittedEvent[],
74+
failedEvents: PdmResourceRejectedEvent[],
6975
logger: Logger,
7076
): Record<UploadToPdmOutcome | 'retrieved', number> {
7177
const processed: Record<UploadToPdmOutcome | 'retrieved', number> = {
@@ -80,10 +86,26 @@ function categorizeResults(
8086
processed[itemResult.outcome] += 1;
8187

8288
if (item) {
83-
if (itemResult.outcome === 'sent') {
84-
successfulEvents.push(item);
89+
if (itemResult.outcome === 'sent' && itemResult.resourceId) {
90+
successfulEvents.push({
91+
...item,
92+
data: {
93+
'digital-letter-id': item.data['digital-letter-id'],
94+
messageReference: item.data.messageReference,
95+
senderId: item.data.senderId,
96+
resourceId: itemResult.resourceId,
97+
retryCount: 0,
98+
},
99+
});
85100
} else {
86-
failedEvents.push(item);
101+
failedEvents.push({
102+
...item,
103+
data: {
104+
'digital-letter-id': item.data['digital-letter-id'],
105+
messageReference: item.data.messageReference,
106+
senderId: item.data.senderId,
107+
},
108+
});
87109
}
88110
}
89111
} else {
@@ -96,7 +118,7 @@ function categorizeResults(
96118
}
97119

98120
async function publishSuccessfulEvents(
99-
successfulEvents: TtlItemEvent[],
121+
successfulEvents: PdmResourceSubmittedEvent[],
100122
eventPublisher: EventPublisher,
101123
logger: Logger,
102124
): Promise<void> {
@@ -129,7 +151,7 @@ async function publishSuccessfulEvents(
129151
}
130152

131153
async function publishFailedEvents(
132-
failedEvents: TtlItemEvent[],
154+
failedEvents: PdmResourceRejectedEvent[],
133155
eventPublisher: EventPublisher,
134156
logger: Logger,
135157
): Promise<void> {
@@ -168,8 +190,8 @@ export const createHandler = ({
168190
}: CreateHandlerDependencies) =>
169191
async function handler(sqsEvent: SQSEvent): Promise<SQSBatchResponse> {
170192
const batchItemFailures: SQSBatchItemFailure[] = [];
171-
const successfulEvents: TtlItemEvent[] = [];
172-
const failedEvents: TtlItemEvent[] = [];
193+
const successfulEvents: PdmResourceSubmittedEvent[] = [];
194+
const failedEvents: PdmResourceRejectedEvent[] = [];
173195

174196
const promises = sqsEvent.Records.map((record) =>
175197
processRecord(record, uploadToPdm, logger, batchItemFailures),

utils/utils/src/types/ttl-item-event.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,20 @@ export type TtlItemBusEvent = z.infer<typeof $TtlItemBusEvent>;
2222
export const validateTtlItemEvent = (data: unknown) => {
2323
return $TtlItemEvent.safeParse(data);
2424
};
25+
26+
export const $PdmResourceSubmittedData = $CloudEventData.extend({
27+
resourceId: z.string(),
28+
retryCount: z.number(),
29+
});
30+
31+
export const $PdmResourceSubmittedEvent = $CloudEvent.extend({
32+
data: $PdmResourceSubmittedData,
33+
});
34+
35+
export type PdmResourceSubmittedEvent = z.infer<typeof $PdmResourceSubmittedEvent>;
36+
37+
export const $PdmResourceRejectedEvent = $CloudEvent.extend({
38+
data: $CloudEventData,
39+
});
40+
41+
export type PdmResourceRejectedEvent = z.infer<typeof $PdmResourceRejectedEvent>;

0 commit comments

Comments
 (0)