UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

174 lines 6.34 kB
import { CreateQuoteItem } from "../../app/use-cases/CreateQuoteItem"; import { GetQuoteItemById } from "../../app/use-cases/GetQuoteItemById"; import { ListQuoteItems } from "../../app/use-cases/ListQuoteItems"; import { UpdateQuoteItem } from "../../app/use-cases/UpdateQuoteItem"; import { DeleteQuoteItem } from "../../app/use-cases/DeleteQuoteItem"; import { QuoteItemPrismaRepository } from "../../infra/database/prisma/QuoteItemPrismaRepository"; import { QuotePrismaRepository } from "../../infra/database/prisma/QuotePrismaRepository"; export const createQuoteItem = async (req, res) => { try { const { quoteId, productId, quantity, unitPrice, notes } = 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 quoteItemRepository = new QuoteItemPrismaRepository(prisma); const quoteRepository = new QuotePrismaRepository(prisma); const createQuoteItemUseCase = new CreateQuoteItem(quoteItemRepository, quoteRepository); const newQuoteItem = await createQuoteItemUseCase.execute({ organizationId, quoteId, productId, quantity, unitPrice, notes, }); res.status(201).json(newQuoteItem); } catch (error) { res .status(500) .json({ error: error.message || "Error creating quote item." }); } }; export const getQuoteItemById = 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 Item ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteItemRepository = new QuoteItemPrismaRepository(prisma); const getQuoteItemByIdUseCase = new GetQuoteItemById(quoteItemRepository); const quoteItem = await getQuoteItemByIdUseCase.execute({ id, organizationId, }); if (!quoteItem) { return res.status(404).json({ error: "Quote item not found." }); } res.status(200).json(quoteItem); } catch (error) { res .status(500) .json({ error: error.message || "Error retrieving quote item." }); } }; export const listQuoteItems = async (req, res) => { try { const organizationId = req.organization?.id; const quoteId = req.query.quoteId; 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 quoteItemRepository = new QuoteItemPrismaRepository(prisma); const listQuoteItemsUseCase = new ListQuoteItems(quoteItemRepository); const quoteItems = await listQuoteItemsUseCase.execute({ organizationId, quoteId, }); res.status(200).json(quoteItems); } catch (error) { res .status(500) .json({ error: error.message || "Error listing quote items." }); } }; export const updateQuoteItem = async (req, res) => { try { const { id } = req.params; const { quantity, unitPrice, notes } = 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 Item ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteItemRepository = new QuoteItemPrismaRepository(prisma); const updateQuoteItemUseCase = new UpdateQuoteItem(quoteItemRepository); const updatedQuoteItem = await updateQuoteItemUseCase.execute({ id, organizationId, quantity, unitPrice, notes, }); res.status(200).json(updatedQuoteItem); } catch (error) { res .status(500) .json({ error: error.message || "Error updating quote item." }); } }; export const deleteQuoteItem = 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 Item ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const quoteItemRepository = new QuoteItemPrismaRepository(prisma); const deleteQuoteItemUseCase = new DeleteQuoteItem(quoteItemRepository); await deleteQuoteItemUseCase.execute({ id, organizationId, }); res.status(204).send(); } catch (error) { res .status(500) .json({ error: error.message || "Error deleting quote item." }); } }; //# sourceMappingURL=quoteItemController.js.map