https://github.com/ppcamp/go-eventials-code-challenge
Repositório para o desafio Backend da Eventials
https://github.com/ppcamp/go-eventials-code-challenge
Last synced: about 1 year ago
JSON representation
Repositório para o desafio Backend da Eventials
- Host: GitHub
- URL: https://github.com/ppcamp/go-eventials-code-challenge
- Owner: ppcamp
- Archived: true
- Created: 2021-06-22T21:52:54.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-06-25T20:15:06.000Z (about 5 years ago)
- Last Synced: 2025-03-03T05:43:43.968Z (over 1 year ago)
- Language: Go
- Size: 97.7 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ORIGINAL.md
Awesome Lists containing this project
README
# Data integration challenge
Welcome to Data Integration challenge.
Yawoen company has hired you to implement a Data API for Data Integration team.
Data Integration team is focused on combining data from different heterogeneous sources and providing it to an unified view into entities.
## The challenge
It would be really good if you try to make the code using Go language :)
The other technologies you can feel free to choose.
### 1 - Load treated company data in a database
Read data from CSV file and load into the database to create an entity named **companies**.
This entity should contain the following fields: id, company name and zip code.
- The loaded data should have the following treatment:
- **Name:** upper case text
- **zip:** a five digit text
support file: q1_catalog.csv
### 2 - An API to integrate data using a database
Yawoen now wants to get website data from another source and integrate it with the entity you've just created on the database. When the requirements are met, it's **mandatory** that the **data are merged**.
This new source data must meet the following requirements:
- Input file format: CSV
- Data treatment
- **Name:** upper case text
- **zip:** a five digit text
- **website:** lower case text
- Parameters
- Name: string
- Zip: string
- Website: string
Build an API to **integrate** `website` data field into the entity records you've just created using **HTTP protocol**.
The `id` field is non existent on the data source, so you'll have to use the available fields to aggregate the new attribute **website** and store it. If the record doesn't exist, discard it.
support file: q2_clientData.csv
### Extra - Matching API to retrieve data
Now Yawoen wants to create an API to provide information getting companies information from the entity to a client.
The parameters would be `name` and `zip` fields. To query on the database an **AND** logic operator must be used between the fields.
You will need to have a matching strategy because the client might only have a part of the company name.
Example: "Yawoen" string from "Yawoen Business Solutions".
Output example:
```
{
"id": "abc-1de-123fg",
"name": "Yawoen Business Solutions",
"zip":"10023",
"website": "www.yawoen.com"
}
```
## Notes
- Make sure other developers can easily run the application locally.
- Yawoen isn't picky about the programming language, the database and other tools that you might choose. Just take notice of the market before making your decision.
- Automated tests are mandatory.
- Document your API: fill out a **README.md** file with instructions on how to install and use it.
## Deliverable
- :heavy_check_mark: It would be REALLY nice if it was hosted in a git repo of your **own**. You can create a new empty project, create a branch and Pull Request it to the new master branch you have just created. Provide the PR URL for us so we can discuss the code :grin:. BUT if you'd rather, just compress this directory and send it back to us.
- :heavy_check_mark: Make sure Yawoen folks will have access to the source code.
- :heavy_check_mark: Fill the **Makefile** targets with the apropriated commands (**TODO** tags). That is for easy executing the deliverables (tests and execution). If you have other ideas besides a Makefile feel free to use and reference it on your documentation.
- :x: **Do not** start a Pull Request to this project.
Have fun!