---
# System prepended metadata

title: Endpoints User E2W

---

# Endpoints User E2W

Esse arquivo serve como base de desenvolvimento de clients que tenham como base o consumo da API de user do E2W.

**Navegação:**
* [Pessoa](#Pessoa)
* [Notificações](#Notificações)
* [Convites](#Convites)
* [LinkedinAuth](#LinkedinAuth)
* [GoogleAuth](#GoogleAuth)
* [Histórico](#Histórico)
* [Avaliação](#Avaliação)
* [Tarefa](#Tarefa)
* [Tópico](#Tópico)
* [Comunidade](#Comunidade)
* [Métricas](#Métricas)

**Informações gerais:**
>  Todas as datas devem ser passadas e recebidas usando o formato ISO 8601

## Pessoa

### POST /person
Registra uma pessoa no sistema.

**Request Body**
```json
{
    "name": "João Carlos",
    "email": "joao@uol.com.br",
    "password": "jao123"
}
```

**Response 201**
```json
{
    "token": "token",
    "refreshToken": "refresh",
    "accessTokenRenewInterval": "1800",
    "person": {
        "id": 1,
        "name": "João Carlos",
        "email": "joao@uol.com.br",
        "emailGoogle": "joao@uol.com.br",
        "emailLinkedin": "joao@uol.com.br",
        "gender": "MALE",
        "birthday": "2019-11-18",
        "schooling": "EM",
        "state": "SP",
        "lastEvaluation": "2020-10-28"
    }
}
```

**Response 400**
```json
{
    "error": "400 Bad Request: Email already in use"
}
```
---

### POST /person/login
Autentica uma pessoa no sistema.

**Request Body**
```json
{
    "email": "joao@uol.com.br",
    "password": "jao123"
}
```

**Response 200**
```json
{
    "token": "token",
    "refreshToken": "refresh",
    "accessTokenRenewInterval": "1800",
    "person": {
        "id": 1,
        "name": "João Carlos",
        "email": "joao@uol.com.br",
        "emailGoogle": "joao@uol.com.br",
        "emailLinkedin": "joao@uol.com.br",
        "gender": "MALE",
        "birthday": "2019-11-18",
        "schooling": "EM",
        "state": "SP",
        "lastEvaluation": "2020-10-28"
    }
}
```

**Response 400**
```json
{
    "error": "400 Bad Request: Invalid login"
}
```
---

### POST /person/token/refresh
Obtem um novo token de acesso.

**Request Headers**
```json
{
    "Authorization": "Bearer <refresh token do usuário>"
}
```

**Response 200**
```json
{
    "token": "token",
    "refreshToken": "refresh",
    "accessTokenRenewInterval": "1800",
    "person": {
        "id": 1,
        "name": "João Carlos",
        "email": "joao@uol.com.br",
        "emailGoogle": "joao@uol.com.br",
        "emailLinkedin": "joao@uol.com.br",
        "gender": "MALE",
        "birthday": "2019-11-18",
        "schooling": "EM",
        "state": "SP",
        "lastEvaluation": "2020-10-28"
    }
}
```
---

### GET /person/<int:person_id>
Consulta as informações de uma pessoa no sistema.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response Body**
```json
{
    "id": 1,
    "name": "João Carlos",
    "email": "joao@uol.com.br",
    "emailGoogle": "",
    "emailLinkedin": "joao@uol.com.br",
    "gender": "MALE",
    "birthday": "2019-11-18",
    "schooling": "EM",
    "state": "SP",
    "patrimonyDistribution": "UNKNOWN",
    "lastEvaluation": "2020-10-28"
}
```

**Response 401**
```json
{
    "error": "Invalid Credentials"   
}
```
---

### PATCH /person/<int:person_id>
Altera as informações de uma pessoa no sistema.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Enums**

**gender:**

| valor      | significado   |
| ---------- | ------------  |
| FEMALE     | Feminino      | 
| MALE       | Masculino     | 
| NON_BINARY |  'Não-binário'|

**schooling:**

| valor      | significado                          |
| ---------- | ------------------------------------ |
|  EFI       | Ensino Fundamental Incompleto        |
|  EFC       | Ensino Fundamental Completo          | 
|  EMI       | Ensino Médio Incompleto              | 
|  EMC       | Ensino Médio Completo                | 
|  ESI       | Ensino Superior Incompleto           |
|  ESC       | Ensino Superior Completo             |
|  PGE       | Pós-graduação no nível Especialização| 
|  PGM       | Pós-graduação no nível Mestrado      | 
|  PGD       | Pós-graduação no nível Doutorado     | 

**state:**

| valor      | significado          |
| ---------- | -------------------- |
| AC         | Acre                 |
| AL         | Alagoas              |
| AP         | Amapá                |
| AM         | Amazonas             |
| BA         | Bahia                |
| CE         | Ceará                |
| DF         | Distrito Federal     |
| ES         | Espírito Santo       |
| GO         | Goiás                |
| MA         | Maranhão             |
| MT         | Mato Grosso          |
| MS         | Mato Grosso do Sul   |
| MG         | Minas Gerais         |
| PA         | Pará                 |
| PB         | Paraíba              |
| PR         | Paraná               |
| PE         | Pernambuco           |
| PI         | Piauí                |
| RJ         | Rio de Janeiro       |
| RN         | Rio Grande do Norte  |
| RS         | Rio Grande do Sul    |
| RO         | Rondônia             |
| RR         | Roraima              |
| SC         | Santa Catarina       |
| SP         | São Paulo            |
| SE         | Sergipe              |
| TO         | Tocantins            |

**patrimonyDistribution:**

| valor         | significado  |
| ------------- | -------------|
| CONCENTRATED  | Concentrado  |
| DIVERSIFIED   | Diversificado|
| UNKNOWN       | Desconhecido | 

**Request Body**
```json
{
    "name": "João Carlos",
    "email": "joao@uol.com.br",
    "gender": "MALE",
    "birthday": "2019-11-18",
    "schooling": "EM",
    "state": "SP",
    "patrimonyDistribution": "DIVERSIFIED"
}
```

**Response 200**
```json
{
    "id": 1,
    "name": "João Carlos",
    "email": "joao@uol.com.br",
    "gender": "MALE",
    "birthday": "2019-11-18",
    "schooling": "EM",
    "state": "SP",
    "patrimonyDistribution": "DIVERSIFIED"
}
```

**Response 400**
```json
{
    "error": "This email already exists"   
}
```

**Response 401**
```json
{
    "error": "Invalid Credentials"   
}
```
---

### PUT /person/<int:person_id>/password
Altera o password do usuário.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "newPassword": "123",
    "email": "test@email.com",
    "password": "test"
}
```
**Response 200**
```json
{
  "message": "Password changed successfully"
}
```
---

### HEAD /people/emails/<email:string>
Verifica existência de um usuário via e-mail.

Se e-mail existir na base:

**Response Body 200**
```json
{}
```

Caso e-mail não exista na base:

**Response Body 404**
```json
{}
```
---

## Notificações

### GET /person/<int:person_id>/notifications
Lista todas as notificações de um usuário.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Querystrings:**

| Parâmetro| Descrição    |
| -------- | --------     |
| wasRead  | true ou false|

**Response 200**
```json
[
    {
        "createdAt": "2020-04-14",
        "id": 1,
        "title": "Você tem uma nova mensagem",
        "type": "GENERIC",
        "wasRead": true,
        "wasReadAt": "2020-04-14"
    },
    {
        "createdAt": "2020-04-14",
        "id": 2,
        "title": "Você tem uma avaliação pendente",
        "type": "EVALUATION_REMINDER",
        "wasRead": false,
        "wasReadAt": null
    }
]
```
---

### PATCH /person/<int:person_id>/notification/<int:notification_id>
 Altera o status de uma notificação.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "wasRead": true
}
```

**Response 200**
```json
{
    "createdAt": "2020-04-14",
    "id": 1,
    "title": "Você tem uma nova mensagem",
    "type": "GENERIC",
    "wasRead": true,
    "wasReadAt": "2020-04-14"
}
```
---

## Convites

### GET /invites/person/<int:person_id>
Retorna os convites feitos para a pessoa.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 200**
```json
{  
  "id": 1,
  "company": "MasterTech", 
  "person": {
    "id": 2,
    "name": "Carol",
    "email": "carol@email.com"
  },
  "role": "engenharia",
  "unit": "Anlise desenvolvimento",
  "approved": null
}
```
---

### PUT /invites/person/<int:person_id>
Aceita ou recusa os convites feitos para a pessoa.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 200**
```json
{
    "accept": true,
    "invite_ids": [
    {
      "id": 1
    },
    {
      "id":2
    }    
  ]
} 
```
---

## LinkedinAuth

### POST /person/linkedinauth
Autentica uma pessoa usando o token do linkedin auth.

**Request Body**
```json
{
    "code": "linkedin code",
    "redirectUri": "linkedin redirectUri"
}
```

**Response 200**
```json
{
    "token": "token",
    "refreshToken": "refresh",
    "person": {
        "id": 1,
        "name": "João Carlos",
        "email": "joao@uol.com.br",
        "emailGoogle": "",
        "emailLinkedin": "joao@uol.com.br",
        "gender": "MALE",
        "birthday": "2019-11-18",
        "schooling": "EM",
        "state": "SP",
        "lastEvaluation": "2020-10-28"
    }
}
```
---

### PATCH /person/<int:person_id>/linkedin
Adiciona linkedin a conta de uma pessoa.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "code": "linkedin code",
    "redirectUri": "linkedin redirectUri"
}
```

**Response 200**
```json
{
    "id": 1,
    "name": "João Carlos",
    "email": "joao@uol.com.br",
    "emailGoogle": "",
    "emailLinkedin": "joao@uol.com.br",
    "gender": "MALE",
    "birthday": "2019-11-18",
    "schooling": "EM",
    "state": "SP",
    "lastEvaluation": "2020-10-28"
}
```
---

### DELETE /person/<int:person_id>/linkedin
Remove o linkedin a conta de uma pessoa

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 204**
```json
{}
```
---

## GoogleAuth

### POST /person/googleauth
Autentica uma pessoa usando o token do google auth.

**Request Body**
```json
{
    "tokenId": "google auth token"
}
```

**Response 200**
```json
{
    "token": "token",
    "refreshToken": "refresh",
    "person": {
        "id": 1,
        "name": "João Carlos",
        "email": "joao@uol.com.br",
        "emailGoogle": "joao@uol.com.br",
        "emailLinkedin": "",
        "gender": "MALE",
        "birthday": "2019-11-18",
        "schooling": "EM",
        "state": "SP",
        "lastEvaluation": "2020-10-28"
    }
}
```
---

### PATCH /person/<int:person_id>/google
Adiciona google a conta de uma pessoa

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "tokenId": "google auth token"
}
```

**Response 200**
```json
{
    "id": 1,
    "name": "João Carlos",
    "email": "joao@uol.com.br",
    "emailGoogle": "joao@uol.com.br",
    "emailLinkedin": "",
    "gender": "MALE",
    "birthday": "2019-11-18",
    "schooling": "EM",
    "state": "SP",
    "lastEvaluation": "2020-10-28"
}
```
---

### DELETE /person/<int:person_id>/google
Remove o google da conta de uma pessoa

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 204**
```json
{}
```
---

## Histórico

### GET /person/<int:person_id>/history
 Retorna o histórico de atividades de um usuário
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Querystrings:**

| Parâmetro  | Descrição   |
| ---------- | ------------  |
| relatedTo  | entre essas opções: TASK, EXECUTION e TOPIC| 
| from       | Desde quando será retornado o histórico| 

 **Response 200**
```json
[
    {
        "action": "TOPIC_EVALUATED",
        "id": 11,
        "payload": "{\"topic\": {\"description\": \"Exemplo de descrição\", \"symbol\": \"SCM1\", \"id\": 1, \"name\": \"SCRUM\"}, \"newValue\": 5, \"oldValue\": 10}",
        "registered_at": "2020-04-07T13:56:22+03:00",
        "relatedTo": "TOPIC"
    },
    {
        "id": 12,
        "action": "TOPIC_EVALUATED",
        "payload": "{\"topic\": {\"description\": \"Exemplo de descrição\", \"symbol\": \"SCM1\", \"id\": 1, \"name\": \"SCRUM\"}, \"newValue\": 7, \"oldValue\": 0}",
        "registered_at": "2020-04-07T13:58:27+03:00",
        "relatedTo": "TOPIC"
    }
]
```

## Avaliação

### POST /person/<int:person_id>/topic/<int:topic_id>/evaluation
Cadastra a avaliação do usuário logado no topico em questão.

> Obs: o campo justification não é obrigatório, a ideia é ser preenchido somente quando houver o valor mudar em relação a última auto avaliação.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "confirmation": "SC",
    "value": 8,
    "justification": "Andei estudando",
    "studyTasksIds": [1, 2]
}
```

**Response 201**
```json
{
    "id": 1,
    "confirmation": "SC",
    "value": 8,
    "justification": "Andei estudando",
    "evaluatedAt": "2019-11-18"
}
```
---

### GET /person/<int:person_id>/topic/<int:topic_id>/evaluations
Lista o historico de auto avaliações do usuário na topico com filtro de data.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**QueryStrings**

| Parâmetro          |      Descrição                           |
|--------------------|:----------------------------------------:|
| from               | Desde quando será retornado a avaliações |
| to                 | Até quando será retornado as avaliações  |

**Response 200**
```json
[
    [
        {
            "date": "2021-08",
            "value": 4.0
        },
        {
            "date": "2021-07",
            "value": 3.1
        },
        {
            "date": "2021-06",
            "value": 4.3
        },
        {
            "date": "2021-05",
            "value": 3.25
        }
    ]
]
```
---

### GET /person/<int:person_id>/evaluations/pending
Lista as re-avaliações pendentes de uma pessoa.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**QueryStrings**

| Parâmetro    |      Descrição                |
|--------------------|:---------------------------:|
| page      | Página                               |
| pageSize  | Quantidade de itens por página       |

**Response 200**
```json
{
   "items": [{
    "id": 1,
    "lastEvaluationDate": "2021-05-22",
    "topic": {
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
        "id": 1,
        "name": "Scrum",
        "skillKind": "SOFT",
        "symbol": "SC"
    }
    }],
    "page": 1, 
    "nextPage": 2, 
    "prevPage": 0,
    "totalPages": 10,
    "totalItems": 1
}
```
---

## Tarefa

### POST /person/<int:person_id>/task
Cria uma tarefa de estudo do usuário.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "studyTask": {
        "title": "Aprender Python",
        "description": "Comprar um curso da Alura",
        "taskMedium": "REMOTE_SYNC",
        "contentType":"VISUAL_EXPOSURE",
        "contentFormat":"RECORDED",
        "taskMotive": "SELF_INITIATIVE",
        "taskFormat": "BY_MYSELF",
        "contentAcquisition": "PAID",
        "topic": {
            "id": 1
        },
    "parent": {
        "id": 1
    }
    },
    "evaluation": {
        "id": 8
    }, 
    "startAt": "2019-11-20",
    "deadline": "2019-11-25"
}
```

**Response 201**
```json
{
    "id": 1,
    "studyTask": {
        "title": "Aprender Python",
        "description": "Comprar um curso da Alura",
        "taskMedium": "REMOTE_SYNC",
        "contentType":"VISUAL_EXPOSURE",
        "contentFormat":"RECORDED",
        "taskMotive": "SELF_INITIATIVE",
        "taskFormat": "BY_MYSELF",
        "contentAcquisition": "PAID",
        "topic": {
            "id": 1,
            "name": "Python",
            "symbol": "PY",
            "description": "xpto",
            "skillKind": "HARD"
        },
        "authorId": 1,
        "parentId": 1
    },
    "status": "COMPLETE",
    "startAt": "2019-11-20",
    "deadline": "2019-11-25",
    "timeItTook": 100,
    "nps": 0,
    "createdAt": "2020-04-14"
}
```
---

### POST /person/<int:person_id>/task/<int:task_id>/execution
Cria uma execução a partir de uma tarefa já existente.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "evaluation": {
        "id": 8
    }, 
    "startAt": "2019-11-20",
    "deadline": "2019-11-25"
}
```

**Response 201**
```json
{
    "id": 1,
    "studyTask": {
        "title": "Aprender Python",
        "description": "Comprar um curso da Alura",
        "taskMedium": "REMOTE_SYNC",
        "contentType":"VISUAL_EXPOSURE",
        "contentFormat":"RECORDED",
        "taskMotive": "SELF_INITIATIVE",
        "taskFormat": "BY_MYSELF",
        "contentAcquisition": "PAID",
        "topic": {
            "id": 1,
            "name": "Python",
            "symbol": "PY",
            "description": "xpto",
            "skillKind": "HARD"
        },
        "authorId": 1,
        "parentId": 1
    },
    "status": "PENDING",
    "startAt": "2019-11-20",
    "deadline": "2019-11-25",
    "timeItTook": 100,
    "nps": 0,
    "createdAt": "2020-04-14"
}
```
---

### PATCH /person/<int:person_id>/task/<int:task_id>
Altera o detalhes de uma tarefa.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "title": "Aprender Python",
    "description": "Comprar um curso da Alura",
    "taskMedium": "REMOTE_SYNC",
    "contentType":"VISUAL_EXPOSURE",
    "contentFormat": "LIVE",
    "contentAcquisition": "PAID",
    "taskMotive": "SELF_INITIATIVE",
    "taskFormat": "BY_MYSELF"
}
```

**Response 200**
```json
{
    "id": 1,
    "title": "Study task",
    "description": "A Study task",
    "contentAcquisition": "PAID",
    "contentType": "VISUAL_EXPOSURE",
    "contentFormat": "LIVE",
    "taskFormat": "IN_GROUP",
    "taskMedium": "REMOTE_SYNC", 
    "taskMotive": "SELF_INITIATIVE",
    "topic":{
        "id": 1,
        "name": "topic",
        "symbol": "TPC1"
    },
    "createdAt": "2019-11-18"
}
```
---

### PATCH /person/<int:person_id>/task/<int:task_id>/execution/<int:execution_id>
Altera o detalhes de uma execução.
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Request Body**
```json
{
    "status":  "COMPLETE",
    "deadline": "2019-11-18",
    "start_at":  "2019-11-18",
    "nps": "10",
    "timeItTook": 100
}
```

**Response 200**
```json
{
    "id":  1,
    "status":  "COMPLETE",
    "deadline": "2019-11-18",
    "start_at":  "2019-11-18",
    "nps": "10",
    "timeItTook": 100,
    "createdAt": "2019-11-18"
}
```
---

### GET /tasks
Lista todas as tarefas da comunidade.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**QueryStrings**

| Parâmetro          | Descrição                                 |
|--------------------|:-----------------------------------------:|
| contentFormat      | RECORDED, LIVE                            |
| topicId            | Id de um tópico                           |
| contentType        | HARD, SOFT, BOTH                          |
| taskMedium         | REMOTE, FACE_TO_FACE                      |
| title              | Título de uma tarefa                      |
| sortType           | RECENT, POPULAR                           |


**Response 200**
```json
[
    {
        "author_id": 3,
        "contentAcquisition": null,
        "contentType": null,
        "contentFormat": "LIVE",
        "createdAt": "2020-04-06",
        "description": "Meu amigo vai me ajudar",
        "id": 1,
        "parent_id": null,
        "nps": 3,
        "taskFormat": null,
        "taskMedium": "REMOTE_SYNC",
        "taskMotive": null,
        "timeItTook": 100,
        "title": "aprender python",
        "topic": {
            "description": "Exemplo de descrição",
            "id": 1,
            "name": "SCRUM",
            "symbol": "SCM1"
        }
    }
]
```
---

### GET /task/<int:task_id>
Consulta os detalhes de uma tarefa.

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 200**
```json
{
    "author_id": 3,
    "contentAcquisition": null,
    "contentType": null,
    "contentFormat": "RECORDED",
    "createdAt": "2020-04-06",
    "description": "Meu amigo vai me ajudar",
    "id": 1,
    "parent_id": null,
    "nps": 3,
    "timeItTook": 100,
    "taskFormat": null,
    "taskMedium": null,
    "taskMotive": null,
    "title": "aprender python",
    "topic": {
        "description": "Exemplo de descrição",
        "id": 1,
        "name": "SCRUM",
        "symbol": "SCM1"
    }
}
```
---

### GET /person/<int:person_id>/executions
Consulta as execuções de tarefa do usuário

**QueryStrings**

| Parâmetro          | Descrição                                 |
|--------------------|:-----------------------------------------:|
| contentFormat      | RECORDED, LIVE                            |
| topicId            | Id de um investimento                     |
| contentType        | HARD, SOFT, BOTH                          |
| taskMedium         | REMOTE, FACE_TO_FACE                      |
| title              | Título de uma tarefa                      |
| status             | PENDING, DOING, COMPLETE, DISMISS, OVERDUE|
| page               | Página                                    |
| pageSize           | Quantidade de itens por página            |

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 200**
```json
{
    "items": [
     {
       "id":  1,
       "studyTask": {
           "author_id": 3,
           "contentAcquisition": null,
           "contentType": null,
           "contentFormat": "LIVE",
           "createdAt": "2020-04-06",
           "description": "Meu amigo vai me ajudar",
           "id": 1,
           "parent_id": null,
           "nps": 3,
           "taskFormat": null,
           "taskMedium": null,
           "taskMotive": null,
           "title": "aprender python",
           "topic": {
               "description": "Exemplo de descrição",
               "id": 1,
               "name": "SCRUM",
               "symbol": "SCM1"
           }
       },
       "status":  "COMPLETE",
       "deadline": "2019-11-18",
       "start_at":  "2019-11-18",
       "nps": "10",
       "timeItTook": 100,
       "createdAt": "2019-11-18"
     }
    ],
    "nextPage": 2,
    "page": 1,
    "prevPage": 0,
    "totalItems": 1,
    "totalPages": 1
}
```
---

### GET /person/<int:person_id>/task/<int:task_id>/execution/<int:execution_id>
Consulta os detalhes da execução de uma tarefa

**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**Response 200**
```json
{
    "id":  1,
    "studyTask": {
        "author_id": 3,
        "contentAcquisition": null,
        "contentType": null,
        "contentFormat": "LIVE",
        "createdAt": "2020-04-06",
        "description": "Meu amigo vai me ajudar",
        "id": 1,
        "parent_id": null,
        "nps": 3,
        "taskFormat": null,
        "taskMedium": null,
        "taskMotive": null,
        "title": "aprender python",
        "topic": {
            "description": "Exemplo de descrição",
            "id": 1,
            "name": "SCRUM",
            "symbol": "SCM1"
        }
    },
    "status":  "COMPLETE",
    "deadline": "2019-11-18",
    "start_at":  "2019-11-18",
    "nps": "10",
    "timeItTook": 100,
    "createdAt": "2019-11-18"
}
```
---

## Tópico

### GET /topic/{id}
Consulta informações sobre um tópico.

**Response 200**
```json
{
    "id": 1,
    "symbol": "SCM1",
    "name": "Scrum Master"
}
```
---

### GET /person/<int:person_id>/topics/summary
Retorna o resumo de todas as topicos de uma pessoa, no caso, a ultima avaliação de cada topico
 
**Request Headers**
```json
{
    "Authorization": "Bearer <token do usuário>"
}
```

**QueryStrings**

| Parâmetro              |  Descrição              |
|--------------------|:---------------------------:|
| page      | Página                               |
| pageSize  | Quantidade de itens por página       |

 **Response 200**
```json
{
 "items": [
    {
        "count": 4,
        "lastDate": "2019-11-19",
        "lastValue": 0.1,
        "topic": {
            "id": 1,
            "name": "SCRUM",
            "symbol": "SCM1",
            "skillKind": null,  
            "description": "Texto",
            "tracking": {
                "average": 5.84,
                "variation": -0.12
            },
        "activeTasksCount": 2
        }
    },
    {
        "count": 2,
        "lastDate": "2019-11-18",
        "lastValue": 0.4,
        "topic": {
            "id": 2,
            "name": "Product Owner",
            "symbol": "PDO1",
            "skillKind": null,  
            "description": "Texto",
            "tracking": {
                "average": 5.84,
                "variation": -0.12
            },
        "activeTasksCount": 2
        }
    }
 ],
 
 "page": 1, 
 "nextPage": 2, 
 "prevPage": 0,
 "totalPages": 1,
 "totalItems": 2
}
```
---

### GET /topics
Listar todas os tópicos disponíveis.

**QueryStrings**

| Parâmetro    |      Descrição                    |
|--------------------|:---------------------------:|
| skillKind          | HARD, SOFT, BOTH            |
| page      | Página                               |
| pageSize  | Quantidade de itens por página       |

**Response 200**
```json
{
    "items": [
      {
         "id": 1,
         "symbol": "SCM1",
         "name": "Scrum Master",
         "skillKind": null,  
         "description": "Texto",
         "tracking": {
                "average": 5.84,
                "variation": -0.12
            }
        },
     {
         "id": 2,
         "symbol": "PDTO3",
         "name": "Product Owner",
         "skillKind": null,  
         "description": "Texto",
         "tracking": {
                "average": 5.84,
                "variation": -0.12
            }
        }
    ],
    "nextPage": 2,
    "page": 1,
    "prevPage": 0,
    "totalItems": 1,
    "totalPages": 1
}
```
---

## Comunidade

### GET /person/<int:person_id>/companies
Retorna as empresas vinculadas a uma pessoa.

```json
{
    "items":[
    {
      "id": 1,
      "name": "MasterTech"
    }   
  ], 
    "page": 1, 
    "nextPage": 2, 
    "prevPage": 0,
    "totalPages": 10,
    "totalItems": 100
}   
```
---

### GET /community/<string:community_id>/metrics
Retorna as métricas da comunidade

**Response 200**
```json
{
    "skillKindDistribution": {
        "HARD": 12.3,
        "SOFT": 64.9,
        "BOTH": 22.8
    },
    "contentTypeDistribution": {
        "TEXT": 20.0,
        "VIDEO": 60.0,
        "AUDIO": 5.0,
        "VISUAL_EXPOSURE": 5.0,
        "HANDS_ON": 10.0
    },
     "TopicWithHighestValue": {
          "id": 1,
          "symbol": "SCM1",
          "name": "Scrum Master",
          "tracking": {
              "average": 1,
              "variation": 0.3
          }
     },
      "TopicWithLowestValue": {
           "id": 1,
           "symbol": "SCM1",
           "name": "Scrum Master",
           "tracking": {
               "average": 1,
               "variation": 0.3
           }
       }
}
```

**Response 404**
```json
{
 "message": "The community 1 was not found"
}
```
---

### GET /community/<string:community_id>/topic/<int:topic_id>/metrics/average
Retorna as médias dos tópicos da comunidade.

**QueryStrings:**

| Parâmetro | Descrição                           |
|-----------|-------------------------------------|
| from      | Desde quando será retornado a média |
| to        | Até quando será retornado a média   |

**Response 200**
```json
[
    {
        "average": 5.21,
        "date": "2019-11"
    },
    {
        "average": 5.87,
        "date": "2019-10"
    }
]
```
---

### GET /community/<string:community_id>/topics/trending
Lista os top 5 tópicos mais avaliados no momento.

**Response 200**
```json
[
  {
    "topic": {
        "id": 2,
        "name": "Scrum",
        "symbol": "SCM1",
        "description": "lorem ipsum",
        "skillKind": "BOTH"
    },
    "average": 8.975,
    "variation": 0.173,
    "evaluations": 23
  },
  {
    "topic": {
        "id": 2,
        "name": "Product Owner",
        "symbol": "PDO1",
        "description": "lorem ipsum",
        "skillKind": "BOTH"
    },
    "average": 7.975,
    "variation": 0.573,
    "evaluations": 26
  }
]
```
---

## Métricas

### GET /person/<int:person_id>/metrics
Retornar as métricas gerais dos aportes de um usuário.

**Response 200**
```json
{
    "skillKindDistribution": {
        "HARD": 12.3,
        "SOFT": 64.9,
        "BOTH": 22.8
    },
    "top3MostUsedContentType": ["VIDEO", "AUDIO", "TEXT"],
    "investmentWithMoreTasks": {        
      "id": 1,
      "name": "SCRUM",
      "symbol": "SCM1",
      "description": "XYZ",
      "skillKind": "HARD"
    },
    "tasksFromCommunityCount": 4
}
```
---

### GET  /person/<int:person_id>/history/metrics
Listar informações do extrato de uma pessoa dos últimos 3 meses

**Request Headers**
```json
{
    "Authorization": "Bearer <refresh token do usuário>"
}
```

**Response 200**
```json
{
   "newInvestmentSubscriptions": 0,
   "newAssignedTasks": 5,
   "reevaluations": 2
}
```

**Response 404**
```json
{"error": "The person activity {id} was not found"}
```
---

### GET /person/<int:person_id>/executions/metrics
Listar as informações das execuções do usuário

**Request Headers**
```json
{
    "Authorization": "Bearer <refresh token do usuário>"
}
```

**Response 200**
```json
{
    "completedExecutions": 3,
    "totalExecutions": 26,
    "contentTypeDistribution": {
        "AUDIO": 7.7,
        "HANDS_ON": 0.0,
        "TEXT": 3.8,
        "VIDEO": 3.8,
        "VISUAL_EXPOSURE": 84.6
    },
    "mostInvestedTopic": {
        "description": "SEI ",
        "id": 2,
        "name": "Elixr",
        "symbol": "ELX1",
        "tracking": {
            "average": 6.95,
            "variation": 6.95
        }
    }
}
```
