saveinmed/backend/docs/swagger.yaml

1469 lines
35 KiB
YAML

basePath: /
definitions:
github_com_saveinmed_backend-go_internal_domain.AdminDashboard:
properties:
gmv_cents:
type: integer
new_companies:
type: integer
window_start_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.CartItem:
properties:
batch:
type: string
buyer_id:
type: string
created_at:
type: string
expires_at:
type: string
id:
type: string
product_id:
type: string
product_name:
type: string
quantity:
type: integer
unit_cents:
type: integer
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.CartSummary:
properties:
discount_cents:
type: integer
discount_reason:
type: string
items:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.CartItem'
type: array
subtotal_cents:
type: integer
total_cents:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.Company:
properties:
cnpj:
type: string
corporate_name:
type: string
created_at:
type: string
id:
type: string
is_verified:
type: boolean
license_number:
type: string
role:
description: pharmacy, distributor, admin
type: string
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.CompanyRating:
properties:
average_score:
type: number
company_id:
type: string
total_reviews:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.InventoryItem:
properties:
batch:
type: string
expires_at:
type: string
name:
type: string
price_cents:
type: integer
product_id:
type: string
quantity:
type: integer
seller_id:
type: string
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.Order:
properties:
buyer_id:
type: string
created_at:
type: string
id:
type: string
items:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.OrderItem'
type: array
seller_id:
type: string
shipping:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.ShippingAddress'
status:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.OrderStatus'
total_cents:
type: integer
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.OrderItem:
properties:
batch:
type: string
expires_at:
type: string
id:
type: string
order_id:
type: string
product_id:
type: string
quantity:
type: integer
unit_cents:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.OrderStatus:
enum:
- Pendente
- Pago
- Faturado
- Entregue
type: string
x-enum-varnames:
- OrderStatusPending
- OrderStatusPaid
- OrderStatusInvoiced
- OrderStatusDelivered
github_com_saveinmed_backend-go_internal_domain.PaymentPreference:
properties:
commission_pct:
type: number
gateway:
type: string
marketplace_fee:
type: integer
order_id:
type: string
payment_url:
type: string
seller_receivable:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.PaymentSplitResult:
properties:
marketplace_fee:
type: integer
order_id:
type: string
payment_id:
type: string
seller_receivable:
type: integer
status:
type: string
total_paid_amount:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.PaymentWebhookEvent:
properties:
marketplace_fee:
type: integer
order_id:
type: string
payment_id:
type: string
seller_amount:
type: integer
status:
type: string
total_paid_amount:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.Product:
properties:
batch:
type: string
created_at:
type: string
description:
type: string
expires_at:
type: string
id:
type: string
name:
type: string
price_cents:
type: integer
seller_id:
type: string
stock:
type: integer
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.Review:
properties:
buyer_id:
type: string
comment:
type: string
created_at:
type: string
id:
type: string
order_id:
type: string
rating:
type: integer
seller_id:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.SellerDashboard:
properties:
low_stock_alerts:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Product'
type: array
orders_count:
type: integer
seller_id:
type: string
top_products:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.TopProduct'
type: array
total_sales_cents:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.Shipment:
properties:
carrier:
type: string
created_at:
type: string
external_tracking:
type: string
id:
type: string
order_id:
type: string
status:
type: string
tracking_code:
type: string
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.ShippingAddress:
properties:
city:
type: string
complement:
type: string
country:
type: string
district:
type: string
number:
type: string
recipient_name:
type: string
state:
type: string
street:
type: string
zip_code:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.TopProduct:
properties:
name:
type: string
product_id:
type: string
revenue_cents:
type: integer
total_quantity:
type: integer
type: object
github_com_saveinmed_backend-go_internal_domain.User:
properties:
company_id:
type: string
created_at:
type: string
email:
type: string
id:
type: string
name:
type: string
role:
type: string
updated_at:
type: string
type: object
github_com_saveinmed_backend-go_internal_domain.UserPage:
properties:
page:
type: integer
page_size:
type: integer
total:
type: integer
users:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.User'
type: array
type: object
internal_http_handler.addCartItemRequest:
properties:
product_id:
type: string
quantity:
type: integer
type: object
internal_http_handler.authResponse:
properties:
expires_at:
type: string
token:
type: string
type: object
internal_http_handler.createOrderRequest:
properties:
buyer_id:
type: string
items:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.OrderItem'
type: array
seller_id:
type: string
shipping:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.ShippingAddress'
type: object
internal_http_handler.createReviewRequest:
properties:
comment:
type: string
order_id:
type: string
rating:
type: integer
type: object
internal_http_handler.createShipmentRequest:
properties:
carrier:
type: string
external_tracking:
type: string
order_id:
type: string
tracking_code:
type: string
type: object
internal_http_handler.createUserRequest:
properties:
company_id:
type: string
email:
type: string
name:
type: string
password:
type: string
role:
type: string
type: object
internal_http_handler.inventoryAdjustRequest:
properties:
delta:
type: integer
product_id:
type: string
reason:
type: string
type: object
internal_http_handler.loginRequest:
properties:
email:
type: string
password:
type: string
type: object
internal_http_handler.registerAuthRequest:
properties:
company:
$ref: '#/definitions/internal_http_handler.registerCompanyTarget'
company_id:
type: string
email:
type: string
name:
type: string
password:
type: string
role:
type: string
type: object
internal_http_handler.registerCompanyRequest:
properties:
cnpj:
type: string
corporate_name:
type: string
license_number:
type: string
role:
type: string
type: object
internal_http_handler.registerCompanyTarget:
properties:
cnpj:
type: string
corporate_name:
type: string
id:
type: string
license_number:
type: string
role:
type: string
type: object
internal_http_handler.registerProductRequest:
properties:
batch:
type: string
description:
type: string
expires_at:
type: string
name:
type: string
price_cents:
type: integer
seller_id:
type: string
stock:
type: integer
type: object
internal_http_handler.updateCompanyRequest:
properties:
cnpj:
type: string
corporate_name:
type: string
is_verified:
type: boolean
license_number:
type: string
role:
type: string
type: object
internal_http_handler.updateProductRequest:
properties:
batch:
type: string
description:
type: string
expires_at:
type: string
name:
type: string
price_cents:
type: integer
seller_id:
type: string
stock:
type: integer
type: object
internal_http_handler.updateStatusRequest:
properties:
status:
type: string
type: object
internal_http_handler.updateUserRequest:
properties:
company_id:
type: string
email:
type: string
name:
type: string
password:
type: string
role:
type: string
type: object
info:
contact:
email: devops@saveinmed.com
name: Engenharia SaveInMed
description: API REST B2B para marketplace farmacêutico com split de pagamento e
rastreabilidade.
title: SaveInMed Performance Core API
version: "1.0"
paths:
/api/v1/auth/login:
post:
consumes:
- application/json
description: Autentica usuário e retorna token JWT.
parameters:
- description: Credenciais
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.loginRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/internal_http_handler.authResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"401":
description: Unauthorized
schema:
additionalProperties:
type: string
type: object
summary: Login
tags:
- Autenticação
/api/v1/auth/register:
post:
consumes:
- application/json
description: Cria um usuário e opcionalmente uma empresa, retornando token JWT.
parameters:
- description: Dados do usuário e empresa
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.registerAuthRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/internal_http_handler.authResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
summary: Cadastro de usuário
tags:
- Autenticação
/api/v1/cart:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.CartSummary'
security:
- BearerAuth: []
summary: Obter carrinho
tags:
- Carrinho
post:
consumes:
- application/json
parameters:
- description: Item do carrinho
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.addCartItemRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.CartSummary'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Adicionar item ao carrinho
tags:
- Carrinho
/api/v1/cart/{id}:
delete:
parameters:
- description: Cart item ID
in: path
name: id
required: true
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.CartSummary'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Remover item do carrinho
tags:
- Carrinho
/api/v1/companies:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Company'
type: array
summary: Lista empresas
tags:
- Empresas
post:
consumes:
- application/json
description: Cadastra farmácia, distribuidora ou administrador com CNPJ e licença
sanitária.
parameters:
- description: Dados da empresa
in: body
name: company
required: true
schema:
$ref: '#/definitions/internal_http_handler.registerCompanyRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Company'
summary: Registro de empresas
tags:
- Empresas
/api/v1/companies/{id}:
delete:
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
responses:
"204":
description: ""
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Remover empresa
tags:
- Empresas
get:
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Company'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Obter empresa
tags:
- Empresas
patch:
consumes:
- application/json
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Campos para atualização
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.updateCompanyRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Company'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Atualizar empresa
tags:
- Empresas
/api/v1/companies/{id}/rating:
get:
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.CompanyRating'
summary: Obter avaliação da empresa
tags:
- Empresas
/api/v1/companies/{id}/verify:
patch:
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Company'
security:
- BearerAuth: []
summary: Verificar empresa
tags:
- Empresas
/api/v1/companies/me:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Company'
security:
- BearerAuth: []
summary: Obter minha empresa
tags:
- Empresas
/api/v1/dashboard/admin:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.AdminDashboard'
security:
- BearerAuth: []
summary: Dashboard do administrador
tags:
- Dashboard
/api/v1/dashboard/seller:
get:
parameters:
- description: Seller ID
in: query
name: seller_id
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.SellerDashboard'
security:
- BearerAuth: []
summary: Dashboard do vendedor
tags:
- Dashboard
/api/v1/inventory:
get:
parameters:
- description: Dias para expiração
in: query
name: expires_in_days
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.InventoryItem'
type: array
security:
- BearerAuth: []
summary: Listar estoque
tags:
- Estoque
/api/v1/inventory/adjust:
post:
consumes:
- application/json
parameters:
- description: Ajuste de estoque
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.inventoryAdjustRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.InventoryItem'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Ajustar estoque
tags:
- Estoque
/api/v1/orders:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Order'
type: array
security:
- BearerAuth: []
summary: Listar pedidos
tags:
- Pedidos
post:
consumes:
- application/json
parameters:
- description: Pedido
in: body
name: order
required: true
schema:
$ref: '#/definitions/internal_http_handler.createOrderRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Order'
summary: Criação de pedido com split
tags:
- Pedidos
/api/v1/orders/{id}:
delete:
parameters:
- description: Order ID
in: path
name: id
required: true
type: string
responses:
"204":
description: ""
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Remover pedido
tags:
- Pedidos
get:
parameters:
- description: Order ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Order'
security:
- BearerAuth: []
summary: Consulta pedido
tags:
- Pedidos
/api/v1/orders/{id}/payment:
post:
parameters:
- description: Order ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentPreference'
security:
- BearerAuth: []
summary: Cria preferência de pagamento Mercado Pago com split nativo
tags:
- Pagamentos
/api/v1/orders/{id}/status:
patch:
consumes:
- application/json
parameters:
- description: Order ID
in: path
name: id
required: true
type: string
- description: Novo status
in: body
name: status
required: true
schema:
$ref: '#/definitions/internal_http_handler.updateStatusRequest'
produces:
- application/json
responses:
"204":
description: ""
security:
- BearerAuth: []
summary: Atualiza status do pedido
tags:
- Pedidos
/api/v1/payments/webhook:
post:
consumes:
- application/json
parameters:
- description: Evento do gateway
in: body
name: notification
required: true
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentWebhookEvent'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentSplitResult'
summary: Recebe notificações do Mercado Pago
tags:
- Pagamentos
/api/v1/products:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Product'
type: array
summary: Lista catálogo com lote e validade
tags:
- Produtos
post:
consumes:
- application/json
parameters:
- description: Produto
in: body
name: product
required: true
schema:
$ref: '#/definitions/internal_http_handler.registerProductRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Product'
summary: Cadastro de produto com rastreabilidade de lote
tags:
- Produtos
/api/v1/products/{id}:
delete:
parameters:
- description: Product ID
in: path
name: id
required: true
type: string
responses:
"204":
description: ""
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Remover produto
tags:
- Produtos
get:
parameters:
- description: Product ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Product'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Obter produto
tags:
- Produtos
patch:
consumes:
- application/json
parameters:
- description: Product ID
in: path
name: id
required: true
type: string
- description: Campos para atualização
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.updateProductRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Product'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Atualizar produto
tags:
- Produtos
/api/v1/reviews:
post:
consumes:
- application/json
parameters:
- description: Dados da avaliação
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.createReviewRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Review'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Criar avaliação
tags:
- Avaliações
/api/v1/shipments:
post:
consumes:
- application/json
parameters:
- description: Dados de envio
in: body
name: shipment
required: true
schema:
$ref: '#/definitions/internal_http_handler.createShipmentRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Shipment'
security:
- BearerAuth: []
summary: Gera guia de postagem/transporte
tags:
- Logistica
/api/v1/shipments/{order_id}:
get:
parameters:
- description: Order ID
in: path
name: order_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.Shipment'
security:
- BearerAuth: []
summary: Rastreia entrega
tags:
- Logistica
/api/v1/users:
get:
parameters:
- description: Página
in: query
name: page
type: integer
- description: Tamanho da página
in: query
name: page_size
type: integer
- description: Filtro por empresa
in: query
name: company_id
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.UserPage'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Listar usuários
tags:
- Usuários
post:
consumes:
- application/json
parameters:
- description: Novo usuário
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.createUserRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.User'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"403":
description: Forbidden
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Criar usuário
tags:
- Usuários
/api/v1/users/{id}:
delete:
parameters:
- description: User ID
in: path
name: id
required: true
type: string
responses:
"204":
description: No Content
schema:
type: string
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"403":
description: Forbidden
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Excluir usuário
tags:
- Usuários
get:
parameters:
- description: User ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.User'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"403":
description: Forbidden
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Obter usuário
tags:
- Usuários
put:
consumes:
- application/json
parameters:
- description: User ID
in: path
name: id
required: true
type: string
- description: Campos para atualização
in: body
name: payload
required: true
schema:
$ref: '#/definitions/internal_http_handler.updateUserRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/github_com_saveinmed_backend-go_internal_domain.User'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"403":
description: Forbidden
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Atualizar usuário
tags:
- Usuários
schemes:
- http
securityDefinitions:
BearerAuth:
in: header
name: Authorization
type: apiKey
swagger: "2.0"