Se ha realizado una aplicación web para administrar citas médicas online la cual consta de 2 partes:
- Backend -> REST API citas médicas
- Frontend -> App citas médicas - Repositorio
Este repositorio contiene el código backend del proyecto con el que se puede realizar múltiples tareas como gestionar datos, autenticación y procesamiento de solicitudes de:
- Pacientes. 🙋🏻♂️🙋🏻♀️
- Doctores. 🧑🏻⚕️
- Citas médicas. 🕞
- Especialidades. 🩺
- Horarios médicos. 📅
- Instalar las depedencias del proyecto
npm install
Se ha implementado Supabase como base de datos online, por lo tanto se requiere:
- Crear un proyecto en su web.
- Configurar las tablas de la BD y establecer RLS disabled.
- Copiar los valores de PROJECT_URL y API_KEY para usar en nuestro proyecto.
-
Configurar las variables de entorno en el archivo
.env
en la raíz del proyecto con los parámetros:SUPABASE_PROJECT_URL = "https://link-de-ejemplo.supabase.co"; SUPABASE_API_KEY = "mykeysupabaseproject"; SECRET_KEY = "mysecretkey"; ACCOUNT_SID = "twilioaccountsid"; AUTH_TOKEN= "twilioauthtoken";
Se recomienda encriptar el valor de
SECRET_KEY
con la función crypto de Node.Ingresar al CLI de Node en el terminal
node
Ejecutar
require("crypto").randomBytes(64).toString("hex")
Esto nos dará una clave la cual usaremos como
SECRET_KEY
npm i jest -D
- En package.json scripts poner jest
npm i --save-dev @types/jest
npm install --save-dev babel-jest @babel/core @babel/preset-env
npm install --save-dev @babel/preset-typescript
npm i ts-jest -D
Aquí se instala el coverage dependiendo de la configuración cuando ejecutemos el siguiente comando. También se configura jest
npx jest --init
npm run dev
Hay rutas protegidas con middleware que requieren enviar un token de verificacion en el Headers, el cual se obtiene al momento de hacer login de un usuario.
-
Para crear usuarios pacientes enviar los datos en el body con formato JSON. De la misma manera se envia algunos o todos los datos del usuario que desea actualizarlos al endpoint correspondiente.
{ "firstname": "John", "lastname": "Doe", "phone": "987654321", "age": 30, "email": "johndoe@gmail.com", "password": "12345678" }
-
Endpoints
-
http://localhost:6005/api/v1/patient --> Crear usuarios pacientes (POST) ✔️
-
http://localhost:6005/api/v1/patient/login --> Login de usuarios, enviar email y password (POST) ✔️
Esto genera un token que se usará para acceder a las rutas protegidas
-
http://localhost:6005/api/v1/patient --> Obtener todos los usuarios (GET) 🗒️
-
http://localhost:6005/api/v1/patient/id --> Obtener un usuario por id enviando el token (GET) 🗒️
-
http://localhost:6005/api/v1/patient/id --> Actualizar usuario por id enviando el token (PUT) 🔃
-
http://localhost:6005/api/v1/patient/id --> Eliminar un usuario por id enviando el token (DELETE) ❌
-
-
Para crear usuarios doctores enviar los datos en el body con formato JSON. De la misma manera se envia algunos o todos los datos del doctor que desea actualizarlos al endpoint correspondiente.
{ "firstname": "John", "lastname": "Doe", "email": "johndoe@gmail.com", "password": "12345678" }
-
Endpoints
-
http://localhost:6005/api/v1/doctor --> Crear usuarios doctores (POST) ✔️
-
http://localhost:6005/api/v1/doctor/login_doctor --> Login de doctores, enviar email y password (POST) ✔️
Esto genera un token que se usará para acceder a las rutas protegidas
-
http://localhost:6005/api/v1/doctor --> Obtener todos los doctores (GET) 🗒️
-
http://localhost:6005/api/v1/doctor/id --> Obtener un doctor por id (GET) 🗒️
-
http://localhost:6005/api/v1/patient/id --> Actualizar doctor por id enviando el token (PUT) 🔃
-
http://localhost:6005/api/v1/patient/id --> Eliminar un doctor por id enviando el token (DELETE) ❌
-
-
Para crear citas médicas enviar los datos en el body con formato JSON. De la misma manera se envia algunos o todos los datos de la cita que que se quiere actualizar al endpoint correspondiente.
{ "id_patient": 1, "id_specialtie": 2, "id_doctor": 4, "id_schedule": 3, "checkup_date": "aaaa-mm-dd", "checkup_time": "hh:mm:ss" }
-
Endpoints
-
http://localhost:6005/api/v1/checkup --> Crear citas médicas (POST) ✔️
-
http://localhost:6005/api/v1/checkup --> Obtener todas las citas médicas (POST) ✔️
-
http://localhost:6005/api/v1/checkup/id --> Actualizar doctor por id enviando el token (PUT) 🔃
-
http://localhost:6005/api/v1/checkup/id --> Eliminar un doctor por id enviando el token (DELETE) ❌
-
http://localhost:6005/api/v1/checkup/bypatient/id --> Obtener citas médicas de un paciente por id (GET) 🗒️
-
http://localhost:6005/api/v1/checkup/bydoctor/id --> Obtener citas médicas programadas de un doctor por id (GET) 🗒️
-
http://localhost:6005/api/v1/checkup/data --> Obtener citas médicas programadas de un doctor por id (GET) 🗒️
-
-
Para crear especialidades enviar los datos en el body con formato JSON. De la misma manera se envia algunos o todos los datos de la especialidad que que se quiere actualizar al endpoint correspondiente.
{ "name": "Cardiología" }
-
Endpoints
-
http://localhost:6005/api/v1/specialties --> Crear especialidades (POST) ✔️
-
http://localhost:6005/api/v1/specialties --> Obtener todas las especialidades (GET) ✔️
-
http://localhost:6005/api/v1/specialties/id --> Eliminar una especialidad por id (DELETE) ❌
-
http://localhost:6005/api/v1/specialties/update/id --> Actualizar una especialidad por id (PUT) 🗒️
-
http://localhost:6005/api/v1/specialties/byspecialty/id --> Obtener doctores por especialidad (GET) 🗒️
-
-
Para crear horarios médicos enviar los datos en el body con formato JSON.
{ "id_doctor": 1, "date": "2023-02-06", "start_time": "09:00:00-05", "end_time": "16:00:00-05", }
-
Endpoints
-
http://localhost:6005/api/v1/doctor/RegistrationHorario --> Crear horarios médicos (POST) ✔️
-
http://localhost:6005/api/v1/doctor/findAll/Schedule --> Obtener todos los horarios médicos (GET) ✔️
-
http://localhost:6005/api/v1/doctor/findAll_schedule/id --> Obtener un horario médico por id (GET) 🗒️
-