Files
crm-server/src/routes/company.routes.js
richardtekula ffaf916f5e Add dueDate to reminders, remove reminder from notes
Schema changes:
- Added dueDate field to companyReminders table
- Removed reminderDate and reminderSent from notes table

Backend changes:
- Updated company-reminder.service with dueDate handling
- Added getUpcomingReminders function for dashboard
- Simplified note.service (removed reminder logic)
- Updated validators and routes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 11:21:54 +01:00

135 lines
3.4 KiB
JavaScript

import express from 'express';
import * as companyController from '../controllers/company.controller.js';
import { authenticate } from '../middlewares/auth/authMiddleware.js';
import { validateBody, validateParams } from '../middlewares/security/validateInput.js';
import { createCompanySchema, updateCompanySchema, createCompanyReminderSchema, updateCompanyReminderSchema } from '../validators/crm.validators.js';
import { z } from 'zod';
const router = express.Router();
// All company routes require authentication
router.use(authenticate);
// Reminder summaries (must be before :companyId routes)
router.get('/reminders/summary', companyController.getReminderSummary);
router.get('/reminders/counts', companyController.getReminderCountsByCompany);
router.get('/reminders/upcoming', companyController.getUpcomingReminders);
// Company unread email summary
router.get('/email-unread', companyController.getCompanyUnreadCounts);
// Company email threads
router.get(
'/:companyId/email-threads',
validateParams(z.object({ companyId: z.string().uuid() })),
companyController.getCompanyEmailThreads
);
/**
* Company management
*/
// Get all companies
router.get('/', companyController.getAllCompanies);
// Get company by ID
router.get(
'/:companyId',
validateParams(z.object({ companyId: z.string().uuid() })),
companyController.getCompanyById
);
// Create new company
router.post(
'/',
validateBody(createCompanySchema),
companyController.createCompany
);
// Update company
router.patch(
'/:companyId',
validateParams(z.object({ companyId: z.string().uuid() })),
validateBody(updateCompanySchema),
companyController.updateCompany
);
// Delete company
router.delete(
'/:companyId',
validateParams(z.object({ companyId: z.string().uuid() })),
companyController.deleteCompany
);
// Company Notes (nested resources)
router.get(
'/:companyId/notes',
validateParams(z.object({ companyId: z.string().uuid() })),
companyController.getCompanyNotes
);
router.post(
'/:companyId/notes',
validateParams(z.object({ companyId: z.string().uuid() })),
validateBody(z.object({
content: z.string().min(1),
})),
companyController.addCompanyNote
);
router.patch(
'/:companyId/notes/:noteId',
validateParams(z.object({
companyId: z.string().uuid(),
noteId: z.string().uuid()
})),
validateBody(z.object({
content: z.string().min(1).optional(),
})),
companyController.updateCompanyNote
);
router.delete(
'/:companyId/notes/:noteId',
validateParams(z.object({
companyId: z.string().uuid(),
noteId: z.string().uuid()
})),
companyController.deleteCompanyNote
);
// Company reminders
router.get(
'/:companyId/reminders',
validateParams(z.object({ companyId: z.string().uuid() })),
companyController.getCompanyReminders
);
router.post(
'/:companyId/reminders',
validateParams(z.object({ companyId: z.string().uuid() })),
validateBody(createCompanyReminderSchema),
companyController.createCompanyReminder
);
router.patch(
'/:companyId/reminders/:reminderId',
validateParams(z.object({
companyId: z.string().uuid(),
reminderId: z.string().uuid()
})),
validateBody(updateCompanyReminderSchema),
companyController.updateCompanyReminder
);
router.delete(
'/:companyId/reminders/:reminderId',
validateParams(z.object({
companyId: z.string().uuid(),
reminderId: z.string().uuid()
})),
companyController.deleteCompanyReminder
);
export default router;