docs(api): fix and expand PATCH /api/customer/profile documentation

Corrected method (was POST /api/customer/:id, now PATCH /api/customer/profile).
Added profilePicture field: base64 data URL, max 2 MB, jpeg/png/webp.
Added field table, format examples, profilePictureUrl response, error table.
This commit is contained in:
Daniel Arantes Loverde
2026-06-04 21:23:13 -03:00
parent eae9613ed5
commit ff1ad1254d

View File

@@ -127,45 +127,66 @@ Used when interacting with a specific store (Catalog, Checkout).
**Campos internos não retornados para o app:** `keyHash`, `strongHash`, `source`, `isShadow`, `profile_metrics`, `behavioral_stats`, `otpHash`, `otpHashParams`, `otpExpiresAt`.
### 4. Update Profile
**POST** `/api/customer/:id`
**PATCH** `/api/customer/profile`
**Headers:**
- `Authorization: Bearer <JWT_Token>`
- `Atomenta-Token: 550e8400-e29b-41d4-a716-44665544000a`
- `Content-Type: application/json`
**Notes:**
- Todos os campos são opcionais — envie apenas o que mudou.
- `profilePicture` aceita base64 data URL (máx 2 MB decodificado).
- A resposta inclui `profilePictureUrl` apenas quando imagem foi enviada.
**Body:**
```json
{
"name": "Daniel A. Loverde", // Fields to update
"phoneNumber": "+5511988888888",
"biometricsEnabled": true,
"address_book": [
{
"label": "Casa",
"type": "residential",
"address": "Avenida das Andorinhas",
"number": "477",
"neighborhood": "Jardim Andorinhas",
"city": "Campinas",
"state": "SP",
"zipCode": "13101-400",
"country": "Brasil",
"complement": "Apto 78",
"lat_long": [-22.9064, -47.0616]
}
]
"name": "Daniel A. Loverde",
"cpf": "12345678901",
"phoneNumber": "5511988888888",
"profilePicture": "data:image/jpeg;base64,/9j/4AAQSkZJRgAB..."
}
```
**Regra de coordenadas (`address_book.lat_long`):**
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| `name` | string | não | Nome de exibição |
| `cpf` | string | não | 11 dígitos, formatado ou raw |
| `phoneNumber` | string | não | Com DDI, sem `+`: `"5519991670000"` |
| `profilePicture` | string | não | base64 data URL — jpeg, png ou webp — máx 2 MB decoded |
- Se existir `zipCode` válido e houver cache do CEP no Atomenta (`/api/public/cep/:cep`) para o mesmo usuário, a API valida o ponto enviado.
- Se não houver cache local, o Atomenta consulta a AwesomeAPI e atualiza o cache antes de validar.
- Se `lat_long` estiver ausente/inválido, a API preenche com as coordenadas do CEP cacheado.
- Se a distância entre `lat_long` enviado e o ponto do CEP for maior que `1.5 km`, a API substitui `lat_long` pelo ponto do CEP cacheado.
- Objetivo: evitar discrepâncias grandes entre endereço e coordenada salva no perfil.
**Formato `profilePicture`:**
```
data:image/jpeg;base64,<base64data>
data:image/png;base64,<base64data>
data:image/webp;base64,<base64data>
```
**Response (sucesso):**
```json
{
"error": false,
"code": "PROFILE_UPDATED",
"profilePictureUrl": "/uploads/profiles/e30188cf_1780615191653.jpg"
}
```
> `profilePictureUrl` é URL relativa. Prefixar com `https://atomenta.com.br` para exibir a imagem.
**Erros possíveis:**
| Código | HTTP | Descrição |
|---|---|---|
| `INVALID_CPF` | 400 | CPF não tem 11 dígitos |
| `INVALID_PROFILE_IMAGE` | 400 | Não é data URL válido ou excede 2 MB |
| `NO_FIELDS` | 400 | Nenhum campo reconhecido no body |
| `CUSTOMER_NOT_FOUND` | 404 | — |
### 5. List Favorite Stores
**GET** `/api/customer/favorites`