Version deploy remote del proyecto 4, para revisar el proyecto en local visitar el repositorio Proyecto 4: clinica dental database local
Contenido 📝
Este proyecto requería una API funcional conectada a una base de datos con al menos una relación de uno a muchos y una relación de muchos a muchos.
Para este proyecto en el bootcamp de GeeksHubs se nos entrega el siguiente enunciado: "Desde el departamento de producto nos piden crear el backend correspondiente al sistema de gestión de citas para una Clínica Dental.
Para ello el cliente deberá ser capaz de registrarse en la aplicación, hacer login y acceder a su área de cliente. En su área de cliente deberá poder ver una lista de las citas que tiene a futuro, crear citas, modificarlas y anularlas. También existirá una zona de usuario con sus datos personales, que solo podrá ver él mismo. Además, los dentistas deberán poder registrarse como profesionales, hacer login y ver todas las citas y clientes registrados."
Se valorará la ejecución técnica, así como el trabajo en equipo. Siendo un equipo de dos miembros ha sido importante la comunicación, el apoyo mutuo, la toma de decisiones consensuadas y por supuesto, el manejo de Git y el repositorio de Github: creación de ramas de trabajo, resolución de conflictos, trabajo individual en local ...
Tecnologías utilizadas:
- Clonar el repositorio
npm install
Instalamos dependenciasnpm run create
Preparamos la base de datos para atacarla con la appnpm run dev
Dejamos la app preparada y escuchando las requests
Project Workflow
- Crear package.json con npm init -y.
- Crear archivo index.js en la ruta principal. Crear .env y .env.example. Crear .gitignore con /node_modules y .env dentro. Ejecutar comando git init.
- Instalar express, nodemon, sequelize, sequelize-cli, mysql2, dotenv, jsonwebtoken y bcrypt.
- Sequelize init. Ejecutar sequelize.
- Crear script "dev": "nodemon index.js", para mantener el servidor ejecutándose.
$ npm run dev
comando para ejecutar el servidor. ctrl + c para pararlo.- Required express en index.js, y la variable instance app. También asignar PORT a nuestro servidor y usar un método listen para ejecutarlo:
const express = require('express');
const app = express();
const PORT = 3000;
app.listen(PORT, () => console.log("Server running on port: " + PORT));
- Crear models Role, Doctor, User, Service and Appointment en ese orden:
npx sequelize-cli model:generate --name Users --attributes name:string,...
- Añadir las foreign keys de services, doctors y users en appointments migration js file con sus respectivas relaciones. Hacer lo mismo con las que correspondan en todos los modelos.
references: {
model: "Services",
key:"id"
}
-
Crear carpetas controllers y view. En carpeta view crear las Routes.
-
Crear router.js en la ruta principal:
const router = require('express').Router();
module.exports = router;
- Route.js conectado al index principal:
const router = require('./router');
app.use(router);
- Refactorizar a route:
const router = require('express').Router();
router.use('/services', servicesRouter);
router.use('/users', usersRouter)
module.exports = router;
- Refactorizar controllers:
const serviceController = {};
serviceController.getServices = (req, res) => {return res.send('Get Services')}
serviceController.createServices = (req, res) => {return res.send('Create Services')}
module.exports = serviceController;
- Crear seeders para Role, User, Doctor, Service, Appointment
npx sequelize-cli seed:generate --name User
npx sequelize-cli db:seed:all
- Crear middlewares para controlar el nivel de acceso a la información o a las funcionalidades de la base de datos según roles.
- Crear endpoints, los cuales describimos a continuación:
Endpoints
- AUTH
- REGISTRO DE USUARIOS
Te permite registrar nuevos usuarios
POST http://localhost:3000/auth/register/
body:{ "name":"Ramón", "first_surname":"Folguera", "second_surname":"Carbonell", "phone": "666666666", "address":"Abbey Road 1", "email": "[email protected]", "password": "mipassword123" }
- LOGIN DE USUARIOS
Te permite hacer login con tu usuario y tu pass
POST http://localhost:3000/auth/login/
body:{ "email": "[email protected]", "password": "mipassword123" }
- REGISTRO DE USUARIOS
- USER
- PERFIL DE USUARIO
- AUTENTIFICACIÓN COMO USUARIO
Copia el TOKEN generado por el AUTH del LOGIN. Utiliza este USER como ejemplo:En AUTHORIZATION. Type BEARER TOKEN. Pega el TOKEN generado.{ "email": "[email protected]", "password": "mipassword123" }
- AUTENTIFICACIÓN COMO DOCTOR:
Copia el TOKEN generado por el AUTH del LOGIN. Utiliza este USER con privilegios de DOCTOR como ejemplo:En AUTHORIZATION. Type BEARER TOKEN. Pega el TOKEN generado.{ "email":"[email protected]", "password": "456789" }
- AUTENTIFICACIÓN COMO USUARIO
- CRUD Usuarios
- Get
GET http://localhost:3000/users/me Obtiene tu perfil de usuario - Update
PUT http://localhost:3000/users/me Actualiza tu perfil de usuario pasando los cambios dentro de changes
body:
{ "changes":{ "name": "Francisco", "first_surname": "Martínez" } }
- Get All (Medic) GET http://localhost:3000/users Obtiene todos los usuarios solo si tienes privilegios de Médico
- Get
- PERFIL DE USUARIO
- APPOINTMENT
- CRUD Citas
- Create (User)
POST http://localhost:3000/appointments/ El cliente crea una cita en estado Pendiente de Verificar por el doctor.
body:
{ "date": "2023-03-01 00:00:00", "service_id": 1, "doctor_id":1 }
- Update (User)
PUT http://localhost:3000/appointments El cliente actualiza los datos de la cita y reestablece su verificación a estado pendiente
body:
{ "id":"7", "changes":{ "service_id":2 } }
- Delete (User)
DELETE http://localhost:3000/appointments El cliente borra una de sus citas
body:
{ "id":"7" }
- Get All mine (User)
GET http://localhost:3000/appointments/user El cliente revisa los datos de todas sus citas - Get All Mine (Medic)
GET http://localhost:3000/appointments/doctor/my El doctor revisa los datos de todas sus citas como doctor - Get All (Medic)
GET http://localhost:3000/appointments/doctor El doctor obtiene todos los datos de todas las citas del sistema - Verify (Medic)
PUT http://localhost:3000/appointments/verify El doctor verifica una cita, esa cita pasa a estar verificada
body:
{ "id":5, "comments":"must" }
- Create (User)
- CRUD Citas
- Añadir un rol SuperAdmin que sea el rol del programador con acceso a todo el sistema menos a los datos privados de los pacientes y doctores.
- Añadir funcionalidades para crear, modificar y eliminar servicios por los doctores.
- Añadir funcionalidades para crear, modificar o eliminar roles por el SuperAdmin
- Especificar que el rol admin será para administración desde recepción con los privilegios necesarios para llevar a cabo su trabajo, como por ejemplo (añadido en el siguiente punto):
- Añadir funcionalidad para crear, modificar y eliminar doctores.
Las sugerencias y aportaciones son siempre bienvenidas.
Este proyecto se encuentra bajo licencia de MIT License.
Para conseguir mi objetivo hemos recopilado información de:
const developers = "Ramón" + "Jose";
Proyecto realizado por: