# Henrique Gonçalves
## Calls API
A new product requirement states that all Talkdesk calls should be registered in a centralized system. A call has always two participants, a **customer** and an **agent**, and it can be either **inbound** (started by the customer) or outbound (started by the agent). The system must fulfill the following use cases:
* Ability to **register a new** call
* Ability to mark a call as **finished**
* Ability to **retrieve** the data associated with a given call
* Ability to list calls matching a given criteria. It should be possible to filter by:
* Start and end dates
* Status (in progress / finished)
* Contact number
Clients should be able to interact with this system through a REST API. Each call pertains to a specific **tenant** (and a tenant can only access calls belonging to it), it must have an **unique identifier** and a new record must include the following information:
* Start date
* Source number
* Destination number
* Direction (inbound/outbound)
When a call is marked as finished, the record must also include the corresponding end date.
## Solution design
*:video_game: Go Henrique :muscle:*
Registar Chamada:
Request body: {
"direction": "",
"source_number": "",
"destination_number": "",
"start_date": "",
}
[POST] /calls
CREATED 201
{
"response": {
"status": "",
"direction": "",
"source_number": "",
"destination_number": "",
"call_id": "",
"start_date": "",
"end_date": ""
}
"details": {}
}
Obter Chamada:
[GET] /calls/:id/
OK 200
Marcar chamada como terminada:
[PUT] /calls/:id/
no body {'state': 'end'}
Listar chamadas:
[GET] /calls?start_date=...&end_date=...
{
"results": [
{"status": "",
"direction": "",
"source_number": "",
"destination_number": "",
"call_id": "",
"start_date": "",
"end_date": ""},
{...},
],
"details": {
"total": ...
"pag": 0,
}
}