Giter Site home page Giter Site logo

mads-todolist-inicial-playframework's People

Contributors

domingogallardo avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

juanpamz

mads-todolist-inicial-playframework's Issues

UI borrar tarea

  • Acción borrar tarea
  • Botón borrar tarea con JavaScript que llame al método DELETE y la URL de la acción
  • Arreglar enlaces: redirigir página home de la aplicación a login, página de login a listado de tareas, etc.

Refactoritzación II

Trata de los métodos 'addUsuarioEquipo' y 'deleteUsuarioEquipo' de la clase 'JPAEquipoRepository'.
El problema era que el método 'merge' del entity manager también actualiza la base de datos. Si nos pasan un equipo o un usuario con alguna modificación (o algún campo sin rellenar) se propagaría a la base de datos. No es correcto, lo que hay que hacer es un 'find' para recuperar el equipo y el usuario de la BD.

Modelo de Tarea y TareaRepository básico

  • Implementar la clase entidad JPA Tarea, así como la clase básica TareaRepository. Se debe implementar una relación uno-a-muchos con Usuario.
  • Implementar tests para todos los métodos, usando la BD de memoria H2 y DBUnit para proporcionar datos iniciales.

Añadir equals a la entidad Usuario

Si construimos un ArrayList o un Set de usuarios no funcionan los métodos de búsqueda. El equals se debe basar en el identificador, suponemos que las listas o conjuntos de usuarios son usuarios recuperados de la base de datos.

Autenticación

  • Cuando el login sea correcto, se debe añadir en la sesión (cookie) el identificador del usuario.
  • Añadir alguna página de prueba a la que sólo se pueda acceder si el usuario está autenticado.

Historia de usuario: SGT-1 Login

Usuario administrador

Al realizar el registro será posible darse de alta como usuario administrador.

  • Para darse de alta como administrador se deberá activar un check box en la página de registro.
  • Sólo puede haber un administrador. Si ya existe un administrador, no debe aparecer el check box en la página de registro.
  • El usuario administrador tendrá una barra de menú en la que se añadirá la opción vacía Administración (que iremos cambiando conforme añadamos funcionalidades a realizar por el administrador).

Acción y vista para listar tareas

  • Acción para añadir una tarea a partir de los datos de un formulario
  • Acción para listar las tareas de un usuario
  • Vista de listado de tareas con enlace a la página del formulario para añadir
  • Todo ello restringido al usuario logeado

Un usuario puede inscribirse en equipos

  • Crear la entidad equipo.
  • Definir una relación muchos-a-muchos entre usuario y equipo. La relación no será eager, para evitar que se traigan a memoria todos los datos de todos los usuarios del equipo. Así tendremos en la guía dos ejemplos de relaciones: una eager (entre usuarios y tareas) y otra no eager (usuarios-equipos).
  • Crear una vista para gestionar equipos, similar a la de la gestión de tareas. Cuando se pinche en un equipo aparecerá una lista con todos sus miembros.
  • Actualizar la vista de tareas para incluir una gestión de los equipos a los que está apuntado un usuario.

Refactorizar

  • Quitar números de tests
  • Limpiar imports no usados
  • Cambiar @implementedBy por bindings en Module.java

Login de usuarios registrados

Crear acciones, vistas y métodos de servicio para el login de usuarios registrados.

  • Formulario de login
  • Acciones para mostrar el formulario y validarlo
  • Capa de servicios que comprueba el login y tests

Historia de usuario: SGT-1 Login

Eliminar tableros

Vamos a preparar la guía para añadir una relación muchos-a-muchos entre usuarios y equipos.

Refactor

  • Cambiar GestionTareasController por TareasController
  • Añadir comentario "Es necsario importar las vistas"
  • Cambiar los métodos delete de los repositorios para que acepten una entidad en lugar de una id
  • Cambiar Listpor Set en las relaciones a-muchos para evitar el error de Hibernate "cannot simultaneously fetch multiple bags:" (https://blog.eyallupu.com/2010/06/hibernate-exception-simultaneously.html)
  • Incluir la llamada a injector.instanceOf en todos los tests

Añadir integración con Travis

Travis debe hacer lo siguiente:

  • Construir una máquina docker con la versión actual
  • Lanzar los tests unitarios con la máquina construida
  • Lanzar los tests de integración
  • Si todo funciona bien, publicar la máquina en el docker hub

Crear proyecto, modelo JPA Usuario y UsuarioRepository

  • Crear el proyecto base de play
  • Crear la clase entidad JPA Usuario y la clase UsuarioRepository que encapsule las operaciones mínimas: creación de un usuario en la BD y búsqueda de un usuario por id y por login.
  • Utilizar DbUnit y una base de datos de prueba en los tests
  • Trabajar con la base de datos por defecto en memoria

Historia de usuario: SGT-1 Login

Refactorizar la obtención de tareas de un usuario

Un usuario tiene una relación a-muchos con tareas. Vamos a hacer que cuando se recupera un usuario, se traiga a memoria todas sus tareas y se queden guardadas en su atributo tareas. Para ello basta con poner en la entidad el atributo de JPA fetch=FetchType.EAGER.

De esta forma evitamos el método findAllTareas(usuarioId) en el TareaRepository.

En términos de Domain-Driven Design estamos hablando de que Usuario y Tareas son entidades agregadas. Siempre tendremos en memoria en los objetos usuario su lista completa de tareas.

Configuración entorno de stage

  • Añadir fichero de configuración stage.conf con conexión a base de datos MySQL y definición del secret
  • Añadir perfil de stage/producción en el fichero persistence.xml

Registro de nuevos usuario

Crear acciones, vistas y métodos de servicio para el registro de nuevos usuarios.

  • Crear el controller y las vistas con las acciones para:
    • Devolver el formulario de registro
    • Validar el formulario de registro y realizar el registro de un nuevo usuario (deberá comprobarse si el login ya existe y devolver un error)
  • Crear el servicio con los métodos de servicio para las acciones anteriores
  • Crear tests que prueben los métodos de servicio

Historia de usuario: SGT-1 Login

Corregir método addUsuarioEquipo en JPAEquipoRepository

En el método se pasa un usuario y un equipo desconectados del entityManager. Para recuperarlos de la base de datos se debería llamar a find en lugar de llamar a merge.

Lo que hace merge es actualizar la BD con el objeto que recibimos. No es correcto usarlo aquí, porque si pasamos un equipo o un usuario no existente se añaden a la BD en lugar de lanzar una excepción.

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.