2026-07-06 11:26:50 -05:00
|
|
|
// @ts-nocheck — route controller converted to .cts; handler req/res typed, full type-check deferred (thin glue over typed services).
|
|
|
|
|
import type { Req, Res, Next } from '../types/http';
|
2026-05-03 19:51:57 -05:00
|
|
|
const express = require('express');
|
2026-05-16 15:38:28 -05:00
|
|
|
const router = express.Router();
|
2026-07-06 11:16:14 -05:00
|
|
|
const { getTracker, getUpcomingBills, getOverdueCount } = require('../services/trackerService.cts');
|
2026-07-06 14:59:29 -05:00
|
|
|
const { ApiError, ValidationError } = require('../utils/apiError.cts');
|
2026-05-30 13:19:09 -05:00
|
|
|
|
|
|
|
|
// GET /api/tracker/overdue-count — lightweight count for sidebar badge
|
2026-07-06 11:26:50 -05:00
|
|
|
router.get('/overdue-count', (req: Req, res: Res) => {
|
2026-07-06 14:59:29 -05:00
|
|
|
res.json(getOverdueCount(req.user.id));
|
2026-05-30 13:19:09 -05:00
|
|
|
});
|
2026-05-03 19:51:57 -05:00
|
|
|
|
|
|
|
|
// GET /api/tracker?year=2026&month=5
|
2026-07-06 11:26:50 -05:00
|
|
|
router.get('/', (req: Req, res: Res) => {
|
2026-07-06 14:59:29 -05:00
|
|
|
const result = getTracker(req.user.id, req.query);
|
|
|
|
|
if (result.error) throw new ApiError('VALIDATION_ERROR', result.error, result.status || 400);
|
|
|
|
|
res.json(result);
|
2026-05-03 19:51:57 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// GET /api/tracker/upcoming?days=30
|
2026-07-06 11:26:50 -05:00
|
|
|
router.get('/upcoming', (req: Req, res: Res) => {
|
2026-07-06 14:59:29 -05:00
|
|
|
res.json(getUpcomingBills(req.user.id, req.query));
|
2026-05-03 19:51:57 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
module.exports = router;
|