// Package docs Code generated by swaggo/swag. DO NOT EDIT package docs import "github.com/swaggo/swag" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { "description": "{{escape .Description}}", "title": "{{.Title}}", "contact": { "name": "Engenharia SaveInMed", "email": "devops@saveinmed.com" }, "version": "{{.Version}}" }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { "/api/v1/auth/login": { "post": { "description": "Autentica usuário e retorna token JWT.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Login", "parameters": [ { "description": "Credenciais", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.loginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_http_handler.authResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/logout": { "post": { "description": "Endpoint para logout (invalidação client-side).", "tags": [ "Autenticação" ], "summary": "Logout", "responses": { "204": { "description": "No Content", "schema": { "type": "string" } } } } }, "/api/v1/auth/password/forgot": { "post": { "description": "Gera um token de redefinição de senha.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Solicitar redefinição de senha", "parameters": [ { "description": "Email do usuário", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.forgotPasswordRequest" } } ], "responses": { "202": { "description": "Accepted", "schema": { "$ref": "#/definitions/internal_http_handler.resetTokenResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/password/reset": { "post": { "description": "Atualiza a senha usando o token de redefinição.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Redefinir senha", "parameters": [ { "description": "Token e nova senha", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.resetPasswordRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_http_handler.messageResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/refresh-token": { "post": { "description": "Gera um novo JWT a partir de um token válido.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Atualizar token", "parameters": [ { "type": "string", "description": "Bearer token", "name": "Authorization", "in": "header", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_http_handler.authResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/register": { "post": { "description": "Cria um usuário e opcionalmente uma empresa, retornando token JWT.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Cadastro de usuário", "parameters": [ { "description": "Dados do usuário e empresa", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.registerAuthRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/internal_http_handler.authResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/register/customer": { "post": { "description": "Cria um usuário do tipo cliente e opcionalmente uma empresa, retornando token JWT.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Cadastro de cliente", "parameters": [ { "description": "Dados do usuário e empresa", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.registerAuthRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/internal_http_handler.authResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/register/tenant": { "post": { "description": "Cria um usuário do tipo tenant e opcionalmente uma empresa, retornando token JWT.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Cadastro de tenant", "parameters": [ { "description": "Dados do usuário e empresa", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.registerAuthRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/internal_http_handler.authResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/verify-email": { "post": { "description": "Marca o email como verificado usando um token JWT.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Autenticação" ], "summary": "Verificar email", "parameters": [ { "description": "Token de verificação", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.verifyEmailRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_http_handler.messageResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/cart": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Carrinho" ], "summary": "Obter carrinho", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.CartSummary" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Carrinho" ], "summary": "Adicionar item ao carrinho", "parameters": [ { "description": "Item do carrinho", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.addCartItemRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.CartSummary" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/cart/{id}": { "delete": { "security": [ { "BearerAuth": [] } ], "tags": [ "Carrinho" ], "summary": "Remover item do carrinho", "parameters": [ { "type": "string", "description": "Cart item ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.CartSummary" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/companies": { "get": { "produces": [ "application/json" ], "tags": [ "Empresas" ], "summary": "Lista empresas", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Company" } } } } }, "post": { "description": "Cadastra farmácia, distribuidora ou administrador com CNPJ e licença sanitária.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Empresas" ], "summary": "Registro de empresas", "parameters": [ { "description": "Dados da empresa", "name": "company", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.registerCompanyRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Company" } } } } }, "/api/v1/companies/me": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Empresas" ], "summary": "Obter minha empresa", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Company" } } } } }, "/api/v1/companies/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "Empresas" ], "summary": "Obter empresa", "parameters": [ { "type": "string", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Company" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "tags": [ "Empresas" ], "summary": "Remover empresa", "parameters": [ { "type": "string", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "" }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Empresas" ], "summary": "Atualizar empresa", "parameters": [ { "type": "string", "description": "Company ID", "name": "id", "in": "path", "required": true }, { "description": "Campos para atualização", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.updateCompanyRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Company" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/companies/{id}/rating": { "get": { "produces": [ "application/json" ], "tags": [ "Empresas" ], "summary": "Obter avaliação da empresa", "parameters": [ { "type": "string", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.CompanyRating" } } } } }, "/api/v1/companies/{id}/verify": { "patch": { "security": [ { "BearerAuth": [] } ], "tags": [ "Empresas" ], "summary": "Verificar empresa", "parameters": [ { "type": "string", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Company" } } } } }, "/api/v1/dashboard": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get dashboard data for the authenticated user (Admin or Seller)", "produces": [ "application/json" ], "tags": [ "Dashboard" ], "summary": "Get dashboard data", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/inventory": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Estoque" ], "summary": "Listar estoque", "parameters": [ { "type": "integer", "description": "Dias para expiração", "name": "expires_in_days", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.InventoryItem" } } } } } }, "/api/v1/inventory/adjust": { "post": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Estoque" ], "summary": "Ajustar estoque", "parameters": [ { "description": "Ajuste de estoque", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.inventoryAdjustRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.InventoryItem" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/marketplace/records": { "get": { "produces": [ "application/json" ], "tags": [ "Marketplace" ], "summary": "Busca avançada no marketplace", "parameters": [ { "type": "string", "description": "Busca textual", "name": "query", "in": "query" }, { "type": "string", "description": "Campo de ordenação (created_at|updated_at)", "name": "sort_by", "in": "query" }, { "type": "string", "description": "Direção (asc|desc)", "name": "sort_order", "in": "query" }, { "type": "string", "description": "Data mínima (RFC3339)", "name": "created_after", "in": "query" }, { "type": "string", "description": "Data máxima (RFC3339)", "name": "created_before", "in": "query" }, { "type": "integer", "description": "Página", "name": "page", "in": "query" }, { "type": "integer", "description": "Itens por página", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ProductPaginationResponse" } } } } }, "/api/v1/orders": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Pedidos" ], "summary": "Listar pedidos", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Order" } } } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Pedidos" ], "summary": "Criação de pedido com split", "parameters": [ { "description": "Pedido", "name": "order", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.createOrderRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Order" } } } } }, "/api/v1/orders/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Pedidos" ], "summary": "Consulta pedido", "parameters": [ { "type": "string", "description": "Order ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Order" } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "tags": [ "Pedidos" ], "summary": "Remover pedido", "parameters": [ { "type": "string", "description": "Order ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "" }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/orders/{id}/payment": { "post": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Pagamentos" ], "summary": "Cria preferência de pagamento Mercado Pago com split nativo", "parameters": [ { "type": "string", "description": "Order ID", "name": "id", "in": "path", "required": true } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentPreference" } } } } }, "/api/v1/orders/{id}/status": { "patch": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Pedidos" ], "summary": "Atualiza status do pedido", "parameters": [ { "type": "string", "description": "Order ID", "name": "id", "in": "path", "required": true }, { "description": "Novo status", "name": "status", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.updateStatusRequest" } } ], "responses": { "204": { "description": "" } } } }, "/api/v1/payments/webhook": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Pagamentos" ], "summary": "Recebe notificações do Mercado Pago", "parameters": [ { "description": "Evento do gateway", "name": "notification", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentWebhookEvent" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentSplitResult" } } } } }, "/api/v1/products": { "get": { "produces": [ "application/json" ], "tags": [ "Produtos" ], "summary": "Lista catálogo com lote e validade", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Product" } } } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Produtos" ], "summary": "Cadastro de produto com rastreabilidade de lote", "parameters": [ { "description": "Produto", "name": "product", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.registerProductRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Product" } } } } }, "/api/v1/products/search": { "get": { "description": "Retorna produtos ordenados por validade, com distância aproximada. Vendedor anônimo até checkout.", "produces": [ "application/json" ], "tags": [ "Produtos" ], "summary": "Busca avançada de produtos com filtros e distância", "parameters": [ { "type": "string", "description": "Termo de busca", "name": "search", "in": "query" }, { "type": "integer", "description": "Preço mínimo em centavos", "name": "min_price", "in": "query" }, { "type": "integer", "description": "Preço máximo em centavos", "name": "max_price", "in": "query" }, { "type": "number", "description": "Distância máxima em km", "name": "max_distance", "in": "query" }, { "type": "number", "description": "Latitude do comprador", "name": "lat", "in": "query", "required": true }, { "type": "number", "description": "Longitude do comprador", "name": "lng", "in": "query", "required": true }, { "type": "integer", "description": "Página", "name": "page", "in": "query" }, { "type": "integer", "description": "Itens por página", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ProductSearchPage" } } } } }, "/api/v1/products/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "Produtos" ], "summary": "Obter produto", "parameters": [ { "type": "string", "description": "Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Product" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "tags": [ "Produtos" ], "summary": "Remover produto", "parameters": [ { "type": "string", "description": "Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "" }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Produtos" ], "summary": "Atualizar produto", "parameters": [ { "type": "string", "description": "Product ID", "name": "id", "in": "path", "required": true }, { "description": "Campos para atualização", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.updateProductRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Product" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/reviews": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns reviews. Admins see all, Tenants see only their own.", "produces": [ "application/json" ], "tags": [ "Reviews" ], "summary": "List reviews", "parameters": [ { "type": "integer", "description": "Página", "name": "page", "in": "query" }, { "type": "integer", "description": "Tamanho da página", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ReviewPage" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Avaliações" ], "summary": "Criar avaliação", "parameters": [ { "description": "Dados da avaliação", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.createReviewRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Review" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/shipments": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns shipments. Admins see all, Tenants see only their own.", "produces": [ "application/json" ], "tags": [ "Shipments" ], "summary": "List shipments", "parameters": [ { "type": "integer", "description": "Página", "name": "page", "in": "query" }, { "type": "integer", "description": "Tamanho da página", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ShipmentPage" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Logistica" ], "summary": "Gera guia de postagem/transporte", "parameters": [ { "description": "Dados de envio", "name": "shipment", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.createShipmentRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Shipment" } } } } }, "/api/v1/shipments/{order_id}": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Logistica" ], "summary": "Rastreia entrega", "parameters": [ { "type": "string", "description": "Order ID", "name": "order_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Shipment" } } } } }, "/api/v1/shipping/calculate": { "post": { "description": "Calculates shipping or pickup options based on vendor config and buyer location.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Shipping" ], "summary": "Calculate shipping options", "parameters": [ { "description": "Calculation inputs", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.shippingCalculateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ShippingOption" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/shipping/settings/{vendor_id}": { "get": { "description": "Returns pickup and delivery settings for a vendor.", "produces": [ "application/json" ], "tags": [ "Shipping" ], "summary": "Get vendor shipping settings", "parameters": [ { "type": "string", "description": "Vendor ID", "name": "vendor_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ShippingSettings" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "description": "Stores pickup and delivery settings for a vendor.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Shipping" ], "summary": "Update vendor shipping settings", "parameters": [ { "type": "string", "description": "Vendor ID", "name": "vendor_id", "in": "path", "required": true }, { "description": "Shipping settings", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.shippingSettingsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ShippingSettings" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/users": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Usuários" ], "summary": "Listar usuários", "parameters": [ { "type": "integer", "description": "Página", "name": "page", "in": "query" }, { "type": "integer", "description": "Tamanho da página", "name": "page_size", "in": "query" }, { "type": "string", "description": "Filtro por empresa", "name": "company_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.UserPage" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Usuários" ], "summary": "Criar usuário", "parameters": [ { "description": "Novo usuário", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.createUserRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.User" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/users/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Usuários" ], "summary": "Obter usuário", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.User" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Usuários" ], "summary": "Atualizar usuário", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "description": "Campos para atualização", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_http_handler.updateUserRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.User" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "tags": [ "Usuários" ], "summary": "Excluir usuário", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content", "schema": { "type": "string" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } } }, "definitions": { "github_com_saveinmed_backend-go_internal_domain.CartItem": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.CartSummary": { "type": "object", "properties": { "discount_cents": { "type": "integer" }, "discount_reason": { "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.CartItem" } }, "subtotal_cents": { "type": "integer" }, "total_cents": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.Company": { "type": "object", "properties": { "category": { "description": "farmacia, distribuidora", "type": "string" }, "city": { "type": "string" }, "cnpj": { "type": "string" }, "corporate_name": { "type": "string" }, "created_at": { "description": "Timestamps", "type": "string" }, "id": { "type": "string" }, "is_24_hours": { "type": "boolean" }, "is_verified": { "type": "boolean" }, "latitude": { "description": "Location", "type": "number" }, "license_number": { "type": "string" }, "longitude": { "type": "number" }, "operating_hours": { "description": "e.g. \"Seg-Sex: 08:00-18:00, Sab: 08:00-12:00\"", "type": "string" }, "phone": { "description": "Contact \u0026 Hours", "type": "string" }, "state": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_saveinmed_backend-go_internal_domain.CompanyRating": { "type": "object", "properties": { "average_score": { "type": "number" }, "company_id": { "type": "string" }, "total_reviews": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.InventoryItem": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.Order": { "type": "object", "properties": { "buyer_id": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.OrderItem" } }, "payment_method": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentMethod" }, "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" } } }, "github_com_saveinmed_backend-go_internal_domain.OrderItem": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.OrderStatus": { "type": "string", "enum": [ "Pendente", "Pago", "Faturado", "Entregue" ], "x-enum-varnames": [ "OrderStatusPending", "OrderStatusPaid", "OrderStatusInvoiced", "OrderStatusDelivered" ] }, "github_com_saveinmed_backend-go_internal_domain.PaymentMethod": { "type": "string", "enum": [ "pix", "credit_card", "debit_card" ], "x-enum-varnames": [ "PaymentMethodPix", "PaymentMethodCredit", "PaymentMethodDebit" ] }, "github_com_saveinmed_backend-go_internal_domain.PaymentPreference": { "type": "object", "properties": { "commission_pct": { "type": "number" }, "gateway": { "type": "string" }, "marketplace_fee": { "type": "integer" }, "order_id": { "type": "string" }, "payment_url": { "type": "string" }, "seller_receivable": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.PaymentSplitResult": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.PaymentWebhookEvent": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.Product": { "type": "object", "properties": { "batch": { "type": "string" }, "category": { "type": "string" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "ean_code": { "type": "string" }, "expires_at": { "type": "string" }, "id": { "type": "string" }, "manufacturer": { "type": "string" }, "name": { "type": "string" }, "observations": { "type": "string" }, "price_cents": { "type": "integer" }, "seller_id": { "type": "string" }, "stock": { "type": "integer" }, "subcategory": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_saveinmed_backend-go_internal_domain.ProductPaginationResponse": { "type": "object", "properties": { "current_page": { "type": "integer" }, "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Product" } }, "total_count": { "type": "integer" }, "total_pages": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.ProductSearchPage": { "type": "object", "properties": { "page": { "type": "integer" }, "page_size": { "type": "integer" }, "products": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ProductWithDistance" } }, "total": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.ProductWithDistance": { "type": "object", "properties": { "batch": { "type": "string" }, "category": { "type": "string" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "distance_km": { "type": "number" }, "ean_code": { "type": "string" }, "expires_at": { "type": "string" }, "id": { "type": "string" }, "manufacturer": { "type": "string" }, "name": { "type": "string" }, "observations": { "type": "string" }, "price_cents": { "type": "integer" }, "seller_id": { "type": "string" }, "stock": { "type": "integer" }, "subcategory": { "type": "string" }, "tenant_city": { "type": "string" }, "tenant_state": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_saveinmed_backend-go_internal_domain.Review": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.ReviewPage": { "type": "object", "properties": { "page": { "type": "integer" }, "page_size": { "type": "integer" }, "reviews": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Review" } }, "total": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.Shipment": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.ShipmentPage": { "type": "object", "properties": { "page": { "type": "integer" }, "page_size": { "type": "integer" }, "shipments": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.Shipment" } }, "total": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.ShippingAddress": { "type": "object", "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" } } }, "github_com_saveinmed_backend-go_internal_domain.ShippingOption": { "type": "object", "properties": { "description": { "type": "string" }, "distance_km": { "type": "number" }, "estimated_minutes": { "type": "integer" }, "type": { "type": "string" }, "value_cents": { "type": "integer" } } }, "github_com_saveinmed_backend-go_internal_domain.ShippingSettings": { "type": "object", "properties": { "active": { "type": "boolean" }, "created_at": { "type": "string" }, "free_shipping_threshold_cents": { "type": "integer" }, "latitude": { "type": "number" }, "longitude": { "type": "number" }, "max_radius_km": { "type": "number" }, "min_fee_cents": { "type": "integer" }, "pickup_active": { "type": "boolean" }, "pickup_address": { "type": "string" }, "pickup_hours": { "type": "string" }, "price_per_km_cents": { "type": "integer" }, "updated_at": { "type": "string" }, "vendor_id": { "type": "string" } } }, "github_com_saveinmed_backend-go_internal_domain.User": { "type": "object", "properties": { "company_id": { "type": "string" }, "created_at": { "type": "string" }, "email": { "type": "string" }, "email_verified": { "type": "boolean" }, "id": { "type": "string" }, "name": { "type": "string" }, "role": { "type": "string" }, "updated_at": { "type": "string" }, "username": { "type": "string" } } }, "github_com_saveinmed_backend-go_internal_domain.UserPage": { "type": "object", "properties": { "page": { "type": "integer" }, "page_size": { "type": "integer" }, "total": { "type": "integer" }, "users": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.User" } } } }, "internal_http_handler.addCartItemRequest": { "type": "object", "properties": { "product_id": { "type": "string" }, "quantity": { "type": "integer" } } }, "internal_http_handler.authResponse": { "type": "object", "properties": { "expires_at": { "type": "string" }, "token": { "type": "string" } } }, "internal_http_handler.createOrderRequest": { "type": "object", "properties": { "buyer_id": { "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.OrderItem" } }, "payment_method": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.PaymentMethod" }, "seller_id": { "type": "string" }, "shipping": { "$ref": "#/definitions/github_com_saveinmed_backend-go_internal_domain.ShippingAddress" } } }, "internal_http_handler.createReviewRequest": { "type": "object", "properties": { "comment": { "type": "string" }, "order_id": { "type": "string" }, "rating": { "type": "integer" } } }, "internal_http_handler.createShipmentRequest": { "type": "object", "properties": { "carrier": { "type": "string" }, "external_tracking": { "type": "string" }, "order_id": { "type": "string" }, "tracking_code": { "type": "string" } } }, "internal_http_handler.createUserRequest": { "type": "object", "properties": { "company_id": { "type": "string" }, "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string" }, "role": { "type": "string" }, "username": { "type": "string" } } }, "internal_http_handler.forgotPasswordRequest": { "type": "object", "properties": { "email": { "type": "string" } } }, "internal_http_handler.inventoryAdjustRequest": { "type": "object", "properties": { "delta": { "type": "integer" }, "product_id": { "type": "string" }, "reason": { "type": "string" } } }, "internal_http_handler.loginRequest": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string" }, "username": { "type": "string" } } }, "internal_http_handler.messageResponse": { "type": "object", "properties": { "message": { "type": "string" } } }, "internal_http_handler.registerAuthRequest": { "type": "object", "properties": { "company": { "$ref": "#/definitions/internal_http_handler.registerCompanyTarget" }, "company_id": { "type": "string" }, "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string" }, "role": { "type": "string" }, "username": { "type": "string" } } }, "internal_http_handler.registerCompanyRequest": { "type": "object", "properties": { "category": { "type": "string" }, "city": { "type": "string" }, "cnpj": { "type": "string" }, "corporate_name": { "type": "string" }, "latitude": { "type": "number" }, "license_number": { "type": "string" }, "longitude": { "type": "number" }, "state": { "type": "string" } } }, "internal_http_handler.registerCompanyTarget": { "type": "object", "properties": { "category": { "type": "string" }, "city": { "type": "string" }, "cnpj": { "type": "string" }, "corporate_name": { "type": "string" }, "id": { "type": "string" }, "latitude": { "type": "number" }, "license_number": { "type": "string" }, "longitude": { "type": "number" }, "state": { "type": "string" } } }, "internal_http_handler.registerProductRequest": { "type": "object", "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" } } }, "internal_http_handler.resetPasswordRequest": { "type": "object", "properties": { "password": { "type": "string" }, "token": { "type": "string" } } }, "internal_http_handler.resetTokenResponse": { "type": "object", "properties": { "expires_at": { "type": "string" }, "message": { "type": "string" }, "reset_token": { "type": "string" } } }, "internal_http_handler.shippingCalculateRequest": { "type": "object", "properties": { "address_id": { "type": "string" }, "buyer_latitude": { "type": "number" }, "buyer_longitude": { "type": "number" }, "cart_total_cents": { "type": "integer" }, "postal_code": { "type": "string" }, "vendor_id": { "type": "string" } } }, "internal_http_handler.shippingSettingsRequest": { "type": "object", "properties": { "active": { "type": "boolean" }, "free_shipping_threshold_cents": { "type": "integer" }, "latitude": { "description": "Store location for radius calc", "type": "number" }, "longitude": { "type": "number" }, "max_radius_km": { "type": "number" }, "min_fee_cents": { "type": "integer" }, "pickup_active": { "type": "boolean" }, "pickup_address": { "type": "string" }, "pickup_hours": { "type": "string" }, "price_per_km_cents": { "type": "integer" } } }, "internal_http_handler.updateCompanyRequest": { "type": "object", "properties": { "category": { "type": "string" }, "city": { "type": "string" }, "cnpj": { "type": "string" }, "corporate_name": { "type": "string" }, "is_verified": { "type": "boolean" }, "latitude": { "type": "number" }, "license_number": { "type": "string" }, "longitude": { "type": "number" }, "state": { "type": "string" } } }, "internal_http_handler.updateProductRequest": { "type": "object", "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" } } }, "internal_http_handler.updateStatusRequest": { "type": "object", "properties": { "status": { "type": "string" } } }, "internal_http_handler.updateUserRequest": { "type": "object", "properties": { "company_id": { "type": "string" }, "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string" }, "role": { "type": "string" }, "username": { "type": "string" } } }, "internal_http_handler.verifyEmailRequest": { "type": "object", "properties": { "token": { "type": "string" } } } }, "securityDefinitions": { "BearerAuth": { "type": "apiKey", "name": "Authorization", "in": "header" } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "1.0", Host: "", BasePath: "/", Schemes: []string{"http"}, Title: "SaveInMed Performance Core API", Description: "API REST B2B para marketplace farmacêutico com split de pagamento e rastreabilidade.", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, LeftDelim: "{{", RightDelim: "}}", } func init() { swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) }