From 446dee26b69306136291f9a75db8d2a7c2bbfbd7 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Wed, 14 Jan 2026 10:02:55 -0300 Subject: [PATCH] Add extended product fields: dimensions, weight, tax codes, brand, inventory, pricing, SEO --- .../down.sql | 84 +++++++++++++ .../up.sql | 83 +++++++++++++ .../down.sql | 84 ------------- .../up.sql | 84 ------------- src/core/shared/schema.rs | 114 +++++++++--------- src/products/api.rs | 114 +++++++++--------- 6 files changed, 281 insertions(+), 282 deletions(-) create mode 100644 migrations/20250114000001_add_product_extended_fields/down.sql create mode 100644 migrations/20250114000001_add_product_extended_fields/up.sql delete mode 100644 migrations/20250114000001_add_stone_product_fields/down.sql delete mode 100644 migrations/20250114000001_add_stone_product_fields/up.sql diff --git a/migrations/20250114000001_add_product_extended_fields/down.sql b/migrations/20250114000001_add_product_extended_fields/down.sql new file mode 100644 index 000000000..d36de88ba --- /dev/null +++ b/migrations/20250114000001_add_product_extended_fields/down.sql @@ -0,0 +1,84 @@ +-- Rollback extended product fields + +-- Remove variant indexes +DROP INDEX IF EXISTS idx_product_variants_global_trade_number; + +-- Remove variant fields +ALTER TABLE product_variants DROP COLUMN IF EXISTS global_trade_number; +ALTER TABLE product_variants DROP COLUMN IF EXISTS net_weight; +ALTER TABLE product_variants DROP COLUMN IF EXISTS gross_weight; +ALTER TABLE product_variants DROP COLUMN IF EXISTS width; +ALTER TABLE product_variants DROP COLUMN IF EXISTS height; +ALTER TABLE product_variants DROP COLUMN IF EXISTS length; +ALTER TABLE product_variants DROP COLUMN IF EXISTS color; +ALTER TABLE product_variants DROP COLUMN IF EXISTS size; +ALTER TABLE product_variants DROP COLUMN IF EXISTS images; + +-- Remove product indexes +DROP INDEX IF EXISTS idx_products_tax_code; +DROP INDEX IF EXISTS idx_products_global_trade_number; +DROP INDEX IF EXISTS idx_products_brand; +DROP INDEX IF EXISTS idx_products_slug; +DROP INDEX IF EXISTS idx_products_expiration; +DROP INDEX IF EXISTS idx_products_external_id; + +-- Remove SEO and search +ALTER TABLE products DROP COLUMN IF EXISTS slug; +ALTER TABLE products DROP COLUMN IF EXISTS meta_title; +ALTER TABLE products DROP COLUMN IF EXISTS meta_description; +ALTER TABLE products DROP COLUMN IF EXISTS tags; + +-- Remove payment gateway integration +ALTER TABLE products DROP COLUMN IF EXISTS external_id; +ALTER TABLE products DROP COLUMN IF EXISTS external_category_id; +ALTER TABLE products DROP COLUMN IF EXISTS external_metadata; + +-- Remove detailed pricing +ALTER TABLE products DROP COLUMN IF EXISTS sale_price; +ALTER TABLE products DROP COLUMN IF EXISTS sale_start; +ALTER TABLE products DROP COLUMN IF EXISTS sale_end; +ALTER TABLE products DROP COLUMN IF EXISTS shipping_cost; +ALTER TABLE products DROP COLUMN IF EXISTS profit_margin; + +-- Remove advanced inventory control +ALTER TABLE products DROP COLUMN IF EXISTS warehouse_location; +ALTER TABLE products DROP COLUMN IF EXISTS batch_number; +ALTER TABLE products DROP COLUMN IF EXISTS expiration_date; +ALTER TABLE products DROP COLUMN IF EXISTS manufacture_date; +ALTER TABLE products DROP COLUMN IF EXISTS min_stock; +ALTER TABLE products DROP COLUMN IF EXISTS max_stock; +ALTER TABLE products DROP COLUMN IF EXISTS reorder_point; + +-- Remove marketplace and e-commerce fields +ALTER TABLE products DROP COLUMN IF EXISTS brand; +ALTER TABLE products DROP COLUMN IF EXISTS model; +ALTER TABLE products DROP COLUMN IF EXISTS color; +ALTER TABLE products DROP COLUMN IF EXISTS size; +ALTER TABLE products DROP COLUMN IF EXISTS material; +ALTER TABLE products DROP COLUMN IF EXISTS gender; + +-- Remove tax rates by type +ALTER TABLE products DROP COLUMN IF EXISTS sales_tax_code; +ALTER TABLE products DROP COLUMN IF EXISTS sales_tax_rate; +ALTER TABLE products DROP COLUMN IF EXISTS excise_tax_code; +ALTER TABLE products DROP COLUMN IF EXISTS excise_tax_rate; +ALTER TABLE products DROP COLUMN IF EXISTS vat_code; +ALTER TABLE products DROP COLUMN IF EXISTS vat_rate; +ALTER TABLE products DROP COLUMN IF EXISTS service_tax_code; +ALTER TABLE products DROP COLUMN IF EXISTS service_tax_rate; + +-- Remove detailed dimensions +ALTER TABLE products DROP COLUMN IF EXISTS net_weight; +ALTER TABLE products DROP COLUMN IF EXISTS gross_weight; +ALTER TABLE products DROP COLUMN IF EXISTS width; +ALTER TABLE products DROP COLUMN IF EXISTS height; +ALTER TABLE products DROP COLUMN IF EXISTS length; +ALTER TABLE products DROP COLUMN IF EXISTS package_count; + +-- Remove tax and fiscal identification fields +ALTER TABLE products DROP COLUMN IF EXISTS tax_code; +ALTER TABLE products DROP COLUMN IF EXISTS tax_class; +ALTER TABLE products DROP COLUMN IF EXISTS fiscal_code; +ALTER TABLE products DROP COLUMN IF EXISTS origin_code; +ALTER TABLE products DROP COLUMN IF EXISTS global_trade_number; +ALTER TABLE products DROP COLUMN IF EXISTS tax_unit_code; diff --git a/migrations/20250114000001_add_product_extended_fields/up.sql b/migrations/20250114000001_add_product_extended_fields/up.sql new file mode 100644 index 000000000..7e95b53c3 --- /dev/null +++ b/migrations/20250114000001_add_product_extended_fields/up.sql @@ -0,0 +1,83 @@ +-- Extended product fields for e-commerce and payment integrations + +-- Tax and fiscal identification fields +ALTER TABLE products ADD COLUMN IF NOT EXISTS tax_code VARCHAR(10); +ALTER TABLE products ADD COLUMN IF NOT EXISTS tax_class VARCHAR(50); +ALTER TABLE products ADD COLUMN IF NOT EXISTS fiscal_code VARCHAR(10); +ALTER TABLE products ADD COLUMN IF NOT EXISTS origin_code INTEGER DEFAULT 0; +ALTER TABLE products ADD COLUMN IF NOT EXISTS global_trade_number VARCHAR(14); +ALTER TABLE products ADD COLUMN IF NOT EXISTS tax_unit_code VARCHAR(14); + +-- Detailed dimensions (for shipping calculation) +ALTER TABLE products ADD COLUMN IF NOT EXISTS net_weight DECIMAL(10,3); +ALTER TABLE products ADD COLUMN IF NOT EXISTS gross_weight DECIMAL(10,3); +ALTER TABLE products ADD COLUMN IF NOT EXISTS width DECIMAL(10,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS height DECIMAL(10,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS length DECIMAL(10,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS package_count INTEGER DEFAULT 1; + +-- Tax rates by type +ALTER TABLE products ADD COLUMN IF NOT EXISTS sales_tax_code VARCHAR(3); +ALTER TABLE products ADD COLUMN IF NOT EXISTS sales_tax_rate DECIMAL(5,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS excise_tax_code VARCHAR(2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS excise_tax_rate DECIMAL(5,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS vat_code VARCHAR(2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS vat_rate DECIMAL(5,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS service_tax_code VARCHAR(2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS service_tax_rate DECIMAL(5,2); + +-- Marketplace and e-commerce fields +ALTER TABLE products ADD COLUMN IF NOT EXISTS brand VARCHAR(100); +ALTER TABLE products ADD COLUMN IF NOT EXISTS model VARCHAR(100); +ALTER TABLE products ADD COLUMN IF NOT EXISTS color VARCHAR(50); +ALTER TABLE products ADD COLUMN IF NOT EXISTS size VARCHAR(20); +ALTER TABLE products ADD COLUMN IF NOT EXISTS material VARCHAR(100); +ALTER TABLE products ADD COLUMN IF NOT EXISTS gender VARCHAR(20); + +-- Advanced inventory control +ALTER TABLE products ADD COLUMN IF NOT EXISTS warehouse_location VARCHAR(100); +ALTER TABLE products ADD COLUMN IF NOT EXISTS batch_number VARCHAR(50); +ALTER TABLE products ADD COLUMN IF NOT EXISTS expiration_date DATE; +ALTER TABLE products ADD COLUMN IF NOT EXISTS manufacture_date DATE; +ALTER TABLE products ADD COLUMN IF NOT EXISTS min_stock INTEGER DEFAULT 0; +ALTER TABLE products ADD COLUMN IF NOT EXISTS max_stock INTEGER; +ALTER TABLE products ADD COLUMN IF NOT EXISTS reorder_point INTEGER; + +-- Detailed pricing +ALTER TABLE products ADD COLUMN IF NOT EXISTS sale_price DECIMAL(15,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS sale_start TIMESTAMPTZ; +ALTER TABLE products ADD COLUMN IF NOT EXISTS sale_end TIMESTAMPTZ; +ALTER TABLE products ADD COLUMN IF NOT EXISTS shipping_cost DECIMAL(15,2); +ALTER TABLE products ADD COLUMN IF NOT EXISTS profit_margin DECIMAL(5,2); + +-- Payment gateway integration +ALTER TABLE products ADD COLUMN IF NOT EXISTS external_id VARCHAR(100); +ALTER TABLE products ADD COLUMN IF NOT EXISTS external_category_id VARCHAR(100); +ALTER TABLE products ADD COLUMN IF NOT EXISTS external_metadata JSONB DEFAULT '{}'; + +-- SEO and search +ALTER TABLE products ADD COLUMN IF NOT EXISTS slug VARCHAR(255); +ALTER TABLE products ADD COLUMN IF NOT EXISTS meta_title VARCHAR(255); +ALTER TABLE products ADD COLUMN IF NOT EXISTS meta_description TEXT; +ALTER TABLE products ADD COLUMN IF NOT EXISTS tags TEXT[]; + +-- Indexes for new fields +CREATE INDEX IF NOT EXISTS idx_products_tax_code ON products(tax_code); +CREATE INDEX IF NOT EXISTS idx_products_global_trade_number ON products(global_trade_number); +CREATE INDEX IF NOT EXISTS idx_products_brand ON products(brand); +CREATE INDEX IF NOT EXISTS idx_products_slug ON products(slug); +CREATE INDEX IF NOT EXISTS idx_products_expiration ON products(expiration_date); +CREATE INDEX IF NOT EXISTS idx_products_external_id ON products(external_id); + +-- Add similar fields to product variants +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS global_trade_number VARCHAR(14); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS net_weight DECIMAL(10,3); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS gross_weight DECIMAL(10,3); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS width DECIMAL(10,2); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS height DECIMAL(10,2); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS length DECIMAL(10,2); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS color VARCHAR(50); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS size VARCHAR(20); +ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS images JSONB DEFAULT '[]'; + +CREATE INDEX IF NOT EXISTS idx_product_variants_global_trade_number ON product_variants(global_trade_number); diff --git a/migrations/20250114000001_add_stone_product_fields/down.sql b/migrations/20250114000001_add_stone_product_fields/down.sql deleted file mode 100644 index 12b1661c7..000000000 --- a/migrations/20250114000001_add_stone_product_fields/down.sql +++ /dev/null @@ -1,84 +0,0 @@ --- Rollback Stone Pagamentos fields from products table - --- Remove índices das variantes -DROP INDEX IF EXISTS idx_product_variants_gtin; - --- Remove campos das variantes -ALTER TABLE product_variants DROP COLUMN IF EXISTS gtin; -ALTER TABLE product_variants DROP COLUMN IF EXISTS peso_liquido; -ALTER TABLE product_variants DROP COLUMN IF EXISTS peso_bruto; -ALTER TABLE product_variants DROP COLUMN IF EXISTS largura; -ALTER TABLE product_variants DROP COLUMN IF EXISTS altura; -ALTER TABLE product_variants DROP COLUMN IF EXISTS comprimento; -ALTER TABLE product_variants DROP COLUMN IF EXISTS cor; -ALTER TABLE product_variants DROP COLUMN IF EXISTS tamanho; -ALTER TABLE product_variants DROP COLUMN IF EXISTS images; - --- Remove índices dos produtos -DROP INDEX IF EXISTS idx_products_ncm; -DROP INDEX IF EXISTS idx_products_gtin; -DROP INDEX IF EXISTS idx_products_marca; -DROP INDEX IF EXISTS idx_products_slug; -DROP INDEX IF EXISTS idx_products_validade; -DROP INDEX IF EXISTS idx_products_stone_item; - --- Remove campos SEO e busca -ALTER TABLE products DROP COLUMN IF EXISTS slug; -ALTER TABLE products DROP COLUMN IF EXISTS meta_title; -ALTER TABLE products DROP COLUMN IF EXISTS meta_description; -ALTER TABLE products DROP COLUMN IF EXISTS tags; - --- Remove campos Stone específicos -ALTER TABLE products DROP COLUMN IF EXISTS stone_item_id; -ALTER TABLE products DROP COLUMN IF EXISTS stone_category_id; -ALTER TABLE products DROP COLUMN IF EXISTS stone_metadata; - --- Remove preços e custos detalhados -ALTER TABLE products DROP COLUMN IF EXISTS preco_promocional; -ALTER TABLE products DROP COLUMN IF EXISTS promocao_inicio; -ALTER TABLE products DROP COLUMN IF EXISTS promocao_fim; -ALTER TABLE products DROP COLUMN IF EXISTS custo_frete; -ALTER TABLE products DROP COLUMN IF EXISTS margem_lucro; - --- Remove controle de estoque avançado -ALTER TABLE products DROP COLUMN IF EXISTS localizacao_estoque; -ALTER TABLE products DROP COLUMN IF EXISTS lote; -ALTER TABLE products DROP COLUMN IF EXISTS data_validade; -ALTER TABLE products DROP COLUMN IF EXISTS data_fabricacao; -ALTER TABLE products DROP COLUMN IF EXISTS estoque_minimo; -ALTER TABLE products DROP COLUMN IF EXISTS estoque_maximo; -ALTER TABLE products DROP COLUMN IF EXISTS ponto_reposicao; - --- Remove campos para marketplace e e-commerce -ALTER TABLE products DROP COLUMN IF EXISTS marca; -ALTER TABLE products DROP COLUMN IF EXISTS modelo; -ALTER TABLE products DROP COLUMN IF EXISTS cor; -ALTER TABLE products DROP COLUMN IF EXISTS tamanho; -ALTER TABLE products DROP COLUMN IF EXISTS material; -ALTER TABLE products DROP COLUMN IF EXISTS genero; - --- Remove informações tributárias -ALTER TABLE products DROP COLUMN IF EXISTS icms_cst; -ALTER TABLE products DROP COLUMN IF EXISTS icms_aliquota; -ALTER TABLE products DROP COLUMN IF EXISTS ipi_cst; -ALTER TABLE products DROP COLUMN IF EXISTS ipi_aliquota; -ALTER TABLE products DROP COLUMN IF EXISTS pis_cst; -ALTER TABLE products DROP COLUMN IF EXISTS pis_aliquota; -ALTER TABLE products DROP COLUMN IF EXISTS cofins_cst; -ALTER TABLE products DROP COLUMN IF EXISTS cofins_aliquota; - --- Remove dimensões detalhadas -ALTER TABLE products DROP COLUMN IF EXISTS peso_liquido; -ALTER TABLE products DROP COLUMN IF EXISTS peso_bruto; -ALTER TABLE products DROP COLUMN IF EXISTS largura; -ALTER TABLE products DROP COLUMN IF EXISTS altura; -ALTER TABLE products DROP COLUMN IF EXISTS comprimento; -ALTER TABLE products DROP COLUMN IF EXISTS volumes; - --- Remove campos de identificação fiscal e tributária -ALTER TABLE products DROP COLUMN IF EXISTS ncm; -ALTER TABLE products DROP COLUMN IF EXISTS cest; -ALTER TABLE products DROP COLUMN IF EXISTS cfop; -ALTER TABLE products DROP COLUMN IF EXISTS origem; -ALTER TABLE products DROP COLUMN IF EXISTS gtin; -ALTER TABLE products DROP COLUMN IF EXISTS gtin_tributavel; diff --git a/migrations/20250114000001_add_stone_product_fields/up.sql b/migrations/20250114000001_add_stone_product_fields/up.sql deleted file mode 100644 index 719571146..000000000 --- a/migrations/20250114000001_add_stone_product_fields/up.sql +++ /dev/null @@ -1,84 +0,0 @@ --- Stone Pagamentos compatible fields for products --- Adiciona campos para integração com Stone e outros gateways de pagamento brasileiros - --- Campos de identificação fiscal e tributária -ALTER TABLE products ADD COLUMN IF NOT EXISTS ncm VARCHAR(10); -- Nomenclatura Comum do Mercosul -ALTER TABLE products ADD COLUMN IF NOT EXISTS cest VARCHAR(9); -- Código Especificador da Substituição Tributária -ALTER TABLE products ADD COLUMN IF NOT EXISTS cfop VARCHAR(4); -- Código Fiscal de Operações e Prestações -ALTER TABLE products ADD COLUMN IF NOT EXISTS origem INTEGER DEFAULT 0; -- Origem da mercadoria (0=Nacional, 1-8=Importado) -ALTER TABLE products ADD COLUMN IF NOT EXISTS gtin VARCHAR(14); -- Global Trade Item Number (EAN/UPC) -ALTER TABLE products ADD COLUMN IF NOT EXISTS gtin_tributavel VARCHAR(14); -- GTIN da unidade tributável - --- Dimensões detalhadas (para cálculo de frete) -ALTER TABLE products ADD COLUMN IF NOT EXISTS peso_liquido DECIMAL(10,3); -- Peso líquido em kg -ALTER TABLE products ADD COLUMN IF NOT EXISTS peso_bruto DECIMAL(10,3); -- Peso bruto em kg -ALTER TABLE products ADD COLUMN IF NOT EXISTS largura DECIMAL(10,2); -- Largura em cm -ALTER TABLE products ADD COLUMN IF NOT EXISTS altura DECIMAL(10,2); -- Altura em cm -ALTER TABLE products ADD COLUMN IF NOT EXISTS comprimento DECIMAL(10,2); -- Comprimento/Profundidade em cm -ALTER TABLE products ADD COLUMN IF NOT EXISTS volumes INTEGER DEFAULT 1; -- Quantidade de volumes - --- Informações tributárias -ALTER TABLE products ADD COLUMN IF NOT EXISTS icms_cst VARCHAR(3); -- Código de Situação Tributária ICMS -ALTER TABLE products ADD COLUMN IF NOT EXISTS icms_aliquota DECIMAL(5,2); -- Alíquota ICMS -ALTER TABLE products ADD COLUMN IF NOT EXISTS ipi_cst VARCHAR(2); -- CST do IPI -ALTER TABLE products ADD COLUMN IF NOT EXISTS ipi_aliquota DECIMAL(5,2); -- Alíquota IPI -ALTER TABLE products ADD COLUMN IF NOT EXISTS pis_cst VARCHAR(2); -- CST do PIS -ALTER TABLE products ADD COLUMN IF NOT EXISTS pis_aliquota DECIMAL(5,2); -- Alíquota PIS -ALTER TABLE products ADD COLUMN IF NOT EXISTS cofins_cst VARCHAR(2); -- CST do COFINS -ALTER TABLE products ADD COLUMN IF NOT EXISTS cofins_aliquota DECIMAL(5,2); -- Alíquota COFINS - --- Campos para marketplace e e-commerce -ALTER TABLE products ADD COLUMN IF NOT EXISTS marca VARCHAR(100); -- Marca/Fabricante -ALTER TABLE products ADD COLUMN IF NOT EXISTS modelo VARCHAR(100); -- Modelo -ALTER TABLE products ADD COLUMN IF NOT EXISTS cor VARCHAR(50); -- Cor principal -ALTER TABLE products ADD COLUMN IF NOT EXISTS tamanho VARCHAR(20); -- Tamanho (P, M, G, 38, 40, etc) -ALTER TABLE products ADD COLUMN IF NOT EXISTS material VARCHAR(100); -- Material principal -ALTER TABLE products ADD COLUMN IF NOT EXISTS genero VARCHAR(20); -- Masculino, Feminino, Unissex - --- Controle de estoque avançado -ALTER TABLE products ADD COLUMN IF NOT EXISTS localizacao_estoque VARCHAR(100); -- Localização no armazém -ALTER TABLE products ADD COLUMN IF NOT EXISTS lote VARCHAR(50); -- Número do lote -ALTER TABLE products ADD COLUMN IF NOT EXISTS data_validade DATE; -- Data de validade -ALTER TABLE products ADD COLUMN IF NOT EXISTS data_fabricacao DATE; -- Data de fabricação -ALTER TABLE products ADD COLUMN IF NOT EXISTS estoque_minimo INTEGER DEFAULT 0; -- Estoque mínimo para alerta -ALTER TABLE products ADD COLUMN IF NOT EXISTS estoque_maximo INTEGER; -- Estoque máximo -ALTER TABLE products ADD COLUMN IF NOT EXISTS ponto_reposicao INTEGER; -- Ponto de reposição - --- Preços e custos detalhados -ALTER TABLE products ADD COLUMN IF NOT EXISTS preco_promocional DECIMAL(15,2); -- Preço promocional -ALTER TABLE products ADD COLUMN IF NOT EXISTS promocao_inicio TIMESTAMPTZ; -- Início da promoção -ALTER TABLE products ADD COLUMN IF NOT EXISTS promocao_fim TIMESTAMPTZ; -- Fim da promoção -ALTER TABLE products ADD COLUMN IF NOT EXISTS custo_frete DECIMAL(15,2); -- Custo médio de frete -ALTER TABLE products ADD COLUMN IF NOT EXISTS margem_lucro DECIMAL(5,2); -- Margem de lucro % - --- Campos Stone específicos -ALTER TABLE products ADD COLUMN IF NOT EXISTS stone_item_id VARCHAR(100); -- ID do item na Stone -ALTER TABLE products ADD COLUMN IF NOT EXISTS stone_category_id VARCHAR(100); -- ID da categoria na Stone -ALTER TABLE products ADD COLUMN IF NOT EXISTS stone_metadata JSONB DEFAULT '{}'; -- Metadados Stone - --- SEO e busca -ALTER TABLE products ADD COLUMN IF NOT EXISTS slug VARCHAR(255); -- URL amigável -ALTER TABLE products ADD COLUMN IF NOT EXISTS meta_title VARCHAR(255); -- Título para SEO -ALTER TABLE products ADD COLUMN IF NOT EXISTS meta_description TEXT; -- Descrição para SEO -ALTER TABLE products ADD COLUMN IF NOT EXISTS tags TEXT[]; -- Tags para busca - --- Índices para novos campos -CREATE INDEX IF NOT EXISTS idx_products_ncm ON products(ncm); -CREATE INDEX IF NOT EXISTS idx_products_gtin ON products(gtin); -CREATE INDEX IF NOT EXISTS idx_products_marca ON products(marca); -CREATE INDEX IF NOT EXISTS idx_products_slug ON products(slug); -CREATE INDEX IF NOT EXISTS idx_products_validade ON products(data_validade); -CREATE INDEX IF NOT EXISTS idx_products_stone_item ON products(stone_item_id); - --- Também adicionar campos similares nas variantes -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS gtin VARCHAR(14); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS peso_liquido DECIMAL(10,3); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS peso_bruto DECIMAL(10,3); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS largura DECIMAL(10,2); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS altura DECIMAL(10,2); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS comprimento DECIMAL(10,2); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS cor VARCHAR(50); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS tamanho VARCHAR(20); -ALTER TABLE product_variants ADD COLUMN IF NOT EXISTS images JSONB DEFAULT '[]'; - -CREATE INDEX IF NOT EXISTS idx_product_variants_gtin ON product_variants(gtin); diff --git a/src/core/shared/schema.rs b/src/core/shared/schema.rs index c4079ccfb..eb0fc6fde 100644 --- a/src/core/shared/schema.rs +++ b/src/core/shared/schema.rs @@ -983,55 +983,55 @@ diesel::table! { barcode -> Nullable, created_at -> Timestamptz, updated_at -> Timestamptz, - // Campos fiscais e tributários (Stone/Brasil) - ncm -> Nullable, - cest -> Nullable, - cfop -> Nullable, - origem -> Nullable, - gtin -> Nullable, - gtin_tributavel -> Nullable, - // Dimensões detalhadas (frete) - peso_liquido -> Nullable, - peso_bruto -> Nullable, - largura -> Nullable, - altura -> Nullable, - comprimento -> Nullable, - volumes -> Nullable, - // Informações tributárias - icms_cst -> Nullable, - icms_aliquota -> Nullable, - ipi_cst -> Nullable, - ipi_aliquota -> Nullable, - pis_cst -> Nullable, - pis_aliquota -> Nullable, - cofins_cst -> Nullable, - cofins_aliquota -> Nullable, - // Marketplace e e-commerce - marca -> Nullable, - modelo -> Nullable, - cor -> Nullable, - tamanho -> Nullable, + // Tax and fiscal identification + tax_code -> Nullable, + tax_class -> Nullable, + fiscal_code -> Nullable, + origin_code -> Nullable, + global_trade_number -> Nullable, + tax_unit_code -> Nullable, + // Detailed dimensions (shipping) + net_weight -> Nullable, + gross_weight -> Nullable, + width -> Nullable, + height -> Nullable, + length -> Nullable, + package_count -> Nullable, + // Tax rates by type + sales_tax_code -> Nullable, + sales_tax_rate -> Nullable, + excise_tax_code -> Nullable, + excise_tax_rate -> Nullable, + vat_code -> Nullable, + vat_rate -> Nullable, + service_tax_code -> Nullable, + service_tax_rate -> Nullable, + // Marketplace and e-commerce + brand -> Nullable, + model -> Nullable, + color -> Nullable, + size -> Nullable, material -> Nullable, - genero -> Nullable, - // Controle de estoque avançado - localizacao_estoque -> Nullable, - lote -> Nullable, - data_validade -> Nullable, - data_fabricacao -> Nullable, - estoque_minimo -> Nullable, - estoque_maximo -> Nullable, - ponto_reposicao -> Nullable, - // Preços e custos detalhados - preco_promocional -> Nullable, - promocao_inicio -> Nullable, - promocao_fim -> Nullable, - custo_frete -> Nullable, - margem_lucro -> Nullable, - // Campos Stone específicos - stone_item_id -> Nullable, - stone_category_id -> Nullable, - stone_metadata -> Nullable, - // SEO e busca + gender -> Nullable, + // Advanced inventory control + warehouse_location -> Nullable, + batch_number -> Nullable, + expiration_date -> Nullable, + manufacture_date -> Nullable, + min_stock -> Nullable, + max_stock -> Nullable, + reorder_point -> Nullable, + // Detailed pricing + sale_price -> Nullable, + sale_start -> Nullable, + sale_end -> Nullable, + shipping_cost -> Nullable, + profit_margin -> Nullable, + // Payment gateway integration + external_id -> Nullable, + external_category_id -> Nullable, + external_metadata -> Nullable, + // SEO and search slug -> Nullable, meta_title -> Nullable, meta_description -> Nullable, @@ -1133,15 +1133,15 @@ diesel::table! { attributes -> Jsonb, is_active -> Bool, created_at -> Timestamptz, - // Stone/Brasil fields - gtin -> Nullable, - peso_liquido -> Nullable, - peso_bruto -> Nullable, - largura -> Nullable, - altura -> Nullable, - comprimento -> Nullable, - cor -> Nullable, - tamanho -> Nullable, + // Extended variant fields + global_trade_number -> Nullable, + net_weight -> Nullable, + gross_weight -> Nullable, + width -> Nullable, + height -> Nullable, + length -> Nullable, + color -> Nullable, + size -> Nullable, images -> Nullable, } } diff --git a/src/products/api.rs b/src/products/api.rs index 4031b5474..def14b294 100644 --- a/src/products/api.rs +++ b/src/products/api.rs @@ -48,55 +48,55 @@ pub struct Product { pub barcode: Option, pub created_at: DateTime, pub updated_at: DateTime, - // Campos fiscais e tributários (Stone/Brasil) - pub ncm: Option, - pub cest: Option, - pub cfop: Option, - pub origem: Option, - pub gtin: Option, - pub gtin_tributavel: Option, - // Dimensões detalhadas (frete) - pub peso_liquido: Option, - pub peso_bruto: Option, - pub largura: Option, - pub altura: Option, - pub comprimento: Option, - pub volumes: Option, - // Informações tributárias - pub icms_cst: Option, - pub icms_aliquota: Option, - pub ipi_cst: Option, - pub ipi_aliquota: Option, - pub pis_cst: Option, - pub pis_aliquota: Option, - pub cofins_cst: Option, - pub cofins_aliquota: Option, - // Marketplace e e-commerce - pub marca: Option, - pub modelo: Option, - pub cor: Option, - pub tamanho: Option, + // Tax and fiscal identification + pub tax_code: Option, + pub tax_class: Option, + pub fiscal_code: Option, + pub origin_code: Option, + pub global_trade_number: Option, + pub tax_unit_code: Option, + // Detailed dimensions (shipping) + pub net_weight: Option, + pub gross_weight: Option, + pub width: Option, + pub height: Option, + pub length: Option, + pub package_count: Option, + // Tax rates by type + pub sales_tax_code: Option, + pub sales_tax_rate: Option, + pub excise_tax_code: Option, + pub excise_tax_rate: Option, + pub vat_code: Option, + pub vat_rate: Option, + pub service_tax_code: Option, + pub service_tax_rate: Option, + // Marketplace and e-commerce + pub brand: Option, + pub model: Option, + pub color: Option, + pub size: Option, pub material: Option, - pub genero: Option, - // Controle de estoque avançado - pub localizacao_estoque: Option, - pub lote: Option, - pub data_validade: Option, - pub data_fabricacao: Option, - pub estoque_minimo: Option, - pub estoque_maximo: Option, - pub ponto_reposicao: Option, - // Preços e custos detalhados - pub preco_promocional: Option, - pub promocao_inicio: Option>, - pub promocao_fim: Option>, - pub custo_frete: Option, - pub margem_lucro: Option, - // Campos Stone específicos - pub stone_item_id: Option, - pub stone_category_id: Option, - pub stone_metadata: Option, - // SEO e busca + pub gender: Option, + // Advanced inventory control + pub warehouse_location: Option, + pub batch_number: Option, + pub expiration_date: Option, + pub manufacture_date: Option, + pub min_stock: Option, + pub max_stock: Option, + pub reorder_point: Option, + // Detailed pricing + pub sale_price: Option, + pub sale_start: Option>, + pub sale_end: Option>, + pub shipping_cost: Option, + pub profit_margin: Option, + // Payment gateway integration + pub external_id: Option, + pub external_category_id: Option, + pub external_metadata: Option, + // SEO and search pub slug: Option, pub meta_title: Option, pub meta_description: Option, @@ -198,15 +198,15 @@ pub struct ProductVariant { pub attributes: serde_json::Value, pub is_active: bool, pub created_at: DateTime, - // Stone/Brasil fields - pub gtin: Option, - pub peso_liquido: Option, - pub peso_bruto: Option, - pub largura: Option, - pub altura: Option, - pub comprimento: Option, - pub cor: Option, - pub tamanho: Option, + // Extended variant fields + pub global_trade_number: Option, + pub net_weight: Option, + pub gross_weight: Option, + pub width: Option, + pub height: Option, + pub length: Option, + pub color: Option, + pub size: Option, pub images: Option, }