import express from 'express'; import * as timeTrackingController from '../controllers/time-tracking.controller.js'; import { authenticate } from '../middlewares/auth/authMiddleware.js'; import { validateBody, validateParams } from '../middlewares/security/validateInput.js'; import { startTimeEntrySchema, stopTimeEntrySchema, updateTimeEntrySchema, } from '../validators/crm.validators.js'; import { z } from 'zod'; const router = express.Router(); // All time tracking routes require authentication router.use(authenticate); /** * Time Tracking management */ // Start new time entry router.post('/start', validateBody(startTimeEntrySchema), timeTrackingController.startTimeEntry); // Stop running time entry router.post( '/:entryId/stop', validateParams(z.object({ entryId: z.string().uuid() })), validateBody(stopTimeEntrySchema), timeTrackingController.stopTimeEntry ); // Get running time entry router.get('/running', timeTrackingController.getRunningTimeEntry); // Get all running time entries (for dashboard) router.get('/running-all', timeTrackingController.getAllRunningTimeEntries); // Get all time entries with filters router.get('/', timeTrackingController.getAllTimeEntries); // Get monthly time entries router.get( '/month/:year/:month', validateParams( z.object({ year: z.string().regex(/^\d{4}$/, 'Rok musí byť 4-ciferné číslo'), month: z.string().regex(/^(0?[1-9]|1[0-2])$/, 'Mesiac musí byť číslo 1-12'), }) ), timeTrackingController.getMonthlyTimeEntries ); // Generate monthly timesheet (XLSX) router.post( '/month/:year/:month/generate', validateParams( z.object({ year: z.string().regex(/^\d{4}$/, 'Rok musí byť 4-ciferné číslo'), month: z.string().regex(/^(0?[1-9]|1[0-2])$/, 'Mesiac musí byť číslo 1-12'), }) ), timeTrackingController.generateMonthlyTimesheet ); // Get monthly statistics router.get( '/stats/monthly/:year/:month', validateParams( z.object({ year: z.string().regex(/^\d{4}$/, 'Rok musí byť 4-ciferné číslo'), month: z.string().regex(/^(0?[1-9]|1[0-2])$/, 'Mesiac musí byť číslo 1-12'), }) ), timeTrackingController.getMonthlyStats ); // Get time entry by ID router.get( '/:entryId', validateParams(z.object({ entryId: z.string().uuid() })), timeTrackingController.getTimeEntryById ); // Get time entry with relations router.get( '/:entryId/details', validateParams(z.object({ entryId: z.string().uuid() })), timeTrackingController.getTimeEntryWithRelations ); // Update time entry router.patch( '/:entryId', validateParams(z.object({ entryId: z.string().uuid() })), validateBody(updateTimeEntrySchema), timeTrackingController.updateTimeEntry ); // Delete time entry router.delete( '/:entryId', validateParams(z.object({ entryId: z.string().uuid() })), timeTrackingController.deleteTimeEntry ); export default router;