Skip to content

Commit b7b8a28

Browse files
committedOct 16, 2023
Merge remote-tracking branch 'origin/master'
# Conflicts: # src/main/java/com/example/App.java
2 parents 1112890 + 01b0fb0 commit b7b8a28

10 files changed

+10329
-8
lines changed
 

‎.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
.env
2+
random.sql
23

34
# Log file
45
*.log
56

7+
node_modules/
68
target/
79
out/
810
bin/

‎.gitpod.Dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
FROM gitpod/workspace-postgres
22
USER gitpod
3-
RUN bash -c ". ~/.sdkman/bin/sdkman-init.sh && \
4-
sdk install java 17.0.7-amzn && \
5-
sdk default java 17.0.7-amzn"
3+
RUN bash -c "chmod +x ~/.sdkman/bin/sdkman-init.sh && . ~/.sdkman/bin/sdkman-init.sh && sdk install java 17.0.7-amzn && sdk default java 17.0.7-amzn"
4+
RUN bash -c "echo '. ~/.sdkman/bin/sdkman-init.sh' >> ~/.zshrc"

‎.gitpod.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,8 @@ vscode:
66
extensions:
77
- cweijan.vscode-mysql-client2
88
- vscjava.vscode-java-pack
9+
- redhat.java
10+
- vscjava.vscode-java-debug
11+
- vscjava.vscode-java-dependency
12+
- vscjava.vscode-java-test
13+
- vscjava.vscode-maven

‎.vscode/settings.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"java.jdt.ls.java.home": "~/.sdkman/candidates/java/current",
3+
"java.inlayHints.parameterNames.enabled": "none",
34
"maven.terminal.useJavaHome": true,
45
"java.completion.favoriteStaticMembers": [
56
"org.junit.Assert.*",
@@ -13,5 +14,6 @@
1314
"org.mockito.Answers.*"
1415
],
1516
"maven.executable.preferMavenWrapper": false,
16-
"terminal.integrated.defaultProfile.linux": "zsh"
17-
}
17+
"terminal.integrated.defaultProfile.linux": "zsh",
18+
"java.configuration.updateBuildConfiguration": "automatic"
19+
}

‎README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
## Postgres Playground
1+
## Postgres e Java Playground
22

3-
[![](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/manoelcampos/postgres-playground)
3+
[![](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/manoelcampos/java-postgres-playground)
44

5+
> **Warning**
6+
> - O gitpod.io não funciona se você tiver a extensão do tradutor habilitada no seu navegador.
7+
> - O endereço do repositório no GitHub a ser incluído no endereço do gitpod deve obrigatoriamente ser https
58
69
Clique no botão acima para abrir o projeto no [GitPod](https://gitpod.io)
710
contendo um servidor Postgres, um VS Code e uma extensão para administração

‎comandos-git.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# 1. Você recebeu um projeto em um repositório git local, mas SEM um endereço remoto (acho pouco provável)
2+
3+
```
4+
# A. Pode fazer todos os comandos só no final da prova
5+
git remote add origin URL_REPOSITORIO_REMOTO
6+
7+
# B. Adicionar todos os arquivos no repositório git local
8+
git add .
9+
10+
# C. Confirmar as alteracoes no repositório local
11+
# O comando pode dar erro, pedindo pra configurar nome e email. É só seguir as instruções e tentar novamente.
12+
git commit -m "Alteracoes"
13+
14+
# D. Enviar as alterações pro repositório remoto
15+
# Depois de executar, ele pode pedir pra executar o comando de uma forma diferente. É só copiar e colar como ele mostrar
16+
git push
17+
```
18+
19+
# 2. Você recebeu um projeto em um repositório git local já com o endereço do repositório remoto
20+
21+
Execute todos os passos, a partir do B (pode fazer todos os comandos só no final da prova).
22+
23+
# 3. Você NÃO recebeu um projeto em um repositório git local na máquina da prova e tem que baixar
24+
25+
## 3.1 Fazer no início da prova
26+
```
27+
# Baixar o projeto pra máquina local no início da prova
28+
# O comando cria uma pasta com o nome que aparece no final da URL e já configura o remote
29+
git clone URL_REPOSITORIO_REMOTO
30+
```
31+
32+
## 3.2 Fazer no final da prova
33+
34+
Execute todos os passos, a partir do B (estes pode fazer só no final da prova).
35+
36+
# 4. Você tem que criar um projeto e repositório git do zero (acho improvável)
37+
38+
## 4.1 Fazer no início da prova
39+
40+
```
41+
# Criar uma pasta para o projeto
42+
43+
# Abrir a pasta no editor/IDE que fornecerem (no VSCode é File >> Open Folder)
44+
45+
# Abrir um terminal, que já deve vir dentro da pasta do projeto que vc abriu
46+
47+
# Criar um repositório local
48+
git init
49+
```
50+
51+
## 4.2 Fazer no final da prova
52+
53+
Executar todos os passos, a partir do A

‎dados.sql

Lines changed: 9999 additions & 1 deletion
Large diffs are not rendered by default.

‎gerar-dados/index.js

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
const { faker } = require('@faker-js/faker');
2+
3+
const lojas = 20, produtos = 200, vendas = 1000
4+
5+
function formatInsert(tableName, columns, values) {
6+
const newValues = values.map(val => {
7+
if(typeof val !== 'string')
8+
return val
9+
10+
const quotes = val.startsWith("'")
11+
val = val.replaceAll("'", "")
12+
return quotes ? `'${val}'` : val
13+
})
14+
15+
return `INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${newValues.join(', ')});`;
16+
}
17+
18+
function generateClienteInserts(numInserts) {
19+
const inserts = [];
20+
21+
for (let i = 0; i < numInserts; i++) {
22+
const nome = faker.person.fullName();
23+
const cpf = faker.number.bigInt({ min: 10000000000, max: 99999999999 });
24+
const cidade_id = faker.number.int({ min: 1, max: 5564 });
25+
const data_nascimento = faker.date.birthdate().toISOString().split('T')[0];
26+
27+
const insert = formatInsert('cliente', ['nome', 'cpf', 'cidade_id', 'data_nascimento'], [
28+
`'${nome}'`,
29+
`'${cpf}'`,
30+
cidade_id,
31+
`'${data_nascimento}'`
32+
]);
33+
34+
inserts.push(insert);
35+
}
36+
37+
return inserts;
38+
}
39+
40+
function generateLojaInserts() {
41+
const inserts = [];
42+
43+
for (let i = 0; i < lojas; i++) {
44+
const cidade_id = faker.number.int({ min: 1, max: 5564 });
45+
const data_inauguracao = faker.date.birthdate().toISOString().split('T')[0];
46+
47+
const insert = formatInsert('loja', ['cidade_id', 'data_inauguracao'], [
48+
cidade_id,
49+
`'${data_inauguracao}'`
50+
]);
51+
52+
inserts.push(insert);
53+
}
54+
55+
return inserts;
56+
}
57+
58+
function generateFuncionarioInserts(numInserts) {
59+
const inserts = [];
60+
61+
for (let i = 0; i < numInserts; i++) {
62+
const nome = faker.person.fullName();
63+
const cpf = faker.number.int({ min: 10000000000, max: 99999999999 });
64+
const loja_id = faker.number.int({ min: 1, max: lojas });
65+
const data_nascimento = faker.date.birthdate().toISOString().split('T')[0];
66+
67+
const insert = formatInsert('funcionario', ['nome', 'cpf', 'loja_id', 'data_nascimento'], [
68+
`'${nome}'`,
69+
`'${cpf}'`,
70+
loja_id,
71+
`'${data_nascimento}'`
72+
]);
73+
74+
inserts.push(insert);
75+
}
76+
77+
return inserts;
78+
}
79+
80+
function generateMarcaInserts(numInserts) {
81+
const inserts = [];
82+
83+
for (let i = 0; i < numInserts; i++) {
84+
const nome = faker.company.name();
85+
86+
const insert = formatInsert('marca', ['nome'], [`'${nome}'`]);
87+
inserts.push(insert);
88+
}
89+
90+
return inserts;
91+
}
92+
93+
function generateProdutoInserts() {
94+
const inserts = [];
95+
96+
for (let i = 0; i < produtos; i++) {
97+
const nome = faker.commerce.productName();
98+
const marca_id = faker.number.int({ min: 1, max: 5 });
99+
const valor = faker.number.int({ min: 10, max: 1000 });
100+
101+
const insert = formatInsert('produto', ['nome', 'marca_id', 'valor'], [
102+
`'${nome}'`,
103+
marca_id,
104+
valor
105+
]);
106+
107+
inserts.push(insert);
108+
}
109+
110+
return inserts;
111+
}
112+
113+
function generateEstoqueInserts() {
114+
const inserts = [];
115+
const quant = 10000;
116+
117+
for (let loja_id = 1; loja_id <= lojas; loja_id++) {
118+
for (let produto_id = 1; produto_id <= produtos; produto_id++) {
119+
const insert = formatInsert('estoque', ['produto_id', 'loja_id', 'quant'], [
120+
produto_id,
121+
loja_id,
122+
quant
123+
]);
124+
125+
inserts.push(insert);
126+
}
127+
}
128+
129+
return inserts;
130+
}
131+
132+
function generateVendaInserts() {
133+
const inserts = [];
134+
135+
for (let i = 0; i < vendas; i++) {
136+
const loja_id = faker.number.int({ min: 1, max: 10 });
137+
const cliente_id = faker.number.int({ min: 1, max: 100 });
138+
const funcionario_id = faker.number.int({ min: 1, max: 50 });
139+
140+
const insert = formatInsert('venda', ['loja_id', 'cliente_id', 'funcionario_id'], [
141+
loja_id,
142+
cliente_id,
143+
funcionario_id
144+
]);
145+
146+
inserts.push(insert);
147+
}
148+
149+
return inserts;
150+
}
151+
152+
function generateItemVendaInserts() {
153+
const inserts = [];
154+
155+
for (let venda_id = 1; venda_id <= vendas; venda_id++) {
156+
const totalItens = faker.number.int({ min: 1, max: 8 });
157+
const produtoIdSet = new Set()
158+
for (let i = 1; i <= totalItens; i++) {
159+
const produto_id = faker.number.int({ min: 1, max: produtos });
160+
produtoIdSet.add(produto_id)
161+
}
162+
163+
produtoIdSet.forEach(produto_id => {
164+
const quant = faker.number.int({ min: 1, max: 10 });
165+
const valor = faker.number.int({ min: 10, max: 100 });
166+
167+
const insert = formatInsert('item_venda', ['venda_id', 'produto_id', 'quant', 'valor'], [
168+
venda_id,
169+
produto_id,
170+
quant,
171+
valor
172+
]);
173+
174+
inserts.push(insert);
175+
})
176+
}
177+
178+
return inserts;
179+
}
180+
181+
const clienteInserts = generateClienteInserts(100);
182+
const lojaInserts = generateLojaInserts();
183+
const funcionarioInserts = generateFuncionarioInserts(50);
184+
const marcaInserts = generateMarcaInserts(40);
185+
const produtoInserts = generateProdutoInserts();
186+
const estoqueInserts = generateEstoqueInserts();
187+
const vendaInserts = generateVendaInserts();
188+
const itemVendaInserts = generateItemVendaInserts();
189+
190+
// Imprimir os inserts gerados
191+
console.log('');
192+
clienteInserts.forEach(insert => console.log(insert));
193+
194+
console.log('');
195+
lojaInserts.forEach(insert => console.log(insert));
196+
197+
console.log('');
198+
funcionarioInserts.forEach(insert => console.log(insert));
199+
200+
console.log('');
201+
marcaInserts.forEach(insert => console.log(insert));
202+
203+
console.log('');
204+
produtoInserts.forEach(insert => console.log(insert));
205+
206+
console.log('');
207+
estoqueInserts.forEach(insert => console.log(insert));
208+
209+
console.log('');
210+
vendaInserts.forEach(insert => console.log(insert));
211+
212+
console.log('');
213+
itemVendaInserts.forEach(insert => console.log(insert));

‎gerar-dados/package-lock.json

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎gerar-dados/package.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "gerar-dados",
3+
"version": "1.0.0",
4+
"description": "Gerador de dados aleatórios usando https://fakerjs.dev",
5+
"main": "index.js",
6+
"scripts": {
7+
"start": "node index.js"
8+
},
9+
"keywords": [],
10+
"author": "Manoel Campos da Silva Filho",
11+
"license": "ISC",
12+
"dependencies": {
13+
"@faker-js/faker": "^8.0.2"
14+
}
15+
}

0 commit comments

Comments
 (0)
Please sign in to comment.