11import { APIGatewayProxyHandler } from 'aws-lambda' ;
22import { getLetterIdsForSupplier } from '../services/letter-operations' ;
33import { createLetterRepository } from '../infrastructure/letter-repo-factory' ;
4+ import { Letter } from '../../../../internal/datastore/src' ;
45
56const letterRepo = createLetterRepository ( ) ;
67
78export const getLetters : APIGatewayProxyHandler = async ( event ) => {
89
910 if ( event . path === '/letters' ) {
1011
11- // default to supplier1 for now
12- const supplierId = event . headers [ 'nhsd-apim-apikey' ] ;
12+ const supplierId = event . headers [ 'nhsd-supplier-id' ] ;
1313
14- const letterIds = await getLetterIdsForSupplier ( supplierId , letterRepo ) ;
14+ if ( ! supplierId ) {
15+ return {
16+ statusCode : 400 ,
17+ body : "Bad Request: Missing supplier ID"
18+ } ;
19+ }
1520
16- const response = createGetLettersResponse ( event . path , letterIds ) ;
21+ const status = event . queryStringParameters ?. status ;
22+
23+ if ( ! status ) {
24+ return {
25+ statusCode : 400 ,
26+ body : "Bad Request: Missing required query parameter 'status'" ,
27+ } ;
28+ }
29+
30+ let size = event . queryStringParameters ?. size ;
31+
32+ if ( ! size ) {
33+ size = '10' ;
34+ }
35+
36+ const cursor = event . queryStringParameters ?. cursor ;
37+
38+ const letters = await getLetterIdsForSupplier ( supplierId , status , Number ( size ) , letterRepo , cursor ) ;
39+
40+ const response = createGetLettersResponse ( event . path , letters , supplierId ) ;
1741
1842 return {
1943 statusCode : 200 ,
@@ -35,19 +59,24 @@ interface GetLettersLinks {
3559 prev ?: string ;
3660}
3761
38- interface Resource {
39- type : string ;
40- id : string ;
41- }
62+ type LetterResponse = Omit < Letter , "supplierId" | "supplierStatus" | "ttl" > ;
63+
4264
4365interface GetLettersResponse {
4466 links : GetLettersLinks ;
45- data : Resource [ ] ;
67+ data : {
68+ type : 'Letters' ;
69+ supplierId : string ;
70+ attributes : {
71+ letters : Array < LetterResponse > ;
72+ }
73+ } ;
4674}
4775
4876function createGetLettersResponse (
4977 baseUrl : string ,
50- letters : string [ ]
78+ letters : Letter [ ] ,
79+ supplierId : string ,
5180) : GetLettersResponse {
5281 return {
5382 links : {
@@ -57,9 +86,20 @@ function createGetLettersResponse(
5786 next : `${ baseUrl } ?page=1` ,
5887 prev : `${ baseUrl } ?page=1`
5988 } ,
60- data : letters . map ( ( letterId ) => ( {
61- type : "letter" ,
62- id : letterId ,
63- } ) ) ,
89+ data : {
90+ type : 'Letters' ,
91+ supplierId,
92+ attributes : {
93+ letters : letters . map ( ( letter ) => ( {
94+ id : letter . id ,
95+ specificationId : letter . specificationId ,
96+ groupId : letter . groupId ,
97+ url : letter . url ,
98+ status : letter . status ,
99+ createdAt : letter . createdAt ,
100+ updatedAt : letter . updatedAt ,
101+ } ) ) ,
102+ }
103+ }
64104 } ;
65105}
0 commit comments