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:
@@ -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`.
|
**Campos internos não retornados para o app:** `keyHash`, `strongHash`, `source`, `isShadow`, `profile_metrics`, `behavioral_stats`, `otpHash`, `otpHashParams`, `otpExpiresAt`.
|
||||||
|
|
||||||
### 4. Update Profile
|
### 4. Update Profile
|
||||||
**POST** `/api/customer/:id`
|
**PATCH** `/api/customer/profile`
|
||||||
|
|
||||||
**Headers:**
|
**Headers:**
|
||||||
|
|
||||||
- `Authorization: Bearer <JWT_Token>`
|
- `Authorization: Bearer <JWT_Token>`
|
||||||
- `Atomenta-Token: 550e8400-e29b-41d4-a716-44665544000a`
|
- `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:**
|
**Body:**
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"name": "Daniel A. Loverde", // Fields to update
|
"name": "Daniel A. Loverde",
|
||||||
"phoneNumber": "+5511988888888",
|
"cpf": "12345678901",
|
||||||
"biometricsEnabled": true,
|
"phoneNumber": "5511988888888",
|
||||||
"address_book": [
|
"profilePicture": "data:image/jpeg;base64,/9j/4AAQSkZJRgAB..."
|
||||||
{
|
|
||||||
"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]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**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.
|
**Formato `profilePicture`:**
|
||||||
- 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.
|
data:image/jpeg;base64,<base64data>
|
||||||
- Objetivo: evitar discrepâncias grandes entre endereço e coordenada salva no perfil.
|
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
|
### 5. List Favorite Stores
|
||||||
**GET** `/api/customer/favorites`
|
**GET** `/api/customer/favorites`
|
||||||
|
|||||||
Reference in New Issue
Block a user