Skip to content

Commit 8786e73

Browse files
committed
Atualiza gerador de dados para não violar FKs e UK
1 parent 5f66201 commit 8786e73

File tree

1 file changed

+52
-56
lines changed

1 file changed

+52
-56
lines changed

gerar-dados/index.js

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
const { faker } = require('@faker-js/faker');
22

3+
const lojas = 20, produtos = 200, vendas = 1000
4+
35
// Função auxiliar para gerar uma string formatada para o insert
46
function formatInsert(table, columns, values) {
57
const newValues = values.map(val => {
8+
if(typeof val !== 'string')
9+
return val
10+
611
const quotes = val.startsWith("'")
712
val = val.replaceAll("'", "")
813
return quotes ? `'${val}'` : val
@@ -35,10 +40,10 @@ function generateClienteInserts(numInserts) {
3540
}
3641

3742
// Gerar inserts para a tabela loja
38-
function generateLojaInserts(numInserts) {
43+
function generateLojaInserts() {
3944
const inserts = [];
4045

41-
for (let i = 0; i < numInserts; i++) {
46+
for (let i = 0; i < lojas; i++) {
4247
const cidade_id = faker.number.int({ min: 1, max: 5564 });
4348
const data_inauguracao = faker.date.birthdate().toISOString().split('T')[0];
4449

@@ -60,7 +65,7 @@ function generateFuncionarioInserts(numInserts) {
6065
for (let i = 0; i < numInserts; i++) {
6166
const nome = faker.person.fullName();
6267
const cpf = faker.number.int({ min: 10000000000, max: 99999999999 });
63-
const loja_id = faker.number.int({ min: 1, max: 5 });
68+
const loja_id = faker.number.int({ min: 1, max: lojas });
6469
const data_nascimento = faker.date.birthdate().toISOString().split('T')[0];
6570

6671
const insert = formatInsert('funcionario', ['nome', 'cpf', 'loja_id', 'data_nascimento'], [
@@ -91,10 +96,10 @@ function generateMarcaInserts(numInserts) {
9196
}
9297

9398
// Gerar inserts para a tabela produto
94-
function generateProdutoInserts(numInserts) {
99+
function generateProdutoInserts() {
95100
const inserts = [];
96101

97-
for (let i = 0; i < numInserts; i++) {
102+
for (let i = 0; i < produtos; i++) {
98103
const nome = faker.commerce.productName();
99104
const marca_id = faker.number.int({ min: 1, max: 5 });
100105
const valor = faker.number.int({ min: 10, max: 1000 });
@@ -112,31 +117,30 @@ function generateProdutoInserts(numInserts) {
112117
}
113118

114119
// Gerar inserts para a tabela estoque
115-
function generateEstoqueInserts(numInserts) {
120+
function generateEstoqueInserts() {
116121
const inserts = [];
117-
118-
for (let i = 0; i < numInserts; i++) {
119-
const produto_id = faker.number.int({ min: 1, max: 50 });
120-
const loja_id = faker.number.int({ min: 1, max: 10 });
121-
const quant = 10000;
122-
123-
const insert = formatInsert('estoque', ['produto_id', 'loja_id', 'quant'], [
124-
`${produto_id}`,
125-
`${loja_id}`,
126-
`${quant}`
127-
]);
128-
129-
inserts.push(insert);
122+
const quant = 10000;
123+
124+
for (let loja_id = 1; loja_id <= lojas; loja_id++) {
125+
for (let produto_id = 1; produto_id <= produtos; produto_id++) {
126+
const insert = formatInsert('estoque', ['produto_id', 'loja_id', 'quant'], [
127+
produto_id,
128+
loja_id,
129+
quant
130+
]);
131+
132+
inserts.push(insert);
133+
}
130134
}
131135

132136
return inserts;
133137
}
134138

135139
// Gerar inserts para a tabela venda
136-
function generateVendaInserts(numInserts) {
140+
function generateVendaInserts() {
137141
const inserts = [];
138142

139-
for (let i = 0; i < numInserts; i++) {
143+
for (let i = 0; i < vendas; i++) {
140144
const loja_id = faker.number.int({ min: 1, max: 10 });
141145
const cliente_id = faker.number.int({ min: 1, max: 100 });
142146
const funcionario_id = faker.number.int({ min: 1, max: 50 });
@@ -154,51 +158,43 @@ function generateVendaInserts(numInserts) {
154158
}
155159

156160
// Gerar inserts para a tabela item_venda
157-
function generateItemVendaInserts(numInserts) {
161+
function generateItemVendaInserts() {
158162
const inserts = [];
159163

160-
for (let i = 0; i < numInserts; i++) {
161-
const venda_id = faker.number.int({ min: 1, max: 1000 });
162-
const produto_id = faker.number.int({ min: 1, max: 50 });
163-
const quant = faker.number.int({ min: 1, max: 10 });
164-
const valor = faker.number.int({ min: 10, max: 100 });
165-
166-
const insert = formatInsert('item_venda', ['venda_id', 'produto_id', 'quant', 'valor'], [
167-
`${venda_id}`,
168-
`${produto_id}`,
169-
`${quant}`,
170-
`${valor}`
171-
]);
172-
173-
inserts.push(insert);
164+
for (let venda_id = 1; venda_id <= vendas; venda_id++) {
165+
const totalItens = faker.number.int({ min: 1, max: 8 });
166+
const produtoIdSet = new Set()
167+
for (let i = 1; i <= totalItens; i++) {
168+
const produto_id = faker.number.int({ min: 1, max: produtos });
169+
produtoIdSet.add(produto_id)
170+
}
171+
172+
produtoIdSet.forEach(produto_id => {
173+
const quant = faker.number.int({ min: 1, max: 10 });
174+
const valor = faker.number.int({ min: 10, max: 100 });
175+
176+
const insert = formatInsert('item_venda', ['venda_id', 'produto_id', 'quant', 'valor'], [
177+
`${venda_id}`,
178+
`${produto_id}`,
179+
`${quant}`,
180+
`${valor}`
181+
]);
182+
183+
inserts.push(insert);
184+
})
174185
}
175186

176187
return inserts;
177188
}
178189

179-
// Gerar 100 inserts para a tabela cliente
180190
const clienteInserts = generateClienteInserts(100);
181-
182-
// Gerar 20 inserts para a tabela loja
183-
const lojaInserts = generateLojaInserts(20);
184-
185-
// Gerar 50 inserts para a tabela funcionario
191+
const lojaInserts = generateLojaInserts();
186192
const funcionarioInserts = generateFuncionarioInserts(50);
187-
188-
// Gerar 4 inserts para a tabela marca
189193
const marcaInserts = generateMarcaInserts(40);
190-
191-
// Gerar 200 inserts para a tabela produto
192-
const produtoInserts = generateProdutoInserts(200);
193-
194-
// Gerar 500 inserts para a tabela estoque
195-
const estoqueInserts = generateEstoqueInserts(500);
196-
197-
// Gerar 1000 inserts para a tabela venda
198-
const vendaInserts = generateVendaInserts(1000);
199-
200-
// Gerar 2000 inserts para a tabela item_venda
201-
const itemVendaInserts = generateItemVendaInserts(2000);
194+
const produtoInserts = generateProdutoInserts();
195+
const estoqueInserts = generateEstoqueInserts();
196+
const vendaInserts = generateVendaInserts();
197+
const itemVendaInserts = generateItemVendaInserts();
202198

203199
// Imprimir os inserts gerados
204200
console.log('');

0 commit comments

Comments
 (0)