An open API service indexing awesome lists of open source software.

https://github.com/trkotovicz/backend-jr-tech-test


https://github.com/trkotovicz/backend-jr-tech-test

bootstrap clean-code css html javascript reactjs sql

Last synced: 2 months ago
JSON representation

Awesome Lists containing this project

README

          

# Teste Técnico

O teste técnico é constituído em 3 partes:

1. Responder um questionário _(Teste JS PL_SR.pdf)_
2. Refatorar um código _(main.js)_
3. Criar um _marketplace_ em React.js (instruções de como rodar a aplicação na pasta _marketplace_)

## Respostas do questionário

### _1. Qual a saída do algoritmo?_

Ele imprime no console os números primos, dentro de um limite, paginados e ordenados.

Saída

```

Page 1
2|233|547|877
3|239|557|881
5|241|563|883
7|251|569|887
11|257|571|907
13|263|577|911
17|269|587|919
19|271|593|929
23|277|599|937
29|281|601|941
31|283|607|947
37|293|613|953
41|307|617|967
43|311|619|971
47|313|631|977
53|317|641|983
59|331|643|991
61|337|647|997
67|347|653|1009
71|349|659|1013
73|353|661|1019
79|359|673|1021
83|367|677|1031
89|373|683|1033
97|379|691|1039
101|383|701|1049
103|389|709|1051
107|397|719|1061
109|401|727|1063
113|409|733|1069
127|419|739|1087
131|421|743|1091
137|431|751|1093
139|433|757|1097
149|439|761|1103
151|443|769|1109
157|449|773|1117
163|457|787|1123
167|461|797|1129
173|463|809|1151
179|467|811|1153
181|479|821|1163
191|487|823|1171
193|491|827|1181
197|499|829|1187
199|503|839|1193
211|509|853|1201
223|521|857|1213
227|523|859|1217
229|541|863|1223
Page 2
1229|1597|1993|2371
1231|1601|1997|2377
1237|1607|1999|2381
1249|1609|2003|2383
1259|1613|2011|2389
1277|1619|2017|2393
1279|1621|2027|2399
1283|1627|2029|2411
1289|1637|2039|2417
1291|1657|2053|2423
1297|1663|2063|2437
1301|1667|2069|2441
1303|1669|2081|2447
1307|1693|2083|2459
1319|1697|2087|2467
1321|1699|2089|2473
1327|1709|2099|2477
1361|1721|2111|2503
1367|1723|2113|2521
1373|1733|2129|2531
1381|1741|2131|2539
1399|1747|2137|2543
1409|1753|2141|2549
1423|1759|2143|2551
1427|1777|2153|2557
1429|1783|2161|2579
1433|1787|2179|2591
1439|1789|2203|2593
1447|1801|2207|2609
1451|1811|2213|2617
1453|1823|2221|2621
1459|1831|2237|2633
1471|1847|2239|2647
1481|1861|2243|2657
1483|1867|2251|2659
1487|1871|2267|2663
1489|1873|2269|2671
1493|1877|2273|2677
1499|1879|2281|2683
1511|1889|2287|2687
1523|1901|2293|2689
1531|1907|2297|2693
1543|1913|2309|2699
1549|1931|2311|2707
1553|1933|2333|2711
1559|1949|2339|2713
1567|1951|2341|2719
1571|1973|2347|2729
1579|1979|2351|2731
1583|1987|2357|2741
Page 3
2749|3187|3581|4001
2753|3191|3583|4003
2767|3203|3593|4007
2777|3209|3607|4013
2789|3217|3613|4019
2791|3221|3617|4021
2797|3229|3623|4027
2801|3251|3631|4049
2803|3253|3637|4051
2819|3257|3643|4057
2833|3259|3659|4073
2837|3271|3671|4079
2843|3299|3673|4091
2851|3301|3677|4093
2857|3307|3691|4099
2861|3313|3697|4111
2879|3319|3701|4127
2887|3323|3709|4129
2897|3329|3719|4133
2903|3331|3727|4139
2909|3343|3733|4153
2917|3347|3739|4157
2927|3359|3761|4159
2939|3361|3767|4177
2953|3371|3769|4201
2957|3373|3779|4211
2963|3389|3793|4217
2969|3391|3797|4219
2971|3407|3803|4229
2999|3413|3821|4231
3001|3433|3823|4241
3011|3449|3833|4243
3019|3457|3847|4253
3023|3461|3851|4259
3037|3463|3853|4261
3041|3467|3863|4271
3049|3469|3877|4273
3061|3491|3881|4283
3067|3499|3889|4289
3079|3511|3907|4297
3083|3517|3911|4327
3089|3527|3917|4337
3109|3529|3919|4339
3119|3533|3923|4349
3121|3539|3929|4357
3137|3541|3931|4363
3163|3547|3943|4373
3167|3557|3947|4391
3169|3559|3967|4397
3181|3571|3989|4409
Page 4
4421|4861|5281|5701
4423|4871|5297|5711
4441|4877|5303|5717
4447|4889|5309|5737
4451|4903|5323|5741
4457|4909|5333|5743
4463|4919|5347|5749
4481|4931|5351|5779
4483|4933|5381|5783
4493|4937|5387|5791
4507|4943|5393|5801
4513|4951|5399|5807
4517|4957|5407|5813
4519|4967|5413|5821
4523|4969|5417|5827
4547|4973|5419|5839
4549|4987|5431|5843
4561|4993|5437|5849
4567|4999|5441|5851
4583|5003|5443|5857
4591|5009|5449|5861
4597|5011|5471|5867
4603|5021|5477|5869
4621|5023|5479|5879
4637|5039|5483|5881
4639|5051|5501|5897
4643|5059|5503|5903
4649|5077|5507|5923
4651|5081|5519|5927
4657|5087|5521|5939
4663|5099|5527|5953
4673|5101|5531|5981
4679|5107|5557|5987
4691|5113|5563|6007
4703|5119|5569|6011
4721|5147|5573|6029
4723|5153|5581|6037
4729|5167|5591|6043
4733|5171|5623|6047
4751|5179|5639|6053
4759|5189|5641|6067
4783|5197|5647|6073
4787|5209|5651|6079
4789|5227|5653|6089
4793|5231|5657|6091
4799|5233|5659|6101
4801|5237|5669|6113
4813|5261|5683|6121
4817|5273|5689|6131
4831|5279|5693|6133
Page 5
6143|6577|7001|7507
6151|6581|7013|7517
6163|6599|7019|7523
6173|6607|7027|7529
6197|6619|7039|7537
6199|6637|7043|7541
6203|6653|7057|7547
6211|6659|7069|7549
6217|6661|7079|7559
6221|6673|7103|7561
6229|6679|7109|7573
6247|6689|7121|7577
6257|6691|7127|7583
6263|6701|7129|7589
6269|6703|7151|7591
6271|6709|7159|7603
6277|6719|7177|7607
6287|6733|7187|7621
6299|6737|7193|7639
6301|6761|7207|7643
6311|6763|7211|7649
6317|6779|7213|7669
6323|6781|7219|7673
6329|6791|7229|7681
6337|6793|7237|7687
6343|6803|7243|7691
6353|6823|7247|7699
6359|6827|7253|7703
6361|6829|7283|7717
6367|6833|7297|7723
6373|6841|7307|7727
6379|6857|7309|7741
6389|6863|7321|7753
6397|6869|7331|7757
6421|6871|7333|7759
6427|6883|7349|7789
6449|6899|7351|7793
6451|6907|7369|7817
6469|6911|7393|7823
6473|6917|7411|7829
6481|6947|7417|7841
6491|6949|7433|7853
6521|6959|7451|7867
6529|6961|7457|7873
6547|6967|7459|7877
6551|6971|7477|7879
6553|6977|7481|7883
6563|6983|7487|7901
6569|6991|7489|7907
6571|6997|7499|7919

```

### _2. Você julga que este código é limpo? Aponte quais erros o programador cometeu que prejudicaram a qualidade do código. Obs: não existe nenhum bug escondido no código._

Não, o código não é um código limpo. A escolha dos nomes (classe, método e variáveis) não é nada descritiva, não sabemos exatamente o que cada coisa está representando no código. Está sendo definido todas as variáveis como let, até mesmo as que tem um valor constante, quando deveria ser usado const no lugar. O código está em um único bloco, tendo mais de uma responsabilidade num único método: ao mesmo tempo que ele verifica os números primos, ele personaliza e formata a saída. Poderia ter comentários no código, explicando o que está sendo feito, ou uma documentação. Não tem nenhum tipo de tratamento de erro ou validação de entradas.

### _3. Refatore o código do arquivo utilizando conceitos de Clean Code, de maneira que o código se torne mais limpo, legível e de fácil manutenção._

Código refatorado no arquivo _main.js_ na raiz do repositório.

### _4. Explique como o conceito de middlewares no Express.js pode ser utilizado para evitar repetição de código._

Os middlewares no Express.js são blocos de código executados em sequência nas requisições HTTP. Os middlewares ajudam muito a evitar repetições de código quando utilizamos uma mesma lógica para várias rotas, por exemplo os middlewares de autenticação de usuários e de tratamento de erros, implementando um middleware, você o chama nas rotas necessárias, ou globalmente na aplicação. Assim, quando você faz uma requisição HTTP, ele primeiro lê os middlewares (na sequência declarada no código) e depois processa a requisição de fato. Em outras palavras, os middlewares no Express.js permitem escrever um código mais limpo, sem repetição em várias rotas. Outra vantagem de utilizar middlewares é a fácil manutenção, já que você só precisará alterar o código num único lugar.

### _5. Tendo em vista duas abordagens de backend: uma utilizando um ORM (como Prisma e Sequelize) e outra utilizando apenas um query builder (como o Knex), quais as vantagens e desvantagens de cada abordagem?_

**ORM**

Vantagens:
- Abstração bidirecional do banco de dados, mapeando objetos JavaScript para tabelas e vice-versa.
- Aumento da produtividade devido a funções nativas que simplificam consultas sem a necessidade de escrever extenso código SQL.
- Facilita a manutenção do código, adicionando uma camada extra de abstração.
- Adiciona uma camada extra de segurança, ajudando a prevenir ataques como injeção de SQL.

Desvantagens:
- Possível pior desempenho em algumas situações devido à necessidade de traduzir o código em SQL nos bastidores.
- Limitado para consultas muito específicas ou otimizações de desempenho avançadas.

**Query Builder**

Vantagens:
- Controle total sobre as consultas SQL, permitindo consultas personalizadas e otimização de desempenho.
- Mais simples de usar e aprender, especialmente se você já tem conhecimento de SQL.

Desvantagens:
- Requer mais código em comparação com ORMs.
- Exige manutenções manuais, como migrações e mapeamento de objetos.
- Mais vulnerável a ataques, como injeção de SQL, se não for usado com cuidado.

### _6. Faça uma query em SQL que traga em cada linha o nome de jogadores que se enfrentaram mais de duas vezes, onde em cada partida a soma dos pontos foi maior que 30 e a duração do jogo foi maior que 90 minutos. Não pode haver resultados repetidos._

```SQL
SELECT DISTINCT j1.nome AS jogador1 , j2.nome AS jogador2
FROM Partidas p
INNER JOIN Jogador j1 ON p.jogador1_id = j1.id
INNER JOIN Jogador j2 ON p.jogador2_id = j2.id
WHERE (pontos_jogador1 + pontos_jogador2) > 30 AND duracao > 90
GROUP BY j1.nome, j2.nome
HAVING COUNT(*) > 2;
```

### _7. Dado o array no arquivo data.json, crie um interface em React.js, CSS e Bootstrap mostre os itens como se fosse um marketplace de roupas._

Abra a pasta **_marketplace_** para rodar a aplicação. Nela, você encontrará mais detalhes de como fazer isso.

---

Projeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).