GithubHelp home page GithubHelp logo

crs-api's Introduction

CRS-API

Requerimientos

  • Tener instalado Docker Y Docker compose
  • Sistema operativo: Unix, Linux o Mac

El objetivo de esta prueba es crear un servicio que permita:

  • Búsqueda de disponibilidad, mediante el cual se pueda consultar si hay habitaciones disponibles, es decir con cupo y precio, para un hotel y rango de fechas dado.
  • Consultar y modificar la información básica necesaria para cargar la información de propiedades (hotel, habitaciones) e inventario (tarifas y precios).

Para levantar el proyecto se debe clonar de este repositorio y luego navegar hasta el en el terminal

Captura de Pantalla 2022-11-30 a la(s) 11 23 26 p m

para correr el proyecto solo se debe hacer uso de los comandos escritos en el Makefile, tiene comandos tanto para desarrollo, tests, cobertura, creacion de usuarios administradores, reiniciar contenedores y mas

Levantar el proyecto

para levantar el proyecto, solo se debe correr en la raiz del mismo el siguiente comando:

make up

este comando construirá la imagen de docker de este proyecto, ademas instalará de manera automatizada las dependencias, ejecutará las migraciones y cargará los archivos estáticos

Captura de Pantalla 2022-11-30 a la(s) 11 33 02 p m

Los contenedores son:

  • backend (contiene el api)
  • elastic (contiene elastic search para hacer búsquedas sencillas y evitar golpear la base de datos)
  • postgres-skeleton-db (contiene la base de datos en postgres)

nuestra imagen con los contenedores por dentro seria esta

Captura de Pantalla 2022-11-30 a la(s) 11 27 58 p m

el backend está corriendo en el puerto 6060, en esta dirección -> http://0.0.0.0:6060/

una vez le des click al enlace vas a ver esta pantalla ->

Captura de Pantalla 2022-11-30 a la(s) 11 35 03 p m

si haces un poco mas de scroll serás capaz de ver todos

Captura de Pantalla 2022-11-30 a la(s) 11 35 57 p m

Un poco mas abajo se encuentran los modelos que contienen la definición de las estructuras de datos que vamos a manejar en el api

Captura de Pantalla 2022-11-30 a la(s) 11 37 08 p m

Setup de datos

este proyecto tiene 2 maneras de crear data, por el api docs de swagger (que es bastante intuitiva) y por el admin de Django, la segunda me gusta más porque es bastante visual y mas directa a la hora de insertar los datos.

Para acceder al administrador solo basta con ir a este link http://0.0.0.0:6060/admin/

Captura de Pantalla 2022-11-30 a la(s) 11 40 51 p m

Para crear un usuario administrador debemos ir al terminar y escribir make admin, recuerda presionar enter cuando termines un paso, tambien recuerda que por seguridad no se muestra la longitud de la contraseña por lo que cuando termines de escribir cualquiera de los campos de password deberas presionar enter

Captura de Pantalla 2022-11-30 a la(s) 11 45 04 p m

con nuestro usuario ya creado podremos volver al admin http://0.0.0.0:6060/admin/ e ingresar las credenciales que creamos para iniciar sesión

Captura de Pantalla 2022-11-30 a la(s) 11 45 57 p m

Captura de Pantalla 2022-11-30 a la(s) 11 46 12 p m

una vez dentro nos dirigimos a Hotels y presionamos Add + para crear nuestro hotel y sus habitaciones

Captura de Pantalla 2022-11-30 a la(s) 11 47 51 p m

Hemos agregado un hotel con una habitación, podemos seguir agregando mas habitaciones en el futuro

Captura de Pantalla 2022-11-30 a la(s) 11 56 52 p m

El campo deleted hace referencia a un campo marcado que sirve para simbolizar un borrado logico, cuando se encuentra en true el registro no estará visible por fuera del admin, quiere decir que no será listado tampoco en ninguna de las apis

En caso de eliminación por error se podrán restablecer los objetos afectados sin problema, si se elimina un hotel, todos los registros asociados al hotel dejarán de mostrarse en la api

Captura de Pantalla 2022-11-30 a la(s) 11 58 36 p m

Ahora vamos a crear un Rate, que pertenece solo a una habitación y tiene todos los precios y la ocupación para fechas especificas

Captura de Pantalla 2022-12-01 a la(s) 12 02 16 a m

podremos agregar tantos inventarios queramos, la única regla es que no se deben repetir fechas, cada fecha debe ser única en cada inventario asociado a un rate

con la data configurada podemos ver la información usando la ui de swagger http://0.0.0.0:6060/

Captura de Pantalla 2022-12-01 a la(s) 12 08 08 a m

Captura de Pantalla 2022-12-01 a la(s) 12 09 12 a m

Captura de Pantalla 2022-12-01 a la(s) 12 09 30 a m

Con data ingresada ya estamos listos para probar el api que nos genera este esquema de datos

Captura de Pantalla 2022-12-01 a la(s) 12 10 22 a m

es esta

Captura de Pantalla 2022-12-01 a la(s) 12 11 06 a m

Captura de Pantalla 2022-12-01 a la(s) 12 11 59 a m

Captura de Pantalla 2022-12-01 a la(s) 12 12 21 a m

Anotaciones varias

  • Todos los endpoints tienen las operaciones crud con posibilidad de reversión en el delete

  • Toda la data de los endpoints get que listan objetos, contienen paginación

  • Los filtros de los objetos eliminados se hacen a través del BookingModelManager

  • Todos los endpoints devuelven la información con el esquema que promete excepto el de la disponibilidad porque los atributos no son claves fijas sino que son claves dinámicas armadas a partir de los valores que van arrojando las habitaciones, rates y más

  • El unico endpoint que tiene tests es el de Availability y el de Hotels

  • se hicieron tests de integración para probar los servicios

  • en el servicio de availability solo se hacen 2 queries

  • hay una clase de paginación propia que puede modificarse a conveniencia

  • todas las apis a diferencia de la de disponibilidad contienen buscador y filtros que pueden agregarse a conveniencia

  • la primera linea roja es un registro de una clase que permite crear nuevos validadores para los tipos de datos esperados en los parametros de las urls Captura de Pantalla 2022-12-01 a la(s) 12 23 06 a m

se usó django-extensions para obtener los alias de las urls para evitar llamarlas explicitamente

Captura de Pantalla 2022-11-30 a la(s) 5 25 31 p m

Estas son las tests que tiene el código actualmente

Captura de Pantalla 2022-12-01 a la(s) 12 19 04 a m

cosas que hubiese querido hacer

  • mejorar la estructura de los serializadores
  • optimizar las queries
  • testear todos los serializer
  • testear todas las vistas
  • testear todos los modelos
  • testear todos los managers y querysets
  • testear el decorador action_paginated para paginar actions en los viewsets como los rooms de los hotels

crs-api's People

Contributors

osw4l avatar

Watchers

Samuel Carmona avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.