UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

197 lines 7.26 kB
import { CreateQuote } from "../../app/use-cases/CreateQuote"; import { GetQuoteById } from "../../app/use-cases/GetQuoteById"; import { ListQuotes } from "../../app/use-cases/ListQuotes"; import { UpdateQuote } from "../../app/use-cases/UpdateQuote"; import { DeleteQuote } from "../../app/use-cases/DeleteQuote"; import { IncrementQuoteVersion } from "../../app/use-cases/IncrementQuoteVersion"; import { QuotePrismaRepository } from "../../infra/database/prisma/QuotePrismaRepository"; import { OpportunityPrismaRepository } from "../../infra/database/prisma/OpportunityPrismaRepository"; export const createQuote = async (req, res) => { try { const { opportunityId, quoteNumber, totalAmount } = req.body; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteRepository = new QuotePrismaRepository(prisma); const opportunityRepository = new OpportunityPrismaRepository(prisma); const createQuoteUseCase = new CreateQuote(quoteRepository, opportunityRepository); const newQuote = await createQuoteUseCase.execute({ organizationId, opportunityId, quoteNumber, totalAmount, }); res.status(201).json(newQuote); } catch (error) { res.status(500).json({ error: error.message || "Error creating quote." }); } }; export const getQuoteById = async (req, res) => { try { const { id } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!id) { return res.status(400).json({ error: "Quote ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteRepository = new QuotePrismaRepository(prisma); const getQuoteByIdUseCase = new GetQuoteById(quoteRepository); const quote = await getQuoteByIdUseCase.execute({ id, organizationId, }); if (!quote) { return res.status(404).json({ error: "Quote not found." }); } res.status(200).json(quote); } catch (error) { res.status(500).json({ error: error.message || "Error retrieving quote." }); } }; export const listQuotes = async (req, res) => { try { const organizationId = req.organization?.id; const opportunityId = req.query.opportunityId; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteRepository = new QuotePrismaRepository(prisma); const listQuotesUseCase = new ListQuotes(quoteRepository); const quotes = await listQuotesUseCase.execute({ organizationId, opportunityId, }); res.status(200).json(quotes); } catch (error) { res.status(500).json({ error: error.message || "Error listing quotes." }); } }; export const updateQuote = async (req, res) => { try { const { id } = req.params; const { status, totalAmount, version, signedAt, signedBy } = req.body; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!id) { return res.status(400).json({ error: "Quote ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteRepository = new QuotePrismaRepository(prisma); const updateQuoteUseCase = new UpdateQuote(quoteRepository); const updatedQuote = await updateQuoteUseCase.execute({ id, organizationId, status, totalAmount, version, signedAt: signedAt ? new Date(signedAt) : undefined, signedBy, }); res.status(200).json(updatedQuote); } catch (error) { res.status(500).json({ error: error.message || "Error updating quote." }); } }; export const deleteQuote = async (req, res) => { try { const { id } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!id) { return res.status(400).json({ error: "Quote ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteRepository = new QuotePrismaRepository(prisma); const deleteQuoteUseCase = new DeleteQuote(quoteRepository); await deleteQuoteUseCase.execute({ id, organizationId, }); res.status(204).send(); } catch (error) { res.status(500).json({ error: error.message || "Error deleting quote." }); } }; export const incrementQuoteVersion = async (req, res) => { try { const { id } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!id) { return res.status(400).json({ error: "Quote ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteRepository = new QuotePrismaRepository(prisma); const incrementQuoteVersionUseCase = new IncrementQuoteVersion(quoteRepository); const updatedQuote = await incrementQuoteVersionUseCase.execute({ id, organizationId, }); res.status(200).json(updatedQuote); } catch (error) { res .status(500) .json({ error: error.message || "Error incrementing quote version." }); } }; //# sourceMappingURL=quoteController.js.map