{"id":22226362,"url":"https://github.com/trkotovicz/backend-jr-tech-test","last_synced_at":"2026-04-15T08:39:07.971Z","repository":{"id":190730089,"uuid":"683241746","full_name":"trkotovicz/backend-jr-tech-test","owner":"trkotovicz","description":null,"archived":false,"fork":false,"pushed_at":"2023-08-28T01:09:36.000Z","size":2006,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T07:44:05.987Z","etag":null,"topics":["bootstrap","clean-code","css","html","javascript","reactjs","sql"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trkotovicz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-08-26T00:36:55.000Z","updated_at":"2024-01-11T18:02:26.000Z","dependencies_parsed_at":"2023-08-26T04:56:46.751Z","dependency_job_id":"a53dcf07-472b-4e25-9398-908e2bf63c80","html_url":"https://github.com/trkotovicz/backend-jr-tech-test","commit_stats":null,"previous_names":["trkotovicz/backend-jr-tech-test"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fbackend-jr-tech-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fbackend-jr-tech-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fbackend-jr-tech-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fbackend-jr-tech-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trkotovicz","download_url":"https://codeload.github.com/trkotovicz/backend-jr-tech-test/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245425846,"owners_count":20613249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap","clean-code","css","html","javascript","reactjs","sql"],"created_at":"2024-12-03T00:28:19.639Z","updated_at":"2026-04-15T08:39:02.937Z","avatar_url":"https://github.com/trkotovicz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Teste Técnico\n\nO teste técnico é constituído em 3 partes:\n\n 1. Responder um questionário _(Teste JS PL_SR.pdf)_\n 2. Refatorar um código _(main.js)_\n 3. Criar um _marketplace_ em React.js (instruções de como rodar a aplicação na pasta _marketplace_)\n\n\n\n## Respostas do questionário\n\n### _1. Qual a saída do algoritmo?_\n\nEle imprime no console os números primos, dentro de um limite, paginados e ordenados.\n\n\u003cdetails\u003e\n\u003csummary\u003eSaída\u003c/summary\u003e\n\n```\n\nPage  1\n2|233|547|877\n3|239|557|881\n5|241|563|883\n7|251|569|887\n11|257|571|907\n13|263|577|911\n17|269|587|919\n19|271|593|929\n23|277|599|937\n29|281|601|941\n31|283|607|947\n37|293|613|953\n41|307|617|967\n43|311|619|971\n47|313|631|977\n53|317|641|983\n59|331|643|991\n61|337|647|997\n67|347|653|1009\n71|349|659|1013\n73|353|661|1019\n79|359|673|1021\n83|367|677|1031\n89|373|683|1033\n97|379|691|1039\n101|383|701|1049\n103|389|709|1051\n107|397|719|1061\n109|401|727|1063\n113|409|733|1069\n127|419|739|1087\n131|421|743|1091\n137|431|751|1093\n139|433|757|1097\n149|439|761|1103\n151|443|769|1109\n157|449|773|1117\n163|457|787|1123\n167|461|797|1129\n173|463|809|1151\n179|467|811|1153\n181|479|821|1163\n191|487|823|1171\n193|491|827|1181\n197|499|829|1187\n199|503|839|1193\n211|509|853|1201\n223|521|857|1213\n227|523|859|1217\n229|541|863|1223\nPage  2\n1229|1597|1993|2371\n1231|1601|1997|2377\n1237|1607|1999|2381\n1249|1609|2003|2383\n1259|1613|2011|2389\n1277|1619|2017|2393\n1279|1621|2027|2399\n1283|1627|2029|2411\n1289|1637|2039|2417\n1291|1657|2053|2423\n1297|1663|2063|2437\n1301|1667|2069|2441\n1303|1669|2081|2447\n1307|1693|2083|2459\n1319|1697|2087|2467\n1321|1699|2089|2473\n1327|1709|2099|2477\n1361|1721|2111|2503\n1367|1723|2113|2521\n1373|1733|2129|2531\n1381|1741|2131|2539\n1399|1747|2137|2543\n1409|1753|2141|2549\n1423|1759|2143|2551\n1427|1777|2153|2557\n1429|1783|2161|2579\n1433|1787|2179|2591\n1439|1789|2203|2593\n1447|1801|2207|2609\n1451|1811|2213|2617\n1453|1823|2221|2621\n1459|1831|2237|2633\n1471|1847|2239|2647\n1481|1861|2243|2657\n1483|1867|2251|2659\n1487|1871|2267|2663\n1489|1873|2269|2671\n1493|1877|2273|2677\n1499|1879|2281|2683\n1511|1889|2287|2687\n1523|1901|2293|2689\n1531|1907|2297|2693\n1543|1913|2309|2699\n1549|1931|2311|2707\n1553|1933|2333|2711\n1559|1949|2339|2713\n1567|1951|2341|2719\n1571|1973|2347|2729\n1579|1979|2351|2731\n1583|1987|2357|2741\nPage  3\n2749|3187|3581|4001\n2753|3191|3583|4003\n2767|3203|3593|4007\n2777|3209|3607|4013\n2789|3217|3613|4019\n2791|3221|3617|4021\n2797|3229|3623|4027\n2801|3251|3631|4049\n2803|3253|3637|4051\n2819|3257|3643|4057\n2833|3259|3659|4073\n2837|3271|3671|4079\n2843|3299|3673|4091\n2851|3301|3677|4093\n2857|3307|3691|4099\n2861|3313|3697|4111\n2879|3319|3701|4127\n2887|3323|3709|4129\n2897|3329|3719|4133\n2903|3331|3727|4139\n2909|3343|3733|4153\n2917|3347|3739|4157\n2927|3359|3761|4159\n2939|3361|3767|4177\n2953|3371|3769|4201\n2957|3373|3779|4211\n2963|3389|3793|4217\n2969|3391|3797|4219\n2971|3407|3803|4229\n2999|3413|3821|4231\n3001|3433|3823|4241\n3011|3449|3833|4243\n3019|3457|3847|4253\n3023|3461|3851|4259\n3037|3463|3853|4261\n3041|3467|3863|4271\n3049|3469|3877|4273\n3061|3491|3881|4283\n3067|3499|3889|4289\n3079|3511|3907|4297\n3083|3517|3911|4327\n3089|3527|3917|4337\n3109|3529|3919|4339\n3119|3533|3923|4349\n3121|3539|3929|4357\n3137|3541|3931|4363\n3163|3547|3943|4373\n3167|3557|3947|4391\n3169|3559|3967|4397\n3181|3571|3989|4409\nPage  4\n4421|4861|5281|5701\n4423|4871|5297|5711\n4441|4877|5303|5717\n4447|4889|5309|5737\n4451|4903|5323|5741\n4457|4909|5333|5743\n4463|4919|5347|5749\n4481|4931|5351|5779\n4483|4933|5381|5783\n4493|4937|5387|5791\n4507|4943|5393|5801\n4513|4951|5399|5807\n4517|4957|5407|5813\n4519|4967|5413|5821\n4523|4969|5417|5827\n4547|4973|5419|5839\n4549|4987|5431|5843\n4561|4993|5437|5849\n4567|4999|5441|5851\n4583|5003|5443|5857\n4591|5009|5449|5861\n4597|5011|5471|5867\n4603|5021|5477|5869\n4621|5023|5479|5879\n4637|5039|5483|5881\n4639|5051|5501|5897\n4643|5059|5503|5903\n4649|5077|5507|5923\n4651|5081|5519|5927\n4657|5087|5521|5939\n4663|5099|5527|5953\n4673|5101|5531|5981\n4679|5107|5557|5987\n4691|5113|5563|6007\n4703|5119|5569|6011\n4721|5147|5573|6029\n4723|5153|5581|6037\n4729|5167|5591|6043\n4733|5171|5623|6047\n4751|5179|5639|6053\n4759|5189|5641|6067\n4783|5197|5647|6073\n4787|5209|5651|6079\n4789|5227|5653|6089\n4793|5231|5657|6091\n4799|5233|5659|6101\n4801|5237|5669|6113\n4813|5261|5683|6121\n4817|5273|5689|6131\n4831|5279|5693|6133\nPage  5\n6143|6577|7001|7507\n6151|6581|7013|7517\n6163|6599|7019|7523\n6173|6607|7027|7529\n6197|6619|7039|7537\n6199|6637|7043|7541\n6203|6653|7057|7547\n6211|6659|7069|7549\n6217|6661|7079|7559\n6221|6673|7103|7561\n6229|6679|7109|7573\n6247|6689|7121|7577\n6257|6691|7127|7583\n6263|6701|7129|7589\n6269|6703|7151|7591\n6271|6709|7159|7603\n6277|6719|7177|7607\n6287|6733|7187|7621\n6299|6737|7193|7639\n6301|6761|7207|7643\n6311|6763|7211|7649\n6317|6779|7213|7669\n6323|6781|7219|7673\n6329|6791|7229|7681\n6337|6793|7237|7687\n6343|6803|7243|7691\n6353|6823|7247|7699\n6359|6827|7253|7703\n6361|6829|7283|7717\n6367|6833|7297|7723\n6373|6841|7307|7727\n6379|6857|7309|7741\n6389|6863|7321|7753\n6397|6869|7331|7757\n6421|6871|7333|7759\n6427|6883|7349|7789\n6449|6899|7351|7793\n6451|6907|7369|7817\n6469|6911|7393|7823\n6473|6917|7411|7829\n6481|6947|7417|7841\n6491|6949|7433|7853\n6521|6959|7451|7867\n6529|6961|7457|7873\n6547|6967|7459|7877\n6551|6971|7477|7879\n6553|6977|7481|7883\n6563|6983|7487|7901\n6569|6991|7489|7907\n6571|6997|7499|7919\n\n```\n\u003c/details\u003e\n\n\n### _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\nNã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.\n\n### _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._\n\nCódigo refatorado no arquivo _main.js_ na raiz do repositório.\n\n### _4. Explique como o conceito de middlewares no Express.js pode ser utilizado para evitar repetição de código._\n\nOs 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.\n\n### _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?_\n\n**ORM**\n\nVantagens:\n- Abstração bidirecional do banco de dados, mapeando objetos JavaScript para tabelas e vice-versa.\n- Aumento da produtividade devido a funções nativas que simplificam consultas sem a necessidade de escrever extenso código SQL.\n- Facilita a manutenção do código, adicionando uma camada extra de abstração.\n- Adiciona uma camada extra de segurança, ajudando a prevenir ataques como injeção de SQL.\n\nDesvantagens:\n- Possível pior desempenho em algumas situações devido à necessidade de traduzir o código em SQL nos bastidores.\n- Limitado para consultas muito específicas ou otimizações de desempenho avançadas.\n\n**Query Builder**\n\nVantagens:\n- Controle total sobre as consultas SQL, permitindo consultas personalizadas e otimização de desempenho.\n- Mais simples de usar e aprender, especialmente se você já tem conhecimento de SQL.\n\nDesvantagens:\n- Requer mais código em comparação com ORMs.\n- Exige manutenções manuais, como migrações e mapeamento de objetos.\n- Mais vulnerável a ataques, como injeção de SQL, se não for usado com cuidado.\n\n### _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._\n\n```SQL\nSELECT DISTINCT  j1.nome  AS jogador1 , j2.nome  AS jogador2\n\tFROM Partidas p\n\tINNER JOIN Jogador j1 ON  p.jogador1_id  =  j1.id\n\tINNER JOIN Jogador j2 ON  p.jogador2_id  =  j2.id\n\tWHERE (pontos_jogador1 + pontos_jogador2) \u003e  30  AND duracao \u003e  90\n\tGROUP BY  j1.nome, j2.nome\n\tHAVING  COUNT(*) \u003e  2;\n```\n\n### _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._\n\nAbra a pasta **_marketplace_** para rodar a aplicação. Nela, você encontrará mais detalhes de como fazer isso.\n\n ---\n\nProjeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).\n\u003c/br\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fbackend-jr-tech-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrkotovicz%2Fbackend-jr-tech-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fbackend-jr-tech-test/lists"}