skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
122 lines • 4.8 kB
JavaScript
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