Git Product home page Git Product logo

library-rat-mongoose's Introduction

Rata de Biblioteca

Queremos implementar una app que permite añadir libros y escritores. Nos comentan que es imporante poder cambiar los datos de los libros y los escritores de forma independiente, por lo que hemos implementado las dos entidades en dos colecciones diferentes, que van a ser relacionadas entre si a partir de su ObjectID.

Arregla los fallos de la app. En cada apartado se especifica que fichero y función hay que modificar. Todas las vistas estan correctas, al igual que los modelos.

Iteración 1

No podemos añadir autores, pues el controlador no está implementado. Gestiona adecuadamente el POST en la ruta-controlador del fichero routers/library.js para añadir un nuevo escritor desde el formulario accesible en Add Author

router.post('/add-author', async function(req, res) {
    // Iteración 1
})

Una vez arreglado, añade un par de tus escritoras favoritas a la base de datos mediante el formulario.

Iteración 2

Queremos poder ahora añadir libros. El formulario de Add Book se renderiza correctamente, pero no podemos elegir el escritor del libro. Gestiona adecuadamente el GET en la ruta-controlador del fichero routers/library.js

Nota: mientras no completes la iteración 2, no podrás ver el formulario de añadir libro (tendrás un error EJS).

router.get('/add-book', async (req, res) => {
  // Recuperar todos los autores de la coleccion Authors
  const authors = {} // TODO: Iteración 2
  res.render('add-book', {
    authors 
  })
})

Iteración 3

Comprueba que ahora puedes añadir también libros al a base de datos. Añade un par de ellos. Usa escritores diferentes. Contesta a la pregunta: Para cada libro que insertamos en la colección books; ¿que 4 campos guardamos para cada docmento? Ayúdate abriendo uno de los documentos de la colección books

Fíjate en la respuesta que da el endpoint al insertar un libro

Iteración 4

Cuando queremos mostrar todos los libros mediante la opción de menú Show Books , la información del autor no aparece correctamente. Modifica el fichero routers/library.js, en la ruta-controlador:

router.get('/books', async (req, res) => {
  const books = await Book.find(); // Iteración 4

  console.log("Libros a enviar a la vista: ", books);

  res.render('books', {
    books
  })
})

Haz que se muestren correctamente también los datos del autor del libro, que esta referenciado mediante su ObjectID a la colección authors

Pista: Populate fields

Iteración BONUS

Queremos implementar la opción de reservar un libro.

  1. Añade un nuevo esquema, de nombre bookingSchema.js, en models/books.js
  2. Un bookingSchema se compone de los siguientes campos
  3. Fecha de inicio de reserva
  4. Fecha fin de la reserva
  5. Modifica el schema bookSchema para que ahora admita un conjunto de reservas. Al nuevo campo le podemos llamar bookings
  6. Crea un formulario y el controlador adecuado para recuperarlo. Por ejemplo en el endpoint /book/:id/book. Adicionalmente, puedes añadir un botón de "Reservar" a cada uno de los libros en la vista que muestra todos los libros.
  7. Crea un endpoint para gestionar el POST /book/:id/book
  8. Añade la reserva al array de reservas del libro
  9. Comprueba que se ha actualizado correctamente el docmento el MongoDB (deberia tener un 'array' de reservas en el campo bookings)
  10. MEGA-BONUS: Impide que un libro se pueda reservar

library-rat-mongoose's People

Contributors

omiras 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.