@@ -253,6 +253,97 @@ export async function getSubmittedResponse({
253253 } ;
254254}
255255
256+ // Get all responses received for forms owned by the current user
257+ export async function getAllReceivedResponses ( {
258+ user,
259+ } : {
260+ user : { id : string } ;
261+ } ) {
262+ const responses = await prisma . formResponse . findMany ( {
263+ where : {
264+ form : {
265+ ownerId : user . id ,
266+ } ,
267+ } ,
268+ select : {
269+ id : true ,
270+ formId : true ,
271+ answers : true ,
272+ isSubmitted : true ,
273+ submittedAt : true ,
274+ updatedAt : true ,
275+ respondent : {
276+ select : {
277+ name : true ,
278+ email : true ,
279+ } ,
280+ } ,
281+ form : {
282+ select : {
283+ title : true ,
284+ } ,
285+ } ,
286+ } ,
287+ orderBy : {
288+ updatedAt : "desc" ,
289+ } ,
290+ } ) ;
291+
292+ if ( responses . length === 0 ) {
293+ logger . info ( `No received responses found for user ${ user . id } ` ) ;
294+ return {
295+ success : true ,
296+ message : "No responses found" ,
297+ data : [ ] ,
298+ } ;
299+ }
300+
301+ // Collect all unique formIds to batch-fetch fields
302+ const formIds = [ ...new Set ( responses . map ( ( r ) => r . formId ) ) ] ;
303+ const allFields = await prisma . formFields . findMany ( {
304+ where : { formId : { in : formIds } } ,
305+ select : { id : true , fieldName : true , formId : true } ,
306+ } ) ;
307+
308+ const fieldMapByForm : Record < string , Record < string , string > > = { } ;
309+ for ( const f of allFields ) {
310+ if ( ! fieldMapByForm [ f . formId ] ) fieldMapByForm [ f . formId ] = { } ;
311+ fieldMapByForm [ f . formId ] [ f . id ] = f . fieldName ;
312+ }
313+
314+ const formattedResponses = responses . map ( ( r ) => {
315+ const fieldIdToNameMap = fieldMapByForm [ r . formId ] ?? { } ;
316+ const transformedAnswers : Record < string , unknown > = { } ;
317+ for ( const [ fieldId , value ] of Object . entries (
318+ r . answers as Record < string , unknown > ,
319+ ) ) {
320+ const fieldName = fieldIdToNameMap [ fieldId ] ?? fieldId ;
321+ transformedAnswers [ fieldName ] = value ;
322+ }
323+
324+ return {
325+ id : r . id ,
326+ formId : r . formId ,
327+ formName : r . form . title ,
328+ responder : r . respondent ?. name ?? "Anonymous" ,
329+ email : r . respondent ?. email ?? "" ,
330+ answers : transformedAnswers ,
331+ isSubmitted : r . isSubmitted ,
332+ status : r . isSubmitted ? "Completed" : "Draft" ,
333+ createdAt : r . submittedAt ?? r . updatedAt ,
334+ } ;
335+ } ) ;
336+
337+ logger . info (
338+ `Retrieved ${ formattedResponses . length } received responses for user ${ user . id } ` ,
339+ ) ;
340+ return {
341+ success : true ,
342+ message : "Responses retrieved successfully" ,
343+ data : formattedResponses ,
344+ } ;
345+ }
346+
256347// Get all responses submitted by the current user across all forms
257348export async function getAllUserResponses ( { user } : { user : { id : string } } ) {
258349 const responses = await prisma . formResponse . findMany ( {
0 commit comments