# API: Files

---

- [Introdução](#intro)
- [Upload](#upload)

<a name="intro"></a>
## Introdução

As rotas descritas abaixo são responsáveis pelo upload e pelo acesso a arquivos privados no servidor.

A API está configurada para interpretar qualquer entidade que contenha uma propriedade com o sufixo '_file' como responsável por armazenar o caminho de um arquivo no armazenamento.

Ao salvar uma entidade que contenha um desses campos, o sufixo '_file' deve ser substituído por '_temp' no corpo da requisição.

O campo com sufixo '_temp' receberá o 'file_name' contido na resposta do endpoint de upload.

Exemplo:
`profile_picture_file` deve se alterado para `profile_picture_temp`.

Internamente, ao salvar um campo com o sufixo '_temp', a API move o arquivo de um diretório temporário para um diretório permanente e, automaticamente, atribui o caminho do arquivo movido ao campo '_file' correspondente.

<a nam="upload"></a>
## Upload

### Endpoint
|Método|URI|Headers|
|:|:-|:|
|POST|`/file-upload`|<ul><li>Content-Type: multipart/form-data</li></ul>|

### Body
```json
file: <file>,
code: string(optional)
```

### Responses
<larecipe-badge type="success" rounded><i class="fa fa-check" style="margin-right:9px"></i>200 - OK</larecipe-badge>
```json
{
    "file_name": <file_name>,
    "url": <url>,
    "code": <code>
}
```

<larecipe-badge type="danger" rounded><i class="fa fa-lock" style="margin-right:9px"></i>401 - Unauthorized</larecipe-badge>
```json
{
    "message": "Unauthenticated."
}
```

<a name="get_private"></a>
## Get Private Files

Este endpoint não pode ser acessado diretamente pelos consumidores da API, pois exige uma assinatura. Ou seja, a própria API é responsável por gerar a URL assinada, que autoriza o acesso. Esse recurso é especialmente utilizado para fornecer URLs de acesso a arquivos associados aos campos '_file'.

\* Este endpoint não está no path `/api`

### Endpoint
|Método|URI|Headers|
|:|:-|:|
|GET|`/private-storage/<disk>/<filePath>?signature=<signature>`|Default|

### Body
```json
Empty
```

### Responses
<larecipe-badge type="success" rounded><i class="fa fa-check" style="margin-right:9px"></i>200 - OK</larecipe-badge>
```json
***file***
```

<larecipe-badge type="danger" rounded><i class="fa fa-lock" style="margin-right:9px"></i>401 - Unauthorized</larecipe-badge>
```json
{
    "message": "Unauthenticated."
}
```