UNPKG

skailan-core

Version:

Servicio de autenticación y multitenancy para Skailan.

122 lines 4.8 kB
import { MembershipService } from "../services/membershipService"; export class MembershipController { static async inviteUser(req, res) { try { const { organizationId, email, role } = req.body; const userId = req.user?.id; if (!organizationId || !email) { res.status(400).json({ error: "organizationId y email son requeridos" }); return; } if (!req.tenantPrisma) { res.status(500).json({ error: "Tenant Prisma no disponible" }); return; } const invitation = await MembershipService.inviteUser(req.tenantPrisma, organizationId, email, role); res.status(201).json(invitation); } catch (error) { console.error("Error inviting user:", error); res .status(500) .json({ error: error.message || "Error interno del servidor" }); } } static async acceptInvitation(req, res) { try { const { token } = req.body; if (!token) { res.status(400).json({ error: "Token es requerido" }); return; } if (!req.tenantPrisma) { res.status(500).json({ error: "Tenant Prisma no disponible" }); return; } // Por ahora, solo actualizamos el estado de la membresía const membership = await req.tenantPrisma.membership.update({ where: { id: token }, data: { status: "ACTIVE" }, include: { user: true, organization: true }, }); res.json(membership); } catch (error) { console.error("Error accepting invitation:", error); res .status(500) .json({ error: error.message || "Error interno del servidor" }); } } static async listMembers(req, res) { try { const { organizationId } = req.params; if (!organizationId) { res.status(400).json({ error: "organizationId es requerido" }); return; } if (!req.tenantPrisma) { res.status(500).json({ error: "Tenant Prisma no disponible" }); return; } const members = await MembershipService.getOrganizationMembers(req.tenantPrisma, organizationId); res.json(members); } catch (error) { console.error("Error listing members:", error); res .status(500) .json({ error: error.message || "Error interno del servidor" }); } } static async updateMemberRole(req, res) { try { const { membershipId } = req.params; const { role } = req.body; if (!membershipId || !role) { res.status(400).json({ error: "membershipId y role son requeridos" }); return; } if (!req.tenantPrisma) { res.status(500).json({ error: "Tenant Prisma no disponible" }); return; } const updated = await MembershipService.updateMembership(req.tenantPrisma, membershipId, { role }); res.json(updated); } catch (error) { console.error("Error updating member role:", error); res .status(500) .json({ error: error.message || "Error interno del servidor" }); } } static async removeMember(req, res) { try { const { membershipId } = req.params; if (!membershipId) { res.status(400).json({ error: "membershipId es requerido" }); return; } if (!req.tenantPrisma) { res.status(500).json({ error: "Tenant Prisma no disponible" }); return; } await MembershipService.deleteMembership(req.tenantPrisma, membershipId, "org-id"); res.status(204).send(); } catch (error) { console.error("Error removing member:", error); res .status(500) .json({ error: error.message || "Error interno del servidor" }); } } } // Exportar los métodos individualmente para las rutas export const inviteMember = MembershipController.inviteUser; export const acceptInvitation = MembershipController.acceptInvitation; export const listMembers = MembershipController.listMembers; export const changeRole = MembershipController.updateMemberRole; export const removeMember = MembershipController.removeMember; //# sourceMappingURL=membershipController.js.map