El sistema BDI es una solución integral full stack para la administración moderna de espacios de un cementerio, en donde se combina un servidor robusto (bdi-backend) que actúa como el núcleo de la aplicación, con una interfaz de usuario intuitiva (bdi-frontend) que facilita la gestión eficiente de los espacios disponibles. La principal función de este sistema es de digitalizar el inventario físico del cementerio, eliminando la gestión manual de mapas y libros de registros, solucionando la desconexión entre la disponibilidad real del terreno y el proceso de venta, permitiendo consultar y reservar espacios en tiempo real sin errores de duplicidad.
Este sistema fue parte de una prueba técnica y no se encuentra en desarrollo activo, su propósito siempre fue el de demostrar una solución para la ocupación espacial en el contexto administrativo de un cementerio.
bdi-backend
bdi-backend es el servidor central del sistema BDI, diseñado para la administración logística y comercial de espacios en cementerios. Funciona como el núcleo digital que permite mapear, categorizar y controlar el inventario de unidades físicas, gestionando desde la definición de grandes sectores o parques hasta el detalle específico de cada nicho individual.
Stack tecnológico
- Backend
-
TypeScript: Lenguaje principal del proyecto
-
Node.js: Entorno de ejecución del servidor
-
NestJS: Framework para estructurar el servidor
-
- Base de datos
-
PostgreSQL: Base de datos relacional para almacenamiento de datos
-
TypeORM: ORM para interactuar con la base de datos
-
typeorm-transactional: Manejo de transacciones en TypeORM
-
- Autenticación y seguridad
-
JWT: JSON Web Tokens para autenticación segura
- 🔑 bcrypt: Librería para el hash de contraseñas
-
Passport.js: Middleware de autenticación
-
- Validación
-
class-validator: Validación de datos entrantes
-
class-transformer: Transformación de objetos
- 🥳 Joi: Validación de esquemas
-
- Utilidades
- 🕰️ Luxon: Manejo de fechas y horas
- 🌿 Dotenv: Gestión de variables de entorno
- Herramientas de desarrollo
-
ESLint: Herramienta de linting para mantener la calidad del código
-
Prettier: Formateador de código para mantener un estilo consistente
-
Docker Compose: Contenerización y orquestación de servicios
- 🐶 Husky: Ganchos de Git para automatizar tareas de desarrollo
-
Commitlint: Linting de mensajes de commit para mantener un historial limpio
-
Funcionalidades
- Gestión de Estructura: Permite definir las macro-áreas del cementerio, categorizándolas por “Parque” y “Sector”. Esto sirve como cabecera para agrupar los espacios individuales.
- Gestión de Espacios: Administración granular de cada unidad. Permite definir coordenadas, valor monetario y características físicas.
- Control de Estados y Tipos: Clasificación de espacios mediante estados (
Disponible,Vendido,Reservado,No disponible) y tipos de terreno (Borde,Centro,Camino). - Sistema de Reservas: Funcionalidad para vincular un usuario específico con un espacio (
Detail) disponible, registrando la fecha y el estado activo de la reserva. - Gestión de Usuarios: Administración de las personas que adquieren o reservan los espacios.
Módulos
- HeadModule: Maneja la lógica de las áreas generales (Parques/Sectores).
- ReservationModule: Controla el proceso de reservas de espacios.
- DetailModule: Gestiona los espacios individuales, sus características y estados.
- UserModule: Administra la información de los usuarios.
- AuthModule: Implementa la autenticación y autorización segura.
Modelo de datos
El diseño de la base de datos es relacional y se estructura principalmente en:
Puedes ver el modelo de datos en diagrams.net: Modelo de datos de BDI
Prerrequisitos
- NodeJS >= 16.x
- npm >= 9.x
- Docker (opcional, para la base de datos PostgreSQL)
Instalación y ejecución (backend)
-
Clona el repositorio:
git clone https://github.com/igidio/bdi-backend.git cd bdi-backend -
Instala las dependencias:
npm install -
Configuración del entorno: Renombra el archivo de entorno de ejemplo y configura tus variables:
cp .template.env .env -
Configuración de la base de datos: Si tienes Docker instalado, configura el archivo 📄docker-compose.yaml con los datos de tu instancia de PostgreSQL. Luego, ejecuta el siguiente comando para iniciar la base de datos PostgreSQL:
docker-compose up -d -
Ejecuta migraciones y seeds: Asegúrate de que la base de datos esté corriendo y ejecuta las migraciones y seeds para preparar el esquema:
# Ejecutar migraciones de TypeORM npm run typeorm:generate # Ejecutar seeders para poblar datos iniciales npm run seed:fresh -
Inicia la aplicación:
npm run start:dev
Si todo está configurado correctamente, la aplicación debería estar corriendo en 🔗http://localhost:3000.
Extra: si quieres usar husky para hooks de git y commit lints, ejecuta:
npx husky init
bdi-frontend
bdi-frontend es la interfaz de usuario del sistema BDI, diseñada para interactuar con el sistema de gestión de espacios en cementerios. Su objetivo es proporcionar una experiencia visual e intuitiva para que los usuarios puedan consultar la disponibilidad de espacios, gestionar las reservas y administrar su perfil, abstrayendo la lógica de negocio del servidor mediante una aplicación moderna y reactiva.
Stack tecnológico
- Frontend
-
TypeScript: Lenguaje principal del proyecto
-
Nuxt 3: Framework de interfaz de usuario
-
Vue 3: Framework de interfaz de usuario
-
Vite: Herramienta de construcción rápida
-
Pinia: Gestión de estado para el manejo global de datos
-
- UI
-
Tailwind 4: Framework de estilos
-
SASS: Preprocesador CSS para estilos avanzados
-
Iconify: Iconos
-
- Validación
-
Zod: Validación de esquemas en tiempo de ejecución
-
- Herramientas de desarrollo
- 🐶 Husky: Ganchos de Git para automatizar tareas de desarrollo
-
Commitlint: Linting de mensajes de commit para mantener un historial limpio
Funcionalidades
- Autenticación de Usuarios: Flujos completos de registro, inicio de sesión y recuperación de contraseña.
- Exploración de Espacios: Visualización de los detalles de los espacios disponibles, permitiendo a los usuarios ver características específicas de las tumbas o nichos.
- Gestión de Reservas: Interfaz dedicada para que los usuarios consulten el estado de sus adquisiciones o reservas activas.
- Perfil de Usuario: Sección personal para la gestión de datos de la cuenta.
- Integración con API: Comunicación fluida con el backend para obtener datos en tiempo real sobre la disponibilidad de espacios y gestionar las reservas.
- Diseño responsive: Adaptación automática a diferentes dispositivos para una experiencia óptima en móviles, tabletas y escritorios.
- Modo oscuro y claro: Soporte para temas visuales según las preferencias del usuario.
Prerrequisitos
- Node.js >= v18
- NPM >= v9
- Una instancia en ejecución de bdi-backend (para conectividad con la API)
Instalación y ejecución (frontend)
-
Clona el repositorio
git clone https://github.com/igidio/bdi-frontend.git cd bdi-frontend -
Instala las dependencias
npm install -
Configura las variables de entorno
Crea un archivo 📄.env a partir de la plantilla:
cp .env.template .env -
Actualiza la variable
SERVERen 📄.env para que apunte a la URL del backend (por ejemplo, http://localhost:3000). -
Ejecuta la aplicación
Inicia el servidor de desarrollo:
npm run dev
La aplicación estará disponible en 🔗http://localhost:5173 (o el puerto que se muestre en tu terminal).
Datos de prueba
Para probar la aplicación, puedes usar los siguientes datos de usuario predefinidos que se crean al ejecutar los seeders en el backend:
| Rol | Username | Contraseña | |
|---|---|---|---|
ADMIN | username1 | email1@mail.com | password1 |
CLIENT | username2 | email2@mail.com | password1 |
CLIENT | username3 | email3@mail.com | password1 |
Licencia
Este proyecto está bajo la Licencia MIT. Consulta el archivo 📄LICENSE.md de los proyectos para más detalles.