Untitled
unknown
plain_text
2 years ago
3.9 kB
7
Indexable
"use server";
import { validate } from "validate.js";
const validationRules = {
name: {
presence: {
message: "Nombre inválido",
allowEmpty: false,
},
length: {
minimum: 3,
message: "El nombre debe tener al menos 3 caracteres",
},
},
email: {
presence: {
message: "Correo inválido",
allowEmpty: false,
},
email: {
message: "Correo inválido",
},
},
password: {
presence: {
message: "Contraseña inválida",
allowEmpty: false,
},
length: {
minimum: 8,
message: "La contraseña debe tener al menos 8 carácteres",
},
},
dni: {
presence: {
message: "DNI inválido",
allowEmpty: false,
},
},
schoolId: {
presence: {
message: "ID de escuela inválida",
allowEmpty: false,
},
},
year: {
presence: {
message: "Año inválido",
allowEmpty: false,
},
},
division: {
presence: {
message: "Año inválido",
allowEmpty: false,
},
},
role: {
presence: {
message: "Rol inválido",
allowEmpty: false,
},
},
};
type ErrorResponse = {
errorMessage: string;
};
type SuccessResponseData = {
name: string;
email: string;
};
export async function POST(request: Request) {
const handleSuccessResponse = (data: SuccessResponseData) => {
return new Response(
JSON.stringify({
name,
email,
}),
{ status: 201, headers: { "Content-Type": "application/json" } }
);
};
const handleErrorResponse = (error: ErrorResponse) => {
return new Response(error.errorMessage, {
status: 500,
headers: { "Content-Type": "application/json" },
});
};
const sanitizeContent = (content: any) => {
return content.replace(/<script.*?>.*?<\/script>/gi, "");
};
const { name, email, password, dni, schoolId, year, division, role } =
await request.json();
console.log(schoolId, year, division, role)
const dataToValidate = { name, email, password, dni, schoolId, year, division, role };
const validationErrors = validate(dataToValidate, validationRules, {
fullMessages: false,
});
if (validationErrors) {
const modifiedErrors: Array<string> = [];
Object.keys(validationErrors).forEach((field) => {
const errorMessages: any = validationErrors[field].map((error: any) => {
return error;
});
modifiedErrors.push(errorMessages);
});
let errorMessage = modifiedErrors[0][0];
return handleErrorResponse({
errorMessage,
});
}
try {
const api_request = await fetch(
(process.env.API_URL as string) + "/users/signup",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"Strict-Transport-Security":
"max-age=63072000; includeSubDomains; preload",
},
body: JSON.stringify({
name: sanitizeContent(name),
email: sanitizeContent(email),
password: sanitizeContent(password),
dni: sanitizeContent(dni),
schoolId: sanitizeContent(schoolId),
year: sanitizeContent(year),
division: sanitizeContent(division),
role: sanitizeContent(role),
}),
}
);
if (!api_request.ok) {
const errorObject: ErrorResponse = {
errorMessage: api_request.statusText
}
return handleErrorResponse(errorObject)
}
const data = await api_request.json();
if(data.error) {
const errorObject: ErrorResponse = {
errorMessage: data.error
}
return handleErrorResponse(errorObject);
}
return handleSuccessResponse(data);
} catch (error: any) {
return handleErrorResponse(error.message || "Error desconocido");
}
}Editor is loading...
Leave a Comment