skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
119 lines • 3.74 kB
JavaScript
import { PlanService } from "../services/PlanService";
/**
* Lista todos los planes con sus features (público, para landingpage).
*/
export const listPublicPlans = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const plans = await PlanService.listPublicPlans(req.tenantPrisma);
return res.status(200).json(plans.map((plan) => ({
...plan,
features: plan.planFeatures?.map((f) => f.feature) || [],
})));
}
catch (err) {
return res
.status(500)
.json({ error: err.message || "Error al listar planes públicos." });
}
};
/**
* CRUD protegido: listar todos los planes.
*/
export const listPlans = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const plans = await PlanService.listPlans(req.tenantPrisma);
return res.status(200).json(plans.map((plan) => ({
...plan,
features: plan.planFeatures?.map((f) => f.feature) || [],
})));
}
catch (err) {
return res
.status(500)
.json({ error: err.message || "Error al listar planes." });
}
};
/**
* Crear un nuevo plan.
*/
export const createPlan = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const { name, description, price, type, featureIds } = req.body;
const plan = await PlanService.createPlan(req.tenantPrisma, name, description, price, type, featureIds);
return res.status(201).json({
...plan,
features: plan.planFeatures?.map((f) => f.feature) || [],
});
}
catch (err) {
return res
.status(500)
.json({ error: err.message || "Error al crear plan." });
}
};
/**
* Actualizar un plan.
*/
export const updatePlan = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const { id } = req.params;
if (!id) {
return res.status(400).json({ error: "ID is required" });
}
const { name, description, price, type, featureIds } = req.body;
const plan = await PlanService.updatePlan(req.tenantPrisma, id, name, description, price, type, featureIds);
return res.status(200).json({
...plan,
features: plan.planFeatures?.map((f) => f.feature) || [],
});
}
catch (err) {
return res
.status(500)
.json({ error: err.message || "Error al actualizar plan." });
}
};
/**
* Eliminar un plan.
*/
export const deletePlan = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const { id } = req.params;
if (!id) {
return res.status(400).json({ error: "ID is required" });
}
await PlanService.deletePlan(req.tenantPrisma, id);
return res.status(204).send();
}
catch (err) {
return res
.status(500)
.json({ error: err.message || "Error al eliminar plan." });
}
};
//# sourceMappingURL=planController.js.map