Proyecto de Integración
 

Proyecto Grails

En este proyecto de integración con Grails vamos a aprovecharnos de su scaffolding estático para generar automáticamente el código necesario para gestionar la información de una versión reducida del proyecto Biblioteca.

Vamos a crear una aplicación que permita gestionar la típica biblioteca de un centro de estudios. Esta biblioteca tendrá únicamente dos tipos de usuarios que serán los bibliotecarios y los alumnos. En nuestra aplicación, vamos a distinguir también dos tipos de operación. Por un lado los préstamos y por otro las reservas. Por supuesto los libros sólo podrán estar prestados en todo momento a un solo alumno y los alumnos podrán realizar reservas aún cuando el libro no esté prestado.

Tareas

A partir del siguiente archivo BootStrap.groovy:

import proyintbib.*

class BootStrap {

    def init = { servletContext ->
        //Creación de bibliotecarios
        def bibliotecario1 = new Bibliotecario(nombre:"Pedro", 
                                                apellidos:"García Martínez",
                                                email:"pedrogarcia@ua.es",
                                                password:"123456",
                                                confirmarPassword:"123456").save()
        def bibliotecario2 = new Bibliotecario(nombre:"Manuel",
                                                apellidos:"Rodríguez Sánchez",
                                                email:"manuelrodriguez@ua.es",
                                                password:"123456",
                                                confirmarPassword:"123456").save()
        //Creación de alumnos
        def alumno1 = new Alumno(nombre:"Sonia",
                                    apellidos:"López Aguilar",
                                    email:"sonialopez@alu.ua.es",
                                    password:"123456",
                                    confirmarPassword:"123456",
                                    facultad:"Escuela Politécnica").save()
        def alumno2 = new Alumno(nombre:"Raúl",
                                    apellidos:"Martínez Sánchez",
                                    email:"raulmartinez@alu.ua.es",
                                    password:"123456",
                                    confirmarPassword:"123456",
                                    facultad:"Escuela Politécnica").save()
        //Creación de libros
        def libro1 = new Libro(titulo:"Groovy in Action",
                                autor:"Dierk König",
                                editorial:"Manning").save()
        def libro2 = new Libro(titulo:"Beginning Groovy and Grails",
                                autor:"Christopher M. Judd",
                                editorial:"Apress").save()
        def libro3 = new Libro(titulo:"The definitive guide to Grails",
                                autor:"Graeme Keith Rocher",
                                editorial:"Apress").save()
        def libro4 = new Libro(titulo:"Manual de desarrollo web con Grails",
                                autor:"Nacho Brito",
                                editorial:"Imaginarium Works").save()
        //Creación de préstamos
        def prestamo1 = new Prestamo(libro:libro1,
                                        alumno:alumno1,
                                        bibliotecario:bibliotecario1,
                                        activo:true,
                                        fechaInicio:new Date(111,5,18),
                                        fechaFin:new Date(111,5,23)).save()
        def prestamo2 = new Prestamo(libro:libro2,
                                        alumno:alumno2,
                                        bibliotecario:bibliotecario2,
                                        activo:true,
                                        fechaInicio:new Date(111,5,16),
                                        fechaFin:new Date(111,5,21)).save()
        //Creación de reservas
        def reserva1 = new Reserva(libro:libro1,
                                        alumno:alumno2,
                                        fecha:new Date(111,5,19)).save()
        def reserva2 = new Reserva(libro:libro2,
                                        alumno:alumno1,
                                        fecha:new Date(111,5,18)).save()
    }
    def destroy = {
    }
}

Crea las clases de dominio necesarias en la aplicación y las relaciones existentes entre ellas. Es aconsejable crear una clase Usuario de la cual hereden las clases Bibliotecario y Alumno. Lo mismo sucede con la clases Prestamo y Reserva que sería conveniente que heredasen de una clase llamada por ejemplo Operacion.

Nuestra aplicación tendrá dos formas de acceso: bibliotecarios y alumnos. La parte de la aplicación dedicada a los bibliotecarios la vamos a generar utilizando el scaffolding estático de Grails y únicamente modificaremos el método que genera préstamos para impedir que un libro pueda tener más de un préstamo activo al mismo tiempo.

Debemos realizar un sistema de identificación en la aplicación en el cual se nos solicite el correo electrónico y la contraseña. Este sistema de autenticación debe identificar que tipo de usuario somos para permitirnos unas acciones u otras. Hay que tener en cuenta que los bibliotecarios podrán hacer cualquier acción en la aplicación mientras que los alumnos sólo podrán listar libros y reservarlos.

Implementar los métodos necesarios para que los alumnos puedan realizar reservas de libros. Por supuesto también hay que darles la posibilidad de que puedan cancelarlas. El listado de libros para los alumnos debe indicar si el libro está prestado, si el alumno tiene una reserva sobre el mismo y en caso de que el usuario ya tenga una reserva, se le debe dar la posibilidad de cancelarla.

Por último, debemos proteger el acceso a cualquier parte de nuestra aplicación utilizando filtros. Los bibliotecarios tendrá acceso a cualquier parte de la aplicación mientras que los alumnos únicamente podrán acceder al listado de libros que les proporciona la posibilidad de reservarlo o cancelarlo (en caso de que tengan una reserva).