skailan-crm
Version:
Servicio de CRM y gestión de ventas para Skailan
174 lines • 6.34 kB
JavaScript
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