Este proyecto, un Job and Career Portal, es una colaboración entre Carmen Mata y Ricardo Collado. Aquí está la guía de cómo estructuraremos el desarrollo:
Lenguaje: TypeScript
Framework: Node.js, Expressjs
Base de Datos: MongoDB
Docker: Para gestionar los servicios en una arquitectura de microservicios
Framework: React.js con TypeScript
Utilizaremos MongoDB como nuestra base de datos.
Paleta de Colores [PENDIENTE COLOCAR]
Los usuarios podrán crear y subir su currículum en formato PDF.
Podrán ver ofertas de trabajo como tarjetas en su página principal.
Los usuarios podrán aplicar a un número determinado de ofertas de trabajo.
Habrá plantillas de CV disponibles, con acceso limitado dependiendo del tipo de cuenta.
Los empleadores podrán ver currículums según las ofertas de trabajo publicadas.
Podrán filtrar candidatos utilizando palabras clave.
En la página principal, se mostrarán tarjetas de empleados con su nombre y especialidad.
Los empleadores podrán descartar candidatos no deseados.
Podrán publicar nuevas ofertas de trabajo y administrarlas.
El backend estará estructurado en una arquitectura de microservicios, utilizando TypeScript y MongoDB. Servicios
Servicio de Empleador: Manejará la creación, edición y visualización de datos de empresas.
Servicio de Postulante: Creará y gestionará datos de los postulantes, incluyendo sus habilidades y estado de búsqueda.
Servicio de Oferta Laboral: Se encargará de las ofertas de trabajo, incluyendo su creación, gestión y filtrado.
Un API Gateway recibirá solicitudes, verificará su autenticidad y las dirigirá al servicio correspondiente.
Se utilizará ZOD para validar las rutas de forma precisa y evitar errores.
-> packages > types > model > joboffers.ts
const schema = z.object({
route:z.literal('/joboffers/jobofferid/:id/compannyid/:compannyid'),
routeParams:z.object({
id: z
.string()
.refine((id)=> isValidId(id)),
version: z
.string()
.optional()
.refine((id)=> !id || isValidId(id))
})
});
const validateVersionMiddleware = (req: Request, res: Response, next: NextFunction)=>{
const {params} = req;
try{
schema.parse({
route:req.route.path,
routeParams:{
id:params.id,
version:params.version || undefined
}
})
next();
}catch(error){
console.log(error)
res.status(400).json({ error: "ha habido un error"});
}
}
Se creará un archivo que actúe como servidor principal para dirigir las solicitudes entrantes a los servicios correspondientes.
Este README proporciona una visión general del proyecto y su estructura técnica. Se actualizará a medida que avance el desarrollo