You should implement an application for a library to store book and authors data.
This application must provide an HTTP REST API to attend the requirements.
Given a CSV file with many authors (more than a million), you need to build a command to import the data into the database. The CSV file will have the following format:
name
Luciano Ramalho
Osvaldo Santana Neto
David Beazley
Chetan Giridhar
Brian K. Jones
J.K Rowling
Each author record in the database must have the following fields:
- id (self-generated)
- name
You need to store the authors' data to complement the book data that will be stored afterward (see item #3).
Extra tip: If you use Django Framework you can do something like this...
python manage.py import_authors authors.csv
This endpoint needs to return a paginated list with the authors' data. Optionally the authors can be searched by name.
You need to implement these actions in your API:
- Create a book
- Read book's data
- Update book's data
- Delete book's data
Each book record has the fields:
- id (self-generated)
- name
- edition
- publication_year
- authors (more than one author can write a book)
To retrieve a book (in easy mode) we can filter by 4 fields (or a composition of these four):
- name
- publication_year
- edition
- author
But these 4 filters are optional. It must be possible to navigate all the books' data without any filter.
To create a book you need to send this payload (in json format) below:
{
"name": // Name of the book;
"edition": // Edition number;
"publication_year": // Publication year of the book;
"authors": // List of author ids, same ids of previous imported data
}
- Creating a new migration:
yarn db:generate <name of migration>
- Running migrations:
yarn db:migrate
- Inspecting migrations
yarn db:inspect
- Make 201 responses return Location header
- Make responses of authors return books
- Make responses of books return authors
- Apply auth on every endpoint
- Make sql queries more porformant