skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
101 lines • 4.45 kB
JavaScript
import { AuthService } from "../services/AuthService";
export const register = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res.status(500).json({ error: "Prisma client not initialized for tenant." });
}
const { email, password, name } = req.body;
const { user, token } = await AuthService.register(req.tenantPrisma, email, password, name);
return res.status(201).json({ id: user.id, email: user.email, name: user.name, token });
}
catch (err) {
if (err.message === "El email ya está registrado.") {
return res.status(409).json({ error: err.message });
}
return res.status(500).json({ error: err.message || "Error en el registro." });
}
};
export const login = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res.status(500).json({ error: "Prisma client not initialized for tenant." });
}
const { email, password } = req.body;
const { user, token } = await AuthService.login(req.tenantPrisma, email, password);
return res.status(200).json({ id: user.id, email: user.email, name: user.name, token });
}
catch (err) {
if (err.message === "Credenciales inválidas.") {
return res.status(401).json({ error: err.message });
}
return res.status(500).json({ error: err.message || "Error en el login." });
}
};
export const getOrganizations = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res.status(500).json({ error: "Prisma client not initialized for tenant." });
}
const userId = req.user.id;
if (!userId)
return res.status(401).json({ error: "No autenticado." });
const organizations = await AuthService.getOrganizations(req.tenantPrisma, userId);
return res.status(200).json({ organizations });
}
catch (err) {
return res.status(500).json({ error: err.message || "Error al obtener organizaciones." });
}
};
export const switchOrganization = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res.status(500).json({ error: "Prisma client not initialized for tenant." });
}
const userId = req.user.id;
if (!userId)
return res.status(401).json({ error: "No autenticado." });
const { organizationId } = req.body;
const userEmail = req.user.email; // Asumiendo que el email está en el payload del JWT
const { token: newToken, activeOrg } = await AuthService.switchOrganization(req.tenantPrisma, userId, userEmail, organizationId);
return res.status(200).json({ token: newToken, activeOrg: activeOrg });
}
catch (err) {
if (err.message === "No eres miembro de esta organización.") {
return res.status(403).json({ error: err.message });
}
return res.status(500).json({ error: err.message || "Error al cambiar de organización." });
}
};
export const requestPasswordReset = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res.status(500).json({ error: "Prisma client not initialized for tenant." });
}
const { email } = req.body;
await AuthService.requestPasswordReset(req.tenantPrisma, email);
return res.status(200).json({ message: "Correo de recuperación enviado." });
}
catch (err) {
if (err.message === "Usuario no encontrado.") {
return res.status(404).json({ error: err.message });
}
return res.status(500).json({ error: err.message || "Error al solicitar recuperación." });
}
};
export const resetPassword = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res.status(500).json({ error: "Prisma client not initialized for tenant." });
}
const { token, password } = req.body;
await AuthService.resetPassword(req.tenantPrisma, token, password);
return res.status(200).json({ message: "Contraseña actualizada." });
}
catch (err) {
if (err.message === "Token inválido o expirado." || err.message === "Usuario no encontrado.") {
return res.status(400).json({ error: err.message });
}
return res.status(500).json({ error: err.message || "Error al restablecer contraseña." });
}
};
//# sourceMappingURL=authController.js.map