Skip to content

Commit

Permalink
Fix book creation and getPagesAverage error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
fedekrenn committed Dec 29, 2023
1 parent 8a2d3c1 commit f94f28a
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 16 deletions.
6 changes: 3 additions & 3 deletions live-coding/02.1-api-node/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Se puede usar almacenamiento en memoria o el sistema gestor de bases de datos de
- id: number
- name: string

- [] _Debe existir una relación del tipo Many-to-Many entre los libros y los autores_
- [x] _Debe existir una relación del tipo Many-to-Many entre los libros y los autores_

**Endpoints:**

Expand All @@ -34,7 +34,7 @@ Se puede usar almacenamiento en memoria o el sistema gestor de bases de datos de
4. **Obtener todos los autores**: Deberá devolver un listado de todos los autores con los libros que tengan.
5. **Obtener Promedio de Páginas por Capítulo**: Obtener el dato de una instancia de Libro ya creada. Se debe devolver el id del libro consultado y un promedio de páginas por capítulo. Ambos en formato cadena, y con 2 decimales para el promedio.

- [] _Para la prueba es necesario realizar lo que dicta el enunciado, aunque se pueden agregar características no mencionadas (manejo de errores, repositorio de datos, validaciones, etc.)._
- [] _Se pueden asumir los aspectos que no aclare el enunciado, y realizar aclaraciones personales en caso de ser necesario._
- [x] _Para la prueba es necesario realizar lo que dicta el enunciado, aunque se pueden agregar características no mencionadas (manejo de errores, repositorio de datos, validaciones, etc.)._
- [x] _Se pueden asumir los aspectos que no aclare el enunciado, y realizar aclaraciones personales en caso de ser necesario._

¡Mucha suerte!
9 changes: 5 additions & 4 deletions live-coding/02.1-api-node/calls.http
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ GET http://localhost:3000/books

###

GET http://localhost:3000/books/2/pages-average
GET http://localhost:3000/books/1/pages-average

###

Expand All @@ -13,7 +13,8 @@ content-type: application/json
"id": 1,
"title": "Harry Potter y la gallina partida",
"chapters": 13,
"pages": 356
"pages": 356,
"authorsIds": [1]
}

###
Expand All @@ -26,6 +27,6 @@ POST http://localhost:3000/authors
content-type: application/json

{
"id": 2,
"name": "Jorge Luis"
"id": 1,
"name": "J.K. Rowling"
}
16 changes: 12 additions & 4 deletions live-coding/02.1-api-node/src/controllers/book.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,19 @@ export const getAll = (req, res) => {
}

export const create = (req, res) => {
const book = MemoryBook.create(req.body)
res.status(201).json(book)
try {
const book = MemoryBook.create(req.body)
res.status(201).json(book)
} catch (error) {
res.status(400).json({ error: error.message })
}
}

export const getPagesAverage = (req, res) => {
const book = MemoryBook.getPagesAverage(Number(req.params.id))
res.status(200).json(book)
try {
const avgInfo = MemoryBook.getPagesAverage(Number(req.params.id))
res.status(200).json(avgInfo)
} catch (error) {
res.status(400).json({ error: error.message })
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const authors = []
export const authors = []

export class MemoryAuthor {
static getAll () {
Expand Down
40 changes: 36 additions & 4 deletions live-coding/02.1-api-node/src/models/Book/MemoryBook.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,47 @@
const books = []
import { authors } from '../Author/MemoryAuthor.js'

export const books = []

export class MemoryBook {
static getAll () {
return books
return books.map(({ id, title, chapters, pages, authorsIds }) => {
const replacedNames = authorsIds.map(id => {
const author = authors.find(author => author.id === id)
return author.name
})

return {
id,
title,
chapters,
pages,
authors: replacedNames
}
})
}

static getPagesAverage (id) {
return books.find(book => book.id === id)
static getPagesAverage (bookId) {
const book = books.find(book => book.id === bookId)
const { id, chapters, pages } = book

if (!book) throw new Error('Book not found')

const pageAverage = parseFloat((pages / chapters).toFixed(2))

return { id, pageAverage }
}

static create (book) {
const booksAuthors = book.authorsIds

const AuthorsExist = booksAuthors.every(id => {
return authors.find(author => author.id === id)
})

if (!AuthorsExist) {
throw new Error('Author not found')
}

books.push(book)
return book
}
Expand Down

0 comments on commit f94f28a

Please sign in to comment.