Преглед на файлове

feat(api): update cintas summary endpoints with weekId ordering and enhanced response structure

- Changed week ordering from ascending to descending by weekId
- Added id and weekId fields to summary response objects
- Updated frontend to handle both API response formats for backwards compatibility
- Improved summary data handling with proper array validation
vidane преди 6 месеца
родител
ревизия
a58f1a308b
променени са 2 файла, в които са добавени 34 реда и са изтрити 9 реда
  1. 7 4
      app/api/imports/[id]/summary/route.ts
  2. 27 5
      app/cintas-calendar-summary/page.tsx

+ 7 - 4
app/api/imports/[id]/summary/route.ts

@@ -35,7 +35,7 @@ export async function GET(
 
         const cintasSummaries = await prisma.cintasSummary.findMany({
             where: { importId },
-            orderBy: { week: 'asc' }
+            orderBy: { weekId: 'desc' }
         });
 
         // Get file info
@@ -47,11 +47,13 @@ export async function GET(
             totalRecords,
             totalWeeks: cintasSummaries.length,
             cintasSummaries: cintasSummaries.map((summary: any) => ({
+                id: summary.id,
                 week: summary.week,
                 trrTotal: summary.trrTotal,
                 fourWkAverages: summary.fourWkAverages,
                 trrPlus4Wk: summary.trrPlus4Wk,
-                powerAdds: summary.powerAdds
+                powerAdds: summary.powerAdds,
+                weekId: summary.weekId
             }))
         };
 
@@ -125,7 +127,6 @@ export async function POST(
             });
         }
 
-        // Execute the stored procedure to generate summary
         await prisma.$executeRawUnsafe(
             `CALL cintas_calculate_summary(${importId})`
         );
@@ -141,11 +142,13 @@ export async function POST(
             summaryGenerated: true,
             message: 'Summary generated successfully',
             summary: cintasSummaries.map((summary: any) => ({
+                id: summary.id,
                 week: summary.week,
                 trrTotal: summary.trrTotal,
                 fourWkAverages: summary.fourWkAverages,
                 trrPlus4Wk: summary.trrPlus4Wk,
-                powerAdds: summary.powerAdds
+                powerAdds: summary.powerAdds,
+                weekId: summary.weekId
             }))
         });
 

+ 27 - 5
app/cintas-calendar-summary/page.tsx

@@ -166,10 +166,21 @@ export default function CintasCalendarSummaryPage() {
       const data = await response.json();
 
       if (response.ok) {
-        setSummaryData(data.summary || []);
-        setSummaryExists(true);
+        // Handle both possible data structures from the API
+        let summaries = [];
+
+        if (data.summary && data.summary.cintasSummaries) {
+          summaries = data.summary.cintasSummaries;
+        } else if (Array.isArray(data.summary)) {
+          summaries = data.summary;
+        } else if (data.summary) {
+          summaries = data.summary;
+        }
+
+        setSummaryData(Array.isArray(summaries) ? summaries : []);
+        setSummaryExists(summaries.length > 0);
 
-        if (data.summaryGenerated) {
+        if (data.summaryGenerated || summaries.length > 0) {
           setCurrentStep(4);
           setViewMode('summary');
         }
@@ -193,8 +204,19 @@ export default function CintasCalendarSummaryPage() {
 
       if (response.ok) {
         setSelectedImport(importRecord);
-        setSummaryData(data.summary?.cintasSummaries || []);
-        setSummaryExists(data.summaryExists);
+
+        // Handle both possible data structures
+        let summaries = [];
+        if (data.summary?.cintasSummaries) {
+          summaries = data.summary.cintasSummaries;
+        } else if (Array.isArray(data.summary)) {
+          summaries = data.summary;
+        } else if (data.summary && data.summary.cintasSummaries) {
+          summaries = data.summary.cintasSummaries;
+        }
+
+        setSummaryData(summaries);
+        setSummaryExists(summaries.length > 0);
         setViewMode('summary');
       } else {
         throw new Error(data.error || 'Failed to load summary');