Navegg Back-end Challenge - Create an API
The general purpose is receiving a list of websites and organize this information to classify and store all the details of the website.
Briefing
The application must import a CSV file and add it to a database. This CSV contains some sites with their URLs and categories. You must develop an API to make a CRUD of these sites after import.
Project requirements
- The project needs to be written in Python, Ruby, Java, GoLang or similar (with framework or not);
- The code (including the variables names and comments) must be in English;
- The project needs documentation that anyone can install and test your application only by reading it;
The application needs to have the following features:
- Import a CSV file from here and add in a database (you must modeling a database according to data in the CSV file).
- A REST API for CRUD.
At a minimum, this must:
- Planning a relational database based on the relation of the field in the database;
- Ensure that register exists before delete or update;
- Avoid duplicated site names;
Bonus points for:
- We use Django Rest Framework internally, so using this framework in your application is a plus.
- Write automated tests.
What we are going to evaluate:
- Code abstraction! Reusable functions are better than hard code;
- Less code is better! If you can do the application with a little as possible of code, it’s a plus;
- Clean code! We need to read and understand what you’ve done;
- Documentation! Simple documentation that explains the main points.
Technical specifications
The CSV has the following columns:
Colum | detail |
---|---|
name | The site name |
URL | The page URLs (semicolon separated) |
category | The page categories (semicolon separated) |
status | The page status |
Important:
- The page entity can take N URLs and N categories.
API endpoints:
GET: /item/ -> list all active register in the database.
GET: /item/[id]/ -> list one register.
POST: /item/ -> create new register.
PATCH: /item/[id]/ -> modify register
DELETE: /item/[id]/ -> remove register
To conclude
Please submit your solution as a pull request to this repository or email a zip directly to challenge@navegg.com, and include in it:
- The source code;
- A link to your API working properly (or instructions to run locally);
- How long it took for you to get it done;
- What you would add/change if you had more time
Thanks, and have fun!