feat: connect pengaduan-layanan-publik to live database
New API Endpoint: - GET /api/complaint/trends - Fetch complaint trends for last 7 months Component Updates: - Removed hardcoded trenData array (7 months mock data) - Removed hardcoded ideInovatif array (2 mock ideas) - Added API calls to /api/complaint/trends and /api/complaint/innovation-ideas - Added loading states for trend chart and innovation ideas - Added empty states for both sections - Connected LineChart to real complaint data - Connected Innovation Ideas list to real InnovationIdea model Features Added: - Real-time complaint trend visualization - Real innovation ideas from database - Proper TypeScript typing for API responses - Loading skeletons during data fetch - Empty state messages when no data Files changed: - src/api/complaint.ts: Added /trends endpoint - src/components/pengaduan-layanan-publik.tsx: Connected to APIs - generated/api.ts: Regenerated types Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -62,6 +62,46 @@ export const complaint = new Elysia({
|
||||
detail: { summary: "Get recent complaints" },
|
||||
},
|
||||
)
|
||||
.get(
|
||||
"/trends",
|
||||
async ({ set }) => {
|
||||
try {
|
||||
// Get last 7 months complaint trends
|
||||
const trends = await prisma.$queryRaw<
|
||||
{ month: string; month_num: number; count: number }[]
|
||||
>`
|
||||
SELECT
|
||||
TO_CHAR("createdAt", 'Mon') as month,
|
||||
EXTRACT(MONTH FROM "createdAt") as month_num,
|
||||
COUNT(*)::INTEGER as count
|
||||
FROM complaint
|
||||
WHERE "createdAt" > NOW() - INTERVAL '7 months'
|
||||
GROUP BY month, month_num
|
||||
ORDER BY month_num ASC
|
||||
`;
|
||||
return { data: trends };
|
||||
} catch (error) {
|
||||
logger.error({ error }, "Failed to fetch complaint trends");
|
||||
set.status = 500;
|
||||
return { error: "Internal Server Error" };
|
||||
}
|
||||
},
|
||||
{
|
||||
response: {
|
||||
200: t.Object({
|
||||
data: t.Array(
|
||||
t.Object({
|
||||
month: t.String(),
|
||||
month_num: t.Number(),
|
||||
count: t.Number(),
|
||||
}),
|
||||
),
|
||||
}),
|
||||
500: t.Object({ error: t.String() }),
|
||||
},
|
||||
detail: { summary: "Get complaint trends for last 7 months" },
|
||||
},
|
||||
)
|
||||
.get(
|
||||
"/service-stats",
|
||||
async ({ set }) => {
|
||||
|
||||
Reference in New Issue
Block a user