This is a Spring Boot Rest API developed in Kotlin to provide services according to bellow's objectives. An initial class and use case diagram can be found in the root of the project (drawio diagram).
- Tips
- Even though it only has 1 profile (dev) to load development data in an in memory DB, it can also connect to a mysql db if details are provided in mysql properties file, and it is run with mysql and dev profiles.
- 2 file can be found under http folder, one for admin use cases and one for student use cases. This is useful to manually test the application, and to demo it.
- If at any point you want to reset the data back to an initial step just restart the application.
Create a system for management of driving licenses test appointments, with the following functional requirements:
- When starting the exam the user must answer if they use glasses.
- If so, the system should generate an eye appointment at a random time and start the exam.
- If not, the system should just start the exam.
- The user must use a generated key to enter the exam, this key should expire after 1 hour and should not be usable if the exam is not finished during the appointment.
- The driving test should consist of 10 multiple choice questions, each with only 1 correct option.
- The questions should be sorted in a random order at the start of the exam.
- The exam is approved with 8 questions answered correctly
- If the exam is failed, then the system should generate a random new appointment for retry.
- The exam can only be taken 3 times by the same user.
- The questions' and options' text must be modifiable by the admins
- The exam results must only be kept for a week
- The admins should be able to get statistics of said results grouped by day with:
- Amount of exams
- Amount of passed exams
- Amount of failed exams
- Appointments with students as no-show
- The admins should be able to get statistics of said results grouped by day with:
Se requiere realizar un sistema de gestión para la asignación de turno y entrega de registro de conducción.
Objetivo: realizar el control de turnos y otorgamiento de licencias de conducir, tomando en consideración los siguientes requerimientos funcionales.
- El examen consta de dos etapas.
- La primera etapa incluye la pregunta si utiliza o no anteojos.
- Si responde que no automáticamente, deberá generarse el examen y permitirle responder el cuestionario.
- Si responde que si, se generará un turno random para que asista a una revisión. (La fecha deberá generarse de manera aleatoria).
- La primera etapa incluye la pregunta si utiliza o no anteojos.
- El usuario debería generar una clave para poder acceder al examen, la cual tendrá un tiempo de expiración de una
hora.
- La clave generada podrá utilizarse una sola vez.
- En caso de que no termine la evaluación no podrá volver a usarla.
- El cuestionario constará de 10 preguntas precargas de opción múltiple.
- Las mismas deberás cargarse de forma aleatoria.
- Aprueba el examen con un 8 preguntas respondidas correctamente.
- En caso de reprobar el sistema deberá generar un nuevo turno aleatorio.
- La misma persona solo podrá rendir un máximo de 3 veces el examen.
- Los resultados del examen deberán guardarse durante 1 semana.
- Las preguntas deberán poder ser editables por un administrador del sistema.
- El administrador del sistema podrá acceder a una estadística diaria de cuantos rindieron el examen, cuantos aprobaron, reprobaron o estuvieron ausentes.
Se pide:
- Implementar un modelo cliente servidor.
- Implementar modelo API, desacoplar completamente el frontend del backend.
- Implementar el paradigma de objetos.
- Implementar al menos en la relación entre dos objetos inyección de dependencias.
Se pide documentar el plan de trabajo y las decisiones técnicas tomadas para la resolución del mismo. Se deberán entregar diagramas y justificaciones. NO se requiere la entrega de código en la primera instancia.
- Diagrama de clases del sistema.
- Modelo de datos.
- Detalle de las tecnologías a utilizar.
- Tipo de testeo y módulos que se planifican testear.
- Justificación de la elección de tecnología y consideraciones.
Deberá entregarse un documento en formato PDF conteniendo todos los requerimientos expuestos.
Fecha de entrega: semana 8
En el caso de que no se pueda realizar la entrega en la fecha estipulada, deberá entregar todo junto en la fecha de entrega del proyecto integrador. Si en esa instancia no alcanza a cumplir con los objetivos, podrá realizar la reentrega en la instancia de recuperación correspondiente.
En el caso de que se realicen observaciones o requerir correcciones en el primer entregable, estos deberán entregarse resueltos en la segunda entrega.
desarrollar y desplegar la solución planteada en el primer entregable.
- El código puede ser desarrollado seleccionando alguna de los siguiente lenguajes: phyton, java, Javascript.
- Para la persistencia de la información se puede elegir bases de datos relacionales o no relacionales, justificando su elección.
- Se espera que se desplieguen los conceptos revisados durante la cursada (tales como la orientación a servicios), por lo que no serán consideradas correctas las soluciones monolíticas.
- Se deberá presentar la herramienta utilizada para los tests unitarios a partir de la tecnología de trabajo seleccionada y los tests escritos.
- Link al repositorio de código en github o bitbucket según prefiera.
- Se deberá incluir todo el código desarrollo, un readme con la información para realizar el despliegue en un servidor y consideraciones.
Esta instancia sincrónica consistirá en una demo de la solución funcionando, durante la cual se realizarán la preguntas pertinentes que el docente considere sobre la implementación.
La nota final se compondrá del resultado de la evaluación sincrónica, más la revisión del código entregado.