API-Backend.md
0 → 100644
| # Exemplos de Payloads JSON para Endpoints da API | |||
| Esta seção fornece exemplos de estruturas JSON para as requisições (requests) e respostas (responses) dos principais endpoints da API do Coopera-RS, baseados nas interfaces TypeScript e mocks encontrados no frontend. | |||
| **Observação:** Os endpoints exatos (URLs e métodos HTTP) precisam ser confirmados com a documentação do backend (Swagger), mas os formatos de dados aqui apresentados servem como guia. | |||
| ## Autenticação (`/api/auth`) | |||
| ### 1. Login de Usuário | |||
| * **Endpoint (inferido):** `POST /api/auth/login` | |||
| * **Request Body:** | |||
| ```json | |||
| { | |||
| "email": "[email protected]", | |||
| "password": "senha123" | |||
| } | |||
| ``` | |||
| * **Response Body (Sucesso - 200 OK):** | |||
| ```json | |||
| { | |||
| "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", | |||
| "username": "Nome do Usuario", | |||
| "role": "CLIENT", // ou "STORE" | |||
| "emailVerified": true | |||
| } | |||
| ``` | |||
| ### 2. Registro de Usuário (Cliente) | |||
| * **Endpoint (inferido):** `POST /api/auth/register` | |||
| * **Observação:** Este endpoint registra um novo usuário sempre com a role **'CLIENT'**. | |||
| * **Request Body:** | |||
| ```json | |||
| { | |||
| "name": "Nome Completo do Cliente", | |||
| "email": "[email protected]", | |||
| "password": "senhaSegura123", | |||
| "phone": "51999998888", | |||
| "cep": "90000000", | |||
| "address": "Rua Exemplo", // Endereço residencial do cliente | |||
| "number": "123", | |||
| "complement": "Apto 404" // Opcional | |||
| } | |||
| ``` | |||
| * **Response Body (Sucesso - 201 Created):** | |||
| ```json | |||
| { | |||
| "id": 123, // ID do novo usuário/cliente | |||
| "email": "[email protected]", | |||
| "name": "Nome Completo do Cliente", | |||
| "role": "CLIENT", // Sempre retorna CLIENT no registro inicial | |||
| "phone": "51999998888", | |||
| "active": true, // ou false, exclusão logica | |||
| "verified": false, // ou true, dependendo da verificação de email | |||
| "cep": "90000000", | |||
| "address": "Rua Exemplo", | |||
| "number": "123", | |||
| "complement": "Apto 404" | |||
| } | |||
| ``` | |||
| ### 3. Atualizar Cliente para Vendedor/Loja | |||
| * **Endpoint :** `POST /api/store/create` (requer autenticação como cliente) | |||
| * **Observação:** Este fluxo permite que um usuário 'CLIENT' existente se torne um 'STORE', adicionando informações da loja. O ID do usuário é mantido e compartilhado pela loja. | |||
| * **Request Body:** | |||
| ```json | |||
| { | |||
| "idUser": 123, // ID do usuário que está criando a loja | |||
| "storeName": "Nome Fantasia da Loja", | |||
| "cnpj": "12345678000199", | |||
| "addressDTO": { | |||
| "cep": "90000111", | |||
| "street": "Nome da Rua", | |||
| "number": 100, | |||
| "unit": "Loja B" | |||
| }, | |||
| "description": "Descrição detalhada da loja e seus produtos.", | |||
| "profileImgUrl": "https://exemplo.com/imagem_perfil.jpg", | |||
| "gallery": [ | |||
| "https://exemplo.com/foto_galeria1.jpg", | |||
| "https://exemplo.com/foto_galeria2.jpg" | |||
| ] | |||
| } | |||
| ``` | |||
| * **Exemplo de Resposta (Sucesso - 200 OK):** (Retorna os dados da loja criada) | |||
| ```json | |||
| { | |||
| "idStore": 123, //Mesmo id do user | |||
| "storeName": "Nome Fantasia da Loja", | |||
| "cnpj": "12345678000199", | |||
| "address": { | |||
| "cep": "90000111", | |||
| "street": "Nome da Rua", | |||
| "number": 100, | |||
| "unit": "Loja B" | |||
| // ... outros campos de endereço podem vir aqui | |||
| }, | |||
| "description": "Descrição detalhada da loja e seus produtos.", | |||
| "profileImgUrl": "https://exemplo.com/imagem_perfil.jpg", | |||
| "gallery": [ | |||
| "https://exemplo.com/foto_galeria1.jpg", | |||
| "https://exemplo.com/foto_galeria2.jpg" | |||
| ] | |||
| // ID do usuário associado pode ou não ser retornado aqui | |||
| } | |||
| ``` | |||
| ## Lojas (`/api/stores` - exemplos) | |||
| ### 1. Listar Lojas | |||
| * **Endpoint (inferido):** `GET /api/stores` ou `GET /api/search/stores?q={termo}` | |||
| * **Response Body (Sucesso - 200 OK):** (Array de Lojas) | |||
| ```json | |||
| [ | |||
| { | |||
| "name": "Loja Tecidos Nossa Senhora", | |||
| "description": "Somos uma empresa tradicional e que ao longo de seus 60 anos consolidou sua posição no setor têxtil.", | |||
| "CEP": "90000000", | |||
| "address": "Av. Guaíba, 2658 - Porto Alegre/RS", // Verificar formato do endereço | |||
| "number": "2658", | |||
| "complement": "apt 4", | |||
| "rating": 8.4, | |||
| "photo": "https://picsum.photos/1000/1000", | |||
| }, | |||
| { | |||
| "name": "Estilo & Cia", | |||
| "description": "Outra descrição...", | |||
| "CEP": "90000000", | |||
| "address": "Av. Guaíba, 2658 - Porto Alegre/RS", // Verificar formato do endereço | |||
| "number": "2658", | |||
| "complement": "apt 4", | |||
| "rating": 8.4, | |||
| "photo": "https://picsum.photos/1000/1000", | |||
| } | |||
| // ... mais lojas | |||
| ] | |||
| ``` | |||
| ### 2. Listar produtos de uma loja | |||
| * **Endpoint (inferido):** `GET /api/stores/{storeId}/products` ou similar | |||
| * **Response Body (Sucesso - 200 OK):** | |||
| ```json | |||
| { | |||
| name: "Camiseta Esportiva Dry Fit", | |||
| description: "Camiseta leve e respirável, ideal para atividades físicas.", | |||
| photo: "https://picsum.photos/id/1041/200/300", | |||
| category: "Roupas", | |||
| characteristics: [ | |||
| { name: "Cor", options: ["Azul", "Preto"] }, | |||
| { name: "Tamanho", options: ["P", "M", "G"] }, | |||
| ], | |||
| variations: [ | |||
| { options: { Cor: "Azul", Tamanho: "P" }, price: 90.9, stock: 10 }, | |||
| { options: { Cor: "Preto", Tamanho: "M" }, price: 80.9, stock: 5 }, | |||
| ], | |||
| views: 120, | |||
| date: "2025-05-01", | |||
| }, | |||
| { | |||
| name: "Calça Jeans Slim Fit", | |||
| description: "Calça jeans com corte ajustado e confortável.", | |||
| photo: "https://picsum.photos/id/1042/200/300", | |||
| category: "Roupas", | |||
| characteristics: [ | |||
| { name: "Cor", options: ["Azul Claro", "Azul Escuro"] }, | |||
| { name: "Tamanho", options: ["38", "40", "42"] }, | |||
| ], | |||
| variations: [ | |||
| { options: { Cor: "Azul Claro", Tamanho: "38" }, price: 89.9, stock: 8 }, | |||
| { options: { Cor: "Azul Escuro", Tamanho: "40" }, price: 89.9, stock: 12 }, | |||
| ], | |||
| views: 200, | |||
| date: "2025-04-28", | |||
| }, | |||
| //... mais produtos | |||
| ``` | |||
| ## Produtos (`/api/products` - exemplos) | |||
| ### 1. Adicionar Produto | |||
| * **Endpoint (inferido):** ex: `POST /api/stores/{storeId}/products`) | |||
| * **Request Body:** | |||
| ```json | |||
| { | |||
| "name": "Calça Jeans Slim Fit", | |||
| "description": "Calça jeans com corte ajustado e confortável.", | |||
| "photo": "URL_DA_IMAGEM_BASE64_OU_LINK", // Verificar como a imagem é enviada | |||
| "category": "Roupas", | |||
| "characteristics": [ | |||
| { "name": "Cor", "options": ["Azul Claro", "Azul Escuro"] }, | |||
| { "name": "Tamanho", "options": ["38", "40", "42"] } | |||
| ], | |||
| "variations": [ | |||
| { "options": { "Cor": "Azul Claro", "Tamanho": "38" }, "price": 89.9, "stock": 8 }, | |||
| { "options": { "Cor": "Azul Escuro", "Tamanho": "40" }, "price": 89.9, "stock": 12 } | |||
| ] | |||
| } | |||
| ``` | |||
| * **Response Body (Sucesso - 201 Created):** (Retorna o produto criado, talvez com ID) | |||
| ```json | |||
| { | |||
| "id": "produto-12345", // ID gerado pelo backend | |||
| "name": "Calça Jeans Slim Fit", | |||
| "description": "Calça jeans com corte ajustado e confortável.", | |||
| "photo": "URL_DA_IMAGEM_ARMAZENADA", | |||
| "category": "Roupas", | |||
| "characteristics": [ | |||
| { "name": "Cor", "options": ["Azul Claro", "Azul Escuro"] }, | |||
| { "name": "Tamanho", "options": ["38", "40", "42"] } | |||
| ], | |||
| "variations": [ | |||
| { "options": { "Cor": "Azul Claro", "Tamanho": "38" }, "price": 89.9, "stock": 8 }, | |||
| { "options": { "Cor": "Azul Escuro", "Tamanho": "40" }, "price": 89.9, "stock": 12 } | |||
| ], | |||
| "views": 0, | |||
| "date": "2025-06-06" // Data de criação | |||
| } | |||
| ``` | |||
| ### 2. Listar Produtos | |||
| * **Endpoint (inferido):** `GET /api/products` ou `GET /api/search/products?q={termo}` | |||
| * **Response Body (Sucesso - 200 OK):** (Array de Produtos) | |||
| ```json | |||
| [ | |||
| { | |||
| "name": "Camiseta Esportiva Dry Fit", | |||
| "description": "Camiseta leve e respirável, ideal para atividades físicas.", | |||
| "photo": "https://picsum.photos/id/1041/200/300", | |||
| "category": "Roupas", | |||
| "characteristics": [ | |||
| { "name": "Cor", "options": ["Azul", "Preto"] }, | |||
| { "name": "Tamanho", "options": ["P", "M", "G"] } | |||
| ], | |||
| "variations": [ | |||
| { "options": { "Cor": "Azul", "Tamanho": "P" }, "price": 59.9, "stock": 10 }, | |||
| { "options": { "Cor": "Preto", "Tamanho": "M" }, "price": 59.9, "stock": 5 } | |||
| ], | |||
| "views": 120, | |||
| "date": "2025-05-01" | |||
| }, | |||
| // ... mais produtos | |||
| ] | |||
| ``` | |||
| --- | |||
| *Estes são apenas exemplos baseados no código frontend. É crucial validar e complementar esta informação com a documentação oficial da API (Swagger) do backend.* |