└── README.md /README.md: -------------------------------------------------------------------------------- 1 | La Compañía Plateada S.A. necesita hacer un estudio de cuanta gente vive en cada región de Juego de Tornos. Para ello, hay que construir un proyecto basado en microservicios que permita consultar y dar de alta datos sobre personajes y lugares de Poniente a través de APIs. 2 | Su idea es la siguiente: 3 | - Un microservicio para los Personajes (CRUD). 4 | - Otro microservicio para los Lugares (CRUD). 5 | - Otro microservicio que sirva de punto de entrada para los usuarios, teniendo que consultar los otros microservicios para componer su output (BaaS). 6 | 7 | Los campos de las entidades serán: 8 | - **Personaje:** debe tener nombre, lugar al que pertenece y si es el rey de ese lugar. Y si está vivo o muerto (si no lo sabemos, lo daremos por muerto). 9 | - **Lugar:** debe tener un nombre. 10 | 11 | 12 | **¿Qué restricciones nos ponen?** 13 | - Todos lo personajes deben pertenecer a un lugar, salvo que estén muertos, por lo que solo se podrían dar de alta personajes si ya existen lugares dados de alta. 14 | - Un lugar solamente puede tener un personaje que sea rey y esté vivo. 15 | - Las bases de datos están separadas, por lo que para hacer un Join de Lugares y Personas hay que utilizar el tercer microservicio para componer la salida. 16 | 17 | 18 | Un compañero de La Compañía Plateada S.A. empezó el modelado de las APIs pero se ha cogido la baja por paternidad y te han pedido que continues con el trabajo y con el modelado: 19 | 20 | 21 | ## Lugar Microservices 22 | El servicio "lugar" debe consultar en una base de datos los lugares y devolverlos, por ejemplo: 23 | 24 | place-microservice:8081/v1/places/ 25 | ```json 26 | [ 27 | { 28 | "id": 1, 29 | "name": "Descaro del Rey" 30 | }, 31 | { 32 | "id": 2, 33 | "name": "Más allá del Zumo" 34 | }, 35 | { 36 | "id": 3, 37 | "name": "Veranolandia" 38 | } 39 | ] 40 | ``` 41 | 42 | ## Personas Microservices 43 | Otro servicio debe consultar en otra base de datos las personas que viven en Juego de Tornos y devolverlos, por ejemplo: 44 | 45 | people-microservice:8082/v1/people/ 46 | ```json 47 | [ 48 | { 49 | "id": 1, 50 | "name": "Sensei Lamister", 51 | "isAlive": true, 52 | "placeId": 1 53 | 54 | }, 55 | { 56 | "id": 2, 57 | "name": "Aiba Stack", 58 | "isAlive": true, 59 | "placeId": 3 60 | }, 61 | { 62 | "id": 3, 63 | "name": "Joaquín Nevado", 64 | "isAlive": true, 65 | "placeId": 3 66 | }, 67 | { 68 | "id": 4, 69 | "name": "Dedo Gordo", 70 | "isAlive": false, 71 | "placeId": null 72 | }, 73 | { 74 | "id": 5, 75 | "name": "Juanito Lamister", 76 | "isAlive": true, 77 | "placeId": 1 78 | }, 79 | { 80 | "id": 6, 81 | "name": "Nerf Stack", 82 | "isAlive": true, 83 | "placeId": 3 84 | } 85 | ] 86 | ``` 87 | 88 | 89 | ## Juego de Tornos Microservices 90 | Por último, el tercer servicio, dado un id de lugar que se le pase, deberá exponer una api que, consultando las otras dos anteriores, componga una respusta en su api tal que: 91 | 92 | got-microservice:8083/v1/places/ 93 | ```json 94 | [ 95 | { 96 | "id": 1, 97 | "name": "Descaro del Rey", 98 | "people": [ 99 | { 100 | "id": 1, 101 | "name": "Sensei Lamister", 102 | "isAlive": true 103 | }, { 104 | "id": 5, 105 | "name": "Juanito Lamister", 106 | "isAlive": true 107 | } 108 | ] 109 | }, 110 | { 111 | "id": 2, 112 | "name": "Más allá del Zumo", 113 | "people": [ 114 | { 115 | "id": 3, 116 | "name": "Juaquín Nevado", 117 | "isAlive": true 118 | } 119 | ] 120 | }, 121 | { 122 | "id": 3, 123 | "name": "Veranolandia", 124 | "people": [ 125 | { 126 | "id": 2, 127 | "name": "Aiba Stack", 128 | "isAlive": true 129 | }, { 130 | "id": 6, 131 | "name": "Nerf Stack", 132 | "isAlive": true 133 | } 134 | ] 135 | } 136 | ] 137 | ``` 138 | 139 | # Guidelines: 140 | - Usar Flask para contruir los servicios. 141 | - Usar flask_restplus o connexion para construir las APIs y exponer un Swagger. 142 | - Usar SQLAlchemy (sobre PostgreSQL o Mysql) para construir la BBDD. 143 | - Usar Alembic para crear la base de datos. 144 | - Poblar la base de datos con datos de prueba. 145 | - Documentar cómo arrancar el código. 146 | - Test unitarios. 147 | 148 | ## Plus: 149 | - Dockerizar los 3 servicios. 150 | --------------------------------------------------------------------------------