adds statistics
This commit is contained in:
@@ -1,16 +1,44 @@
|
||||
import { Router } from 'express';
|
||||
import { requireAuth } from '../middleware/auth';
|
||||
import { validateBody, validateParams, validateQuery } from '../middleware/validation';
|
||||
import { TimeEntryService } from '../services/timeEntry.service';
|
||||
import { CreateTimeEntrySchema, UpdateTimeEntrySchema, IdSchema, TimeEntryFiltersSchema } from '../schemas';
|
||||
import type { AuthenticatedRequest } from '../types';
|
||||
import { Router } from "express";
|
||||
import { requireAuth } from "../middleware/auth";
|
||||
import {
|
||||
validateBody,
|
||||
validateParams,
|
||||
validateQuery,
|
||||
} from "../middleware/validation";
|
||||
import { TimeEntryService } from "../services/timeEntry.service";
|
||||
import {
|
||||
CreateTimeEntrySchema,
|
||||
UpdateTimeEntrySchema,
|
||||
IdSchema,
|
||||
TimeEntryFiltersSchema,
|
||||
StatisticsFiltersSchema,
|
||||
} from "../schemas";
|
||||
import type { AuthenticatedRequest } from "../types";
|
||||
|
||||
const router = Router();
|
||||
const timeEntryService = new TimeEntryService();
|
||||
|
||||
// GET /api/time-entries/statistics - Get aggregated statistics
|
||||
router.get(
|
||||
"/statistics",
|
||||
requireAuth,
|
||||
validateQuery(StatisticsFiltersSchema),
|
||||
async (req: AuthenticatedRequest, res, next) => {
|
||||
try {
|
||||
const stats = await timeEntryService.getStatistics(
|
||||
req.user!.id,
|
||||
req.query,
|
||||
);
|
||||
res.json(stats);
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// GET /api/time-entries - List user's entries
|
||||
router.get(
|
||||
'/',
|
||||
"/",
|
||||
requireAuth,
|
||||
validateQuery(TimeEntryFiltersSchema),
|
||||
async (req: AuthenticatedRequest, res, next) => {
|
||||
@@ -20,12 +48,12 @@ router.get(
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// POST /api/time-entries - Create entry manually
|
||||
router.post(
|
||||
'/',
|
||||
"/",
|
||||
requireAuth,
|
||||
validateBody(CreateTimeEntrySchema),
|
||||
async (req: AuthenticatedRequest, res, next) => {
|
||||
@@ -35,28 +63,32 @@ router.post(
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// PUT /api/time-entries/:id - Update entry
|
||||
router.put(
|
||||
'/:id',
|
||||
"/:id",
|
||||
requireAuth,
|
||||
validateParams(IdSchema),
|
||||
validateBody(UpdateTimeEntrySchema),
|
||||
async (req: AuthenticatedRequest, res, next) => {
|
||||
try {
|
||||
const entry = await timeEntryService.update(req.params.id, req.user!.id, req.body);
|
||||
const entry = await timeEntryService.update(
|
||||
req.params.id,
|
||||
req.user!.id,
|
||||
req.body,
|
||||
);
|
||||
res.json(entry);
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// DELETE /api/time-entries/:id - Delete entry
|
||||
router.delete(
|
||||
'/:id',
|
||||
"/:id",
|
||||
requireAuth,
|
||||
validateParams(IdSchema),
|
||||
async (req: AuthenticatedRequest, res, next) => {
|
||||
@@ -66,7 +98,7 @@ router.delete(
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export default router;
|
||||
export default router;
|
||||
|
||||
Reference in New Issue
Block a user