@@ -45,13 +45,62 @@ const tool = ({ pathName }: { pathName: string | undefined }) => {
4545 const linkID = req . params . link ;
4646 const linkTag = req . query . tag ;
4747 const linkVendors = req . query . vendors ;
48+ const bulkLinkList = req . query . links ;
49+
50+ /**
51+ Bulk request for multiple link IDs.
52+ */
53+ if ( linkID === "bulk" && bulkLinkList ) {
54+ const linkIDs : string [ ] = bulkLinkList . split ( "," ) ;
55+ if ( ! linkIDs . length )
56+ return res . json ( {
57+ status : 500 ,
58+ message : "No link IDs found." ,
59+ } ) ;
60+
61+ let status = 200 ;
62+ let message = undefined ;
63+
64+ if ( linkIDs . length > 10 ) {
65+ status = 206 ;
66+ message = "Trimmed link ID list to the maximum of 10." ;
67+ linkIDs = arr . slice ( 0 , 10 ) ;
68+ }
69+
70+ const dbDocuments =
71+ ( await Links . find (
72+ {
73+ link : { $in : linkIDs } ,
74+ } ,
75+ { _id : 0 } // remove _id keys for the first level
76+ )
77+ . cache ( 60 * 10 ) // cache links for 10 min
78+ . exec ( ) ) || [ ] ;
79+
80+ return res . json ( {
81+ status,
82+ message,
83+ group : dbDocuments . map ( ( { vendors, link, tags } ) => ( {
84+ link,
85+ vendors : ( vendors || [ ] ) . map ( ( { name, url, value } ) => ( {
86+ // explicitly define return keys
87+ name,
88+ url,
89+ value,
90+ } ) ) ,
91+ tags,
92+ } ) ) ,
93+ } ) ;
94+ }
4895
4996 /**
5097 Group/list of links with a particular tag.
5198 */
5299 const isGroupRequest = linkTag && linkID === "group" ;
53100 const dbDocument = isGroupRequest
54101 ? await Links . find ( { tags : { $in : [ linkTag ] } } )
102+ . cache ( 60 * 10 ) // cache links for 10 min
103+ . exec ( )
55104 : await Links . findOne ( { link : linkID } )
56105 . cache ( 60 * 10 ) // cache links for 10 min
57106 . exec ( ) ;
0 commit comments