Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Collapse sidebar
  • Coopera RS
  • Wiki
  • Wiki
  • API Backend

Last edited by Tomás Bringhenti Onofrio Jun 24, 2025
Page history
This is an old version of this page. You can view the most recent version or browse the history.

API Backend

Home Escopo e Cronograma Processo Design/Mockups Configuração Arquitetura Infra Código BD Frontend API Backend

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:
{
  "email": "[email protected]",
  "password": "senha123"
}
  • Response Body (Sucesso - 200 OK):
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "id": "123",
  "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:
{
  "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):
{
  "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:
{
  "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)
{
  "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)
[
  {
    "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):
  {
    "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:
{
  "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)
{
  "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)
[
  {
    "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.

Clone repository
  • API Backend
  • Escopo e Cronograma
  • Frontend
  • Processo
  • arquitetura
  • banco de dados
  • codigo
  • configuracao
  • design
    • mockups
  • Home
  • infraestrutura