Skip to content

Commit 51675ac

Browse files
Optional reason data
1 parent d0ae003 commit 51675ac

File tree

4 files changed

+76
-12
lines changed

4 files changed

+76
-12
lines changed

lambdas/api-handler/src/handlers/__tests__/get-letters.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ describe('API Lambda handler', () => {
9191
{
9292
id: "l3",
9393
type: "Letter",
94-
attributes: { status: "PENDING", specificationId: "s1", groupId: 'g1', reasonCode: 123, reasonText: "Reason text" }
94+
attributes: { status: "PENDING", specificationId: "s1", groupId: 'g1' }
9595
}
9696
],
9797
};

lambdas/api-handler/src/handlers/get-letters.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const getLetters: APIGatewayProxyHandler = async (event) => {
4040
);
4141

4242
const response = {
43-
data: letters.map((letter: LetterBase) => (mapLetterBaseToApiResource(letter)))
43+
data: letters.map((letter: LetterBase) => (mapLetterBaseToApiResource(letter, { excludeOptional: true })))
4444
};
4545

4646
log.info({

lambdas/api-handler/src/mappers/__tests__/letter-mapper.test.ts

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { mapLetterBaseToApiDocument, mapLetterBaseToApiResource } from '../letter-mapper';
2-
import { Letter, LetterBase } from '../../../../../internal/datastore';
3-
import { LetterApiDocument } from '../../contracts/letter-api';
4-
import { ZodError } from "zod";
2+
import { Letter } from '../../../../../internal/datastore';
3+
import { LetterApiDocument, LetterApiResource } from '../../contracts/letter-api';
54

65
describe('letter-mapper', () => {
76
it('maps a Letter to LetterApiDocument', () => {
@@ -34,7 +33,7 @@ describe('letter-mapper', () => {
3433
});
3534
});
3635

37-
it('maps a Letter to LetterApiDocument with reasonCode and reasonText', () => {
36+
it('maps a Letter to LetterApiDocument with reasonCode and reasonText when present', () => {
3837
const letter: Letter = {
3938
id: 'abc123',
4039
status: 'PENDING',
@@ -51,7 +50,7 @@ describe('letter-mapper', () => {
5150
reasonText: 'Reason text'
5251
};
5352

54-
const result: LetterApiDocument = mapLetterBaseToApiDocument(letter);
53+
const result: LetterApiDocument = mapLetterBaseToApiDocument(letter, {excludeOptional:false});
5554

5655
expect(result).toEqual({
5756
data: {
@@ -67,4 +66,69 @@ describe('letter-mapper', () => {
6766
}
6867
});
6968
});
69+
70+
it('maps a Letter to LetterApiDocument without reasonCode and reasonText when present', () => {
71+
const letter: Letter = {
72+
id: 'abc123',
73+
status: 'PENDING',
74+
supplierId: 'supplier1',
75+
specificationId: 'spec123',
76+
groupId: 'group123',
77+
url: 'https://example.com/letter/abc123',
78+
createdAt: new Date().toISOString(),
79+
updatedAt: new Date().toISOString(),
80+
supplierStatus: 'supplier1#PENDING',
81+
supplierStatusSk: Date.now().toString(),
82+
ttl: 123,
83+
reasonCode: 123,
84+
reasonText: 'Reason text'
85+
};
86+
87+
const result: LetterApiDocument = mapLetterBaseToApiDocument(letter, {excludeOptional: true});
88+
89+
expect(result).toEqual({
90+
data: {
91+
id: 'abc123',
92+
type: 'Letter',
93+
attributes: {
94+
specificationId: 'spec123',
95+
status: 'PENDING',
96+
groupId: 'group123'
97+
}
98+
}
99+
});
100+
});
101+
102+
103+
it('maps a Letter to LetterApiResource with reasonCode and reasonText when present', () => {
104+
const letter: Letter = {
105+
id: 'abc123',
106+
status: 'PENDING',
107+
supplierId: 'supplier1',
108+
specificationId: 'spec123',
109+
groupId: 'group123',
110+
url: 'https://example.com/letter/abc123',
111+
createdAt: new Date().toISOString(),
112+
updatedAt: new Date().toISOString(),
113+
supplierStatus: 'supplier1#PENDING',
114+
supplierStatusSk: Date.now().toString(),
115+
ttl: 123,
116+
reasonCode: 123,
117+
reasonText: 'Reason text'
118+
};
119+
120+
const result: LetterApiResource = mapLetterBaseToApiResource(letter);
121+
122+
expect(result).toEqual({
123+
id: 'abc123',
124+
type: 'Letter',
125+
attributes: {
126+
specificationId: 'spec123',
127+
status: 'PENDING',
128+
groupId: 'group123',
129+
reasonCode: 123,
130+
reasonText: 'Reason text'
131+
}
132+
});
133+
});
70134
});
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { LetterBase } from "../../../../internal/datastore";
22
import { LetterApiDocument, LetterApiDocumentSchema, LetterApiResource, LetterApiResourceSchema } from '../contracts/letter-api';
33

4-
export function mapLetterBaseToApiDocument(letterBase: LetterBase): LetterApiDocument {
4+
export function mapLetterBaseToApiDocument(letterBase: LetterBase, opts: { excludeOptional: boolean } = { excludeOptional: false }): LetterApiDocument {
55
return LetterApiDocumentSchema.parse({
6-
data: mapLetterBaseToApiResource(letterBase)
6+
data: mapLetterBaseToApiResource(letterBase, opts)
77
});
88
}
99

10-
export function mapLetterBaseToApiResource(letterBase: LetterBase): LetterApiResource {
10+
export function mapLetterBaseToApiResource(letterBase: LetterBase, opts: { excludeOptional: boolean } = { excludeOptional: false }): LetterApiResource {
1111
return LetterApiResourceSchema.parse({
1212
id: letterBase.id,
1313
type: 'Letter',
1414
attributes: {
1515
status: letterBase.status,
1616
specificationId: letterBase.specificationId,
1717
groupId: letterBase.groupId,
18-
...(letterBase.reasonCode && { reasonCode: letterBase.reasonCode }),
19-
...(letterBase.reasonText && { reasonText: letterBase.reasonText })
18+
...(letterBase.reasonCode && !opts.excludeOptional && { reasonCode: letterBase.reasonCode }),
19+
...(letterBase.reasonText && !opts.excludeOptional && { reasonText: letterBase.reasonText })
2020
}
2121
});
2222
}

0 commit comments

Comments
 (0)