diff --git a/API_Mobile_App.md b/API_Mobile_App.md index 95255e0..bf52a20 100644 --- a/API_Mobile_App.md +++ b/API_Mobile_App.md @@ -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 ` - `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, +data:image/png;base64, +data:image/webp;base64, +``` + +**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`