POLIVET es un sistema encargado de automatizar la gestión de una veterinaria y sus principales actores (veterinarios, pacientes y tratamientos). Este proyecto consta de dos componentes:
API RESTful desarrollada en Node.js y Express.js con conexión a MongoDB, Atlas o local, según la necesidad.
Diseño y presentación de la interfaz de usuario usando React como biblioteca JavaScript para esta tarea.
- Backend
Se usó ReactJS, esta es una biblioteca JavaScript que permite construir interfaces de usuario a partir de piezas individuales llamadas componentes.
- Frontend
Node.js como motor de ejecución multiplataforma basado en JavaScript, diseñado para crear aplicaciones web escalables y que utiliza un modelo asíncrono y controlado por eventos para manejar múltiples conexiones al mismo tiempo.
Express.js es un framework para Node.js usado para el desarrollo del backend de aplicaciones web, es decir, ayuda a construir API RESTful, basadas en JavaScript.
- Base de Datos
MongoDB, local y Atlas, fue la base de datos elegida para el proyecto, esta es del tipo NoSQL (almacena datos en documentos JSON), es altamente escalable y adecuada para grandes volúmenes de datos.
La API de PoliVet posee un amplio catálogo de documentación, en el cual, se detalla cada uno de los funcionamientos de los diferentes apartados de la API, su composición y resultados. Puedes acceder a esta misma mediante el siguiente enlace: Documentación PoliVet APIRestful
- Clona el repositorio
git clone https://github.com/bryandelgado99/Polivet-App.git
- Navega a la carpeta a la que desees acceder
cd backend
o
cd frontend
-
Configura las variables de entorno
-
Instala las dependencias del proyecto
npm install
- Inicia el servidor
npm run dev
Important
Los puntos del 3 al 5 deben realizarse para cada componente de este proyecto, es decir, para el backend y el frontend.
- Servidor backend: http://localhost:3000
- Servidor frontend (Vite): http://localhost:5173
POLIVET debe desplegarse por componentes, para este caso se uso:
- Render para el backend - Backend URL, y
- Netlify para el frontend - Frontend URL
Important
No te olvides de definir las variables de entorno necesarias para el correcto funcionamiento de cada componente.
Para facilitar el despliegue del frontend en Netlify, primero se corrió el comando npm run build
para generar la carpeta dist
que contiene todo lo que este componente necesita.
Para ejecutar este proyecto, necesitas añadir las siguientes variables de entorno a tu archivo .env
Este archivo se debe ubicar en la raíz de la carpeta que corresponda al componente requerido.
/backend/.env
y /frontend/.env
MONGODB_URI =
tu URL de MongoDB local o Atlas
-
URL_FRONTEND = http://localhost:5173/
-
URL_BACKEND = http://localhost:3000/api/
-
HOST_MAILTRAP = smtp.gmail.com
-
PORT_MAILTRAP = 465
-
USER_MAILTRAP =
tu correo electrónico de Gmail -
PASS_MAILTRAP =
tu contraseña
Note
Actualmente el proyecto usa el SMTP de Gmail, sin embargo, también es posible utilizar Mailtrap o el SMTP de Hotmail. Para este último, se debe añadir la siguiente variable:
EMAIL_SERVICE = hotmail
JWT_SECRET
VITE_BACKEND_URL = http://localhost:3000/api
- Registrar un veterinario
POST /api/registro
Body
{
"nombre":"Juan",
"apellido":"Perez",
"direccion":"San Carlos",
"telefono":"0999999999",
"email":"juanP@hotmail.com",
"password":"1234"
}
- Iniciar Sesión
POST /api/login
Body
{
"email":"juanP@hotmail.com",
"password":"1234"
}
- Listar veterinarios
GET /api/veterinarios
- Confirmar Token
GET /api/confirmar/:token
- Recuperar contraseña
POST /api/recuperar-password
Body
{
"email":"juanP@hotmail.com",
}
- Comprobar token para recuperar contraseña
GET /api/recuperar-password/:token
- Nueva contraseña
POST /api/nuevo-password/:token
Body
{
"password":"5678",
"confirmpassword":"5678"
}
Important
Las rutas a continuación, correspondientes a Veterinario, se deben autenticar mediante un Bearer Token
- Perfil del veterinario
GET /api/perfil
- Actualizar contraseña
PUT /api/veterinario/actualizarpassword
Body
{
"passwordactual":"5678",
"passwordnuevo":"hola"
}
- Detalle del veterinario
GET /api/veterinario/:id
- Actualizar perfil del veterinario
PUT /api/veterinario/:id
Body
{
"nombre":"nombre-actualizado",
"apellido":"apellido-actualizado",
"telefono":"022222222"
}
- Iniciar Sesión
POST /api/paciente/login
Body
{
"email":"juan@gmail.com",
"password":"9124htxqam7"
}
Important
Las rutas a continuación, correspondientes a Paciente, se deben autenticar mediante un Bearer Token
- Registro
POST /api/paciente/registro
Body
{
"nombre":"Fide",
"propietario":"Juan",
"email":"juan@gmail.com",
"celular":"0999999999",
"convencional":"022222222",
"ingreso":"03-21-2024",
"sintomas":"Corte de pelo y desparasitación",
"veterinario":"652d36f304c0962cf422d335"
}
Note
El formato para fechas es mes-día-año.
- Listar pacientes
GET /api/pacientes
- Perfil del paciente
GET /api/paciente/perfil
- Detalle del paciente
GET /api/paciente/:id
- Actualizar perfil del paciente
PUT /api/paciente/actualizar/:id
Body
{
"nombre":"Fidedigno",
"propietario":"Juan Perez",
"email":"juan@gmail.com",
"sintomas":"Corte de pelo, desparasitación y limpieza de orejas"
}
- Eliminar paciente
DELETE /api/paciente/eliminar/:id
Body
{
"salida":"03-22-2024"
}
Important
Todas las rutas correspondientes a Tratamiento se deben autenticar mediante un Bearer Token
- Registro o creación del tratamiento
POST /api/tratamiento/registro
Body
{
"nombre":"Limpieza",
"descripcion":"Limpieza de orejas",
"prioridad":"Alta",
"paciente":"652efd300b16c9fca733d669"
}
- Detalle del tratamiento
GET /api/tratamiento/:id
- Actualizar tratamiento
PUT /api/tratamiento/:id
Body
{
"nombre": "Tratamiento de limpieza",
"prioridad":"Media"
}
- Eliminar tratamiento
DELETE /api/tratamiento/:id
- Cambiar el estado del tratamiento
POST /api/tratamiento/estado/:id
Proyecto licenciado bajo MIT License
-
Eduardo Almachi - @edusebass
-
Bryan Delgado - @bryandelgado99
-
Brittany Espinel - @brittanypallasco2003
-
Mateo Miño - @Mino-Mateo
-
Melany Sangucho - @SanguchoMela
-
David Vallejo - @DavidPK8
-
Erick Villaroel - @ErickVillarroel1722
-
Danny Yanacallo - @DannyYanacallo1755
Documentación de la API: API - veterinaria
Video del funcionamiento de la aplicación: POLIVET
- Landing Page
- Inicio de Sesión
- Registro
- Recuperación de Contraseña
- Confirmación de Correo Electrónico
- Página no Encontrada
- Dashboard o Panel Central de Información
Polivet-App
├─ backend
│ ├─ .env.example
│ ├─ package-lock.json
│ ├─ package.json
│ └─ src
│ ├─ config
│ │ └─ nodemailer.js
│ ├─ controllers
│ │ ├─ paciente_controller.js
│ │ ├─ tratamiento_controller.js
│ │ └─ veterinario_controller.js
│ ├─ database.js
│ ├─ helpers
│ │ └─ crearJWT.js
│ ├─ index.js
│ ├─ middlewares
│ │ ├─ autenticacion.js
│ │ └─ validacionVeterinario.js
│ ├─ models
│ │ ├─ Paciente.js
│ │ ├─ Tratamiento.js
│ │ └─ Veterinario.js
│ ├─ routers
│ │ ├─ paciente_routes.js
│ │ ├─ tratameinto_routes.js
│ │ └─ veterinario_routes.js
│ └─ server.js
├─ frontend
│ ├─ .env
│ ├─ index.html
│ ├─ package-lock.json
│ ├─ package.json
│ ├─ postcss.config.cjs
│ ├─ public
│ │ └─ images
│ │ ├─ catforgot.jpg
│ │ ├─ doglogin.jpg
│ │ └─ dogregister.jpg
│ ├─ README.md
│ ├─ src
│ │ ├─ App.css
│ │ ├─ App.jsx
│ │ ├─ assets
│ │ │ ├─ code.png
│ │ │ ├─ consulting.png
│ │ │ ├─ dark.png
│ │ │ ├─ design.png
│ │ │ ├─ dog-hand.webp
│ │ │ ├─ doglost.jpg
│ │ │ ├─ facebook.png
│ │ │ ├─ fondos
│ │ │ │ ├─ captura-1.png
│ │ │ │ ├─ captura-2.png
│ │ │ │ ├─ captura-3.png
│ │ │ │ ├─ captura-4.png
│ │ │ │ ├─ captura-5.png
│ │ │ │ ├─ captura-6.png
│ │ │ │ └─ captura-7.png
│ │ │ ├─ github.png
│ │ │ ├─ linkedin.png
│ │ │ ├─ rocket.webp
│ │ │ ├─ twitter.png
│ │ │ ├─ web1.png
│ │ │ ├─ web2.png
│ │ │ ├─ web3.png
│ │ │ ├─ web4.png
│ │ │ ├─ web5.png
│ │ │ ├─ web6.png
│ │ │ └─ youtube.png
│ │ ├─ componets
│ │ │ ├─ Alertas
│ │ │ │ └─ Mensaje.jsx
│ │ │ ├─ Formulario.jsx
│ │ │ ├─ Perfil
│ │ │ │ ├─ CardPerfil.jsx
│ │ │ │ └─ FormularioPerfil.jsx
│ │ │ └─ Tabla.jsx
│ │ ├─ context
│ │ │ └─ AuthProvider.jsx
│ │ ├─ index.css
│ │ ├─ layout
│ │ │ ├─ Auth.jsx
│ │ │ └─ Dashboard.jsx
│ │ ├─ main.jsx
│ │ ├─ paginas
│ │ │ ├─ Actualizar.jsx
│ │ │ ├─ Confirmar.jsx
│ │ │ ├─ Crear.jsx
│ │ │ ├─ Forgot.jsx
│ │ │ ├─ LandinPage.jsx
│ │ │ ├─ Listar.jsx
│ │ │ ├─ Login.jsx
│ │ │ ├─ NotFound.jsx
│ │ │ ├─ Perfil.jsx
│ │ │ ├─ Register.jsx
│ │ │ ├─ Restablecer.jsx
│ │ │ └─ Visualizar.jsx
│ │ └─ routes
│ │ └─ PrivateRoutes.jsx
│ ├─ tailwind.config.cjs
│ └─ vite.config.js
└─ README.md