108 lines
4.7 KiB
TypeScript
108 lines
4.7 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import * as projectService from '../services/projectService.js';
|
|
import { IAppUser } from '../middleware/roleMiddleware.js';
|
|
import { notificationService } from '../services/notificationService.js';
|
|
|
|
interface AuthRequest extends Request {
|
|
appUser?: IAppUser;
|
|
}
|
|
|
|
export const createProject = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
console.log('Backend creating project. Body:', req.body);
|
|
const organizationId = req.appUser?.organizationId;
|
|
const project = await projectService.createProject({ ...req.body, organizationId });
|
|
console.log('Project created successfully:', project._id);
|
|
res.status(201).json(project);
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(500).json({ error: message });
|
|
}
|
|
};
|
|
|
|
export const getAllProjects = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
const organizationId = req.appUser?.organizationId;
|
|
const isGlobalAdmin = req.appUser?.email === 'admtracksteel@gmail.com';
|
|
const { status } = req.query;
|
|
const projects = await projectService.getAllProjects(organizationId, isGlobalAdmin, status as string);
|
|
res.json(projects);
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(500).json({ error: message });
|
|
}
|
|
};
|
|
|
|
export const archiveProject = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
const organizationId = req.appUser?.organizationId;
|
|
const isGlobalAdmin = req.appUser?.email === 'admtracksteel@gmail.com';
|
|
const project = await projectService.archiveProject(req.params.id as string, organizationId, isGlobalAdmin);
|
|
res.json(project);
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(500).json({ error: message });
|
|
}
|
|
};
|
|
|
|
export const getDashboardProjects = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
const organizationId = req.appUser?.organizationId;
|
|
const projects = await projectService.getDashboardProjects(organizationId);
|
|
res.json(projects);
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(500).json({ error: message });
|
|
}
|
|
};
|
|
|
|
export const getProjectById = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
const organizationId = req.appUser?.organizationId;
|
|
const isGlobalAdmin = req.appUser?.email === 'admtracksteel@gmail.com';
|
|
const project = await projectService.getProjectById(req.params.id as string, organizationId, isGlobalAdmin);
|
|
res.json(project);
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(404).json({ error: message });
|
|
}
|
|
};
|
|
|
|
export const updateProject = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
const organizationId = req.appUser?.organizationId;
|
|
const isGlobalAdmin = req.appUser?.email === 'admtracksteel@gmail.com';
|
|
const project = await projectService.updateProject(req.params.id as string, req.body, organizationId, isGlobalAdmin);
|
|
|
|
// Notificação se Peso mudar (Exemplo simplificado, idealmente compararíamos com valor anterior)
|
|
// Como o update retorna o objeto atualizado, podemos assumir que se o body tem weightKg, houve intenção de mudar.
|
|
// Para ser mais preciso, deveríamos buscar o antigo antes, mas para MVP vamos notificar se houver o campo no body.
|
|
if (req.body.weightKg !== undefined && organizationId) {
|
|
await notificationService.create({
|
|
organizationId,
|
|
title: 'Atualização de Obra',
|
|
message: `O peso da obra "${project.name}" foi atualizado para ${project.weightKg}kg.`,
|
|
type: 'info',
|
|
metadata: { projectId: project._id, triggerType: 'project_update' }
|
|
});
|
|
}
|
|
|
|
res.json(project);
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(500).json({ error: message });
|
|
}
|
|
};
|
|
|
|
export const deleteProject = async (req: AuthRequest, res: Response) => {
|
|
try {
|
|
const organizationId = req.appUser?.organizationId;
|
|
const isGlobalAdmin = req.appUser?.email === 'admtracksteel@gmail.com';
|
|
await projectService.deleteProject(req.params.id as string, organizationId, isGlobalAdmin);
|
|
res.status(204).send();
|
|
} catch (error: unknown) {
|
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
res.status(500).json({ error: message });
|
|
}
|
|
};
|