1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct NfeRecord {
9 pub id: String,
10 pub chave_acesso: String,
11 pub numero: i32,
12 pub serie: i16,
13 pub data_emissao: DateTime<Utc>,
14 pub emit_cnpj: String,
15 pub emit_razao_social: String,
16 pub dest_cnpj: Option<String>,
17 pub dest_razao_social: Option<String>,
18 pub valor_total: f64,
19 pub xml: String,
20 pub json_data: String,
21 pub created_at: DateTime<Utc>,
22}
23
24pub const POSTGRES_CREATE_TABLE: &str = r#"
26CREATE TABLE IF NOT EXISTS nfe (
27 id VARCHAR(36) PRIMARY KEY,
28 chave_acesso VARCHAR(44) UNIQUE NOT NULL,
29 numero INTEGER NOT NULL,
30 serie SMALLINT NOT NULL,
31 data_emissao TIMESTAMP WITH TIME ZONE NOT NULL,
32 emit_cnpj VARCHAR(14) NOT NULL,
33 emit_razao_social VARCHAR(255) NOT NULL,
34 dest_cnpj VARCHAR(14),
35 dest_razao_social VARCHAR(255),
36 valor_total DECIMAL(15,2) NOT NULL,
37 xml TEXT NOT NULL,
38 json_data JSONB NOT NULL,
39 created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
40);
41
42CREATE INDEX IF NOT EXISTS idx_nfe_chave ON nfe(chave_acesso);
43CREATE INDEX IF NOT EXISTS idx_nfe_emit_cnpj ON nfe(emit_cnpj);
44CREATE INDEX IF NOT EXISTS idx_nfe_data ON nfe(data_emissao);
45"#;
46
47pub const MYSQL_CREATE_TABLE: &str = r#"
49CREATE TABLE IF NOT EXISTS nfe (
50 id VARCHAR(36) PRIMARY KEY,
51 chave_acesso VARCHAR(44) UNIQUE NOT NULL,
52 numero INT NOT NULL,
53 serie SMALLINT NOT NULL,
54 data_emissao DATETIME NOT NULL,
55 emit_cnpj VARCHAR(14) NOT NULL,
56 emit_razao_social VARCHAR(255) NOT NULL,
57 dest_cnpj VARCHAR(14),
58 dest_razao_social VARCHAR(255),
59 valor_total DECIMAL(15,2) NOT NULL,
60 xml LONGTEXT NOT NULL,
61 json_data JSON NOT NULL,
62 created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
63 INDEX idx_nfe_chave (chave_acesso),
64 INDEX idx_nfe_emit_cnpj (emit_cnpj),
65 INDEX idx_nfe_data (data_emissao)
66);
67"#;
68
69pub const POSTGRES_INSERT: &str = r#"
71INSERT INTO nfe (id, chave_acesso, numero, serie, data_emissao, emit_cnpj, emit_razao_social,
72 dest_cnpj, dest_razao_social, valor_total, xml, json_data)
73VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)
74ON CONFLICT (chave_acesso) DO UPDATE SET
75 xml = EXCLUDED.xml,
76 json_data = EXCLUDED.json_data
77"#;
78
79pub const MYSQL_INSERT: &str = r#"
81INSERT INTO nfe (id, chave_acesso, numero, serie, data_emissao, emit_cnpj, emit_razao_social,
82 dest_cnpj, dest_razao_social, valor_total, xml, json_data)
83VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
84ON DUPLICATE KEY UPDATE
85 xml = VALUES(xml),
86 json_data = VALUES(json_data)
87"#;
88
89pub const SELECT_BY_CHAVE: &str = "SELECT * FROM nfe WHERE chave_acesso = $1";
91
92pub const SELECT_ALL: &str = "SELECT * FROM nfe ORDER BY created_at DESC LIMIT $1 OFFSET $2";
94
95pub const SELECT_BY_EMIT_CNPJ: &str = "SELECT * FROM nfe WHERE emit_cnpj = $1 ORDER BY data_emissao DESC";