├── .gitignore ├── authentication ├── SOLUTIONS.md └── PROBLEM.md ├── .github └── workflows │ ├── auto-assign.yml │ └── validate-links.yml ├── README.md ├── LICENSE ├── points-of-interest ├── SOLUTIONS.md └── PROBLEM.md ├── url-shortener ├── PROBLEM.md └── SOLUTIONS.md ├── secure-password ├── PROBLEM.md └── SOLUTIONS.md ├── cryptography ├── PROBLEM.md └── SOLUTIONS.md ├── CONTRIBUTING.md ├── loans ├── SOLUTIONS.md └── PROBLEM.md └── CODE_OF_CONDUCT.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vs/ 3 | -------------------------------------------------------------------------------- /authentication/SOLUTIONS.md: -------------------------------------------------------------------------------- 1 | # Soluções - Autenticação 2 | 3 | Neste tópico, você encontrará uma lista de soluções para o desafio [autenticação](PROBLEM.md). 4 | 5 | | Linguagem | Repositório | 6 | |:-------------|:--------------------------------------------------| 7 | | `C#` | https://github.com/renan-arth/authentication | 8 | | `Java` | https://github.com/MoDasby/desafio-autenticacao | 9 | | `Ruby` | https://github.com/b-sep/authentication | 10 | | `Python` | https://github.com/BrunoBorelliPro/authentication | 11 | | `JavaScript` | https://github.com/meiotera/authentication-node | 12 | -------------------------------------------------------------------------------- /.github/workflows/auto-assign.yml: -------------------------------------------------------------------------------- 1 | name: Auto assign issues and pull requests 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | pull_request: 8 | types: 9 | - opened 10 | 11 | jobs: 12 | run: 13 | runs-on: ubuntu-latest 14 | permissions: 15 | issues: write 16 | pull-requests: write 17 | steps: 18 | - name: Assign issues and pull requests 19 | uses: gustavofreze/auto-assign@1.1.4 20 | with: 21 | assignees: '${{ secrets.ASSIGNEES }}' 22 | github_token: '${{ secrets.GITHUB_TOKEN }}' 23 | allow_self_assign: 'true' 24 | allow_no_assignees: 'true' 25 | assignment_options: 'ISSUE' -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | BackEndBR 5 |

6 | 7 | # Desafios 8 | 9 | Aqui, você encontrará uma coleção de desafios projetados para aprimorar suas habilidades de programação com foco em 10 | backend. 11 | 12 | ## Comece a solucionar 13 | 14 | - [Criptografia](cryptography/PROBLEM.md) 15 | - [Autenticação](authentication/PROBLEM.md) 16 | - [Empréstimos](loans/PROBLEM.md) 17 | - [Senha segura](secure-password/PROBLEM.md) 18 | - [Encurtador de URLs](url-shortener/PROBLEM.md) 19 | - [Pontos de Interesse por GPS](points-of-interest/PROBLEM.md) 20 | 21 | ## Licença 22 | 23 | Licenciado sob [MIT](LICENSE). 24 | 25 | ## Contribuindo 26 | 27 | Siga as [diretrizes de contribuição](CONTRIBUTING.md) para contribuir com o projeto. 28 | -------------------------------------------------------------------------------- /.github/workflows/validate-links.yml: -------------------------------------------------------------------------------- 1 | name: Validate links 2 | 3 | on: 4 | pull_request: null 5 | schedule: 6 | - cron: 0 0 * * * 7 | workflow_dispatch: 8 | 9 | jobs: 10 | link-checker: 11 | runs-on: ubuntu-latest 12 | permissions: 13 | issues: write 14 | contents: read 15 | steps: 16 | - uses: actions/checkout@v4 17 | - name: Check links 18 | id: lychee 19 | uses: lycheeverse/lychee-action@v2.2.0 20 | - name: Create issue 21 | if: env.lychee_exit_code != 0 22 | uses: peter-evans/create-issue-from-file@v4 23 | with: 24 | title: Link checker report 25 | labels: 'report, automated-issue' 26 | content-filepath: ./lychee/out.md 27 | - name: Assign issues and pull requests 28 | if: env.lychee_exit_code != 0 29 | uses: gustavofreze/auto-assign@1.1.4 30 | with: 31 | assignees: '${{ secrets.ASSIGNEES }}' 32 | github_token: '${{ secrets.GITHUB_TOKEN }}' 33 | allow_self_assign: 'true' 34 | allow_no_assignees: 'true' 35 | assignment_options: 'ISSUE' -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018-2025 Back-End Brasil 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /points-of-interest/SOLUTIONS.md: -------------------------------------------------------------------------------- 1 | # Soluções - Pontos de Interesse por GPS 2 | 3 | Neste tópico, você encontrará uma lista de soluções para o desafio [Pontos de Interesse por GPS](PROBLEM.md). 4 | 5 | | Linguagem | Repositório | 6 | |:-------------|:--------------------------------------------------------------------------------------| 7 | | `Go` | https://github.com/lincolngondin/points-of-interest | 8 | | `C#` | https://github.com/LucasBaitz/csharp-points-of-interest | 9 | | `PHP` | https://github.com/gustavofreze/points-of-interest | 10 | | `Java` | https://github.com/andre-xizto/points-of-interest | 11 | | `Java` | https://github.com/eliasmarts/pontos-interesse-GPS | 12 | | `Java` | https://github.com/buildrun-tech/buildrun-desafio-backend-points-of-interest-solution | 13 | | `Java` | https://github.com/carlinhoshk/points-of-interest | 14 | | `TypeScript` | https://github.com/viniciuscosmome/points-of-interest | 15 | -------------------------------------------------------------------------------- /url-shortener/PROBLEM.md: -------------------------------------------------------------------------------- 1 | # Encurtador de URLs 2 | 3 | O seu desafio será implementar um serviço que permite encurtar URLs longas para torná-las mais compactas e fáceis de 4 | compartilhar. 5 | 6 | ## Exemplo 7 | 8 | O seu serviço recebe uma chamada para encurtar uma URL. 9 | 10 | **[POST]** `{{host}}/shorten-url` 11 | 12 | ```json 13 | { 14 | "url": "https://backendbrasil.com.br" 15 | } 16 | ``` 17 | 18 | E retorna um JSON com a URL encurtada: 19 | 20 | ``` 21 | HTTP/1.1 200 OK 22 | ``` 23 | 24 | ```json 25 | { 26 | "url": "https://xxx.com/DXB6V" 27 | } 28 | ``` 29 | 30 | ## Requisitos 31 | 32 | - O encurtador de URLs recebe uma URL longa como parâmetro inicial. 33 | - O encurtamento será composto por um mínimo de 05 e um máximo de 10 caracteres. 34 | - Apenas letras e números são permitidos no encurtamento. 35 | - A URL encurtada será salva no banco de dados com um prazo de validade (você pode escolher a duração desejada). 36 | - Ao receber uma chamada para a URL encurtada `https://xxx.com/DXB6V`, você deve fazer o redirecionamento para a 37 | URL original salva no banco de dados. Caso a URL não seja encontrada no banco, retorne o código de 38 | status `HTTP 404 (Not Found)`. 39 | 40 | ## Soluções 41 | 42 | Neste [tópico](SOLUTIONS.md), você encontrará soluções para esse desafio, feitas por outros membros da comunidade. 43 | -------------------------------------------------------------------------------- /secure-password/PROBLEM.md: -------------------------------------------------------------------------------- 1 | # Senha segura 2 | 3 | O seu desafio será implementar um serviço que valide se uma senha é considerada segura com base em critérios 4 | pré-definidos. 5 | 6 | ## Exemplo 7 | 8 | O seu serviço recebe uma chamada para validar uma senha. 9 | 10 | **[POST]** `{{host}}/validate-password` 11 | 12 | ```json 13 | { 14 | "password": "vYQIYxO&p$yfI^r" 15 | } 16 | ``` 17 | 18 | Se a senha atender a todos os critérios de segurança, então, seu serviço deve retornar uma resposta de sucesso. 19 | 20 | ``` 21 | HTTP/1.1 204 NoContent 22 | ``` 23 | 24 | Caso contrário, retorne uma mensagem informando quais critérios não foram atendidos. Você pode escolher como será sua 25 | estrutura para as mensagens de erro. 26 | 27 | ``` 28 | HTTP/1.1 400 Bad Request 29 | ``` 30 | 31 | ```json 32 | { 33 | ... 34 | } 35 | ``` 36 | 37 | ## Requisitos 38 | 39 | - Verificar se a senha possui pelo menos 08 caracteres. 40 | - Verificar se a senha contém pelo menos uma letra maiúscula. 41 | - Verificar se a senha contém pelo menos uma letra minúscula. 42 | - Verificar se a senha contém pelo menos um dígito numérico. 43 | - Verificar se a senha contém pelo menos um character especial (e.g, !@#$%). 44 | 45 | ## Soluções 46 | 47 | Neste [tópico](SOLUTIONS.md), você encontrará soluções para esse desafio, feitas por outros membros da comunidade. 48 | -------------------------------------------------------------------------------- /secure-password/SOLUTIONS.md: -------------------------------------------------------------------------------- 1 | # Soluções - Senha segura 2 | 3 | Neste tópico, você encontrará uma lista de soluções para o desafio [Senha segura](PROBLEM.md). 4 | 5 | | Linguagem | Repositório | 6 | |:-------------|:-----------------------------------------------------------------------------------| 7 | | `C#` | https://github.com/LucasBaitz/csharp-secure-password | 8 | | `Go` | https://github.com/RianNegreiros/secure-password | 9 | | `Go` | https://github.com/rlevidev/securepassword-go | 10 | | `Php` | https://github.com/Daniel-P-Lima/secure-password | 11 | | `Java` | https://github.com/andre-xizto/senha-segura | 12 | | `Java` | https://github.com/roarena/secure-password | 13 | | `Java` | https://github.com/buildrun-tech/buildrun-desafio-backend-secure-password-solution | 14 | | `Java` | https://github.com/gustavorsmedina/challenge-secure-password | 15 | | `NodeJS` | https://github.com/EllyanF/password-validation | 16 | | `Typescript` | https://github.com/7Cass/secure-password-challenge | 17 | | `Typescript` | https://github.com/JuanLucca846/secure-password-api | 18 | -------------------------------------------------------------------------------- /authentication/PROBLEM.md: -------------------------------------------------------------------------------- 1 | # Autenticação 2 | 3 | O seu desafio será implementar um serviço que valide um token de acesso recebido no header da requisição HTTP. 4 | 5 | ## Exemplo 6 | 7 | O seu serviço recebe uma chamada no endpoint abaixo. 8 | 9 | **[GET]** `{{host}}/foo-bar` 10 | 11 | | Parâmetro | Tipo | Chave | Valor | 12 | |:---------:|:------:|---------------|:---------------------------------| 13 | | `header` | string | Authorization | Seu token. e.g (`vYQIYxOpyfr==`) | 14 | 15 | Se o token enviado no header `Authorization` for válido, então, uma resposta de sucesso deve ser retornada. 16 | 17 | ``` 18 | HTTP/1.1 204 NoContent 19 | ``` 20 | 21 | Se o token for inválido, o seu serviço deve retornar uma mensagem de erro, indicando que o token é inválido. A 22 | estrutura da mensagem de erro pode ser definida por você, mas deve conter informações claras sobre o problema. 23 | 24 | ``` 25 | HTTP/1.1 401 Unauthorized 26 | ``` 27 | 28 | ```json 29 | { 30 | ... 31 | } 32 | ``` 33 | 34 | ## Requisitos 35 | 36 | - Deve ser criado um serviço para a validação do token. Implementar uma lógica concreta de validação é opcional, 37 | podendo ser utilizado um mock para este fim. 38 | - Deve ser implementada uma forma de interceptar a requisição e validar o token antes que ela chegue ao seu controlador. 39 | - A implementação deve ser feita de maneira que continue a funcionar corretamente após a adição de novos endpoints. 40 | 41 | ## Soluções 42 | 43 | Neste [tópico](SOLUTIONS.md), você encontrará soluções para esse desafio, feitas por outros membros da comunidade. 44 | -------------------------------------------------------------------------------- /cryptography/PROBLEM.md: -------------------------------------------------------------------------------- 1 | # Criptografia 2 | 3 | O seu desafio será implementar a criptografia num serviço de forma transparente para a API e para as camadas de 4 | serviço da sua aplicação. O objetivo é garantir que os campos sensíveis dos objetos de entidade não sejam visíveis 5 | diretamente, realizando a criptografia em tempo de execução durante a conversão da entidade para a coluna correspondente 6 | no banco de dados, e vice-versa. 7 | 8 | ## Exemplo 9 | 10 | Considere os campos `userDocument` e `creditCardToken` como campos sensíveis que devem ser criptografados. A tabela de 11 | exemplo seria a seguinte: 12 | 13 | | id | userDocument | creditCardToken | value | 14 | |:---|:-----------------|:----------------|:------| 15 | | 1 | MzYxNDA3ODE4MzM= | YWJjMTIz | 5999 | 16 | | 2 | MzI5NDU0MTA1ODM= | eHl6NDU2 | 1000 | 17 | | 3 | NzYwNzc0NTIzODY= | Nzg5eHB0bw== | 1500 | 18 | 19 | A estrutura da entidade correspondente seria a seguinte: 20 | 21 | | Campo | Tipo | 22 | |:----------------|:-------| 23 | | id | Long | 24 | | userDocument | String | 25 | | creditCardToken | String | 26 | | value | Long | 27 | 28 | ## Requisitos 29 | 30 | - Implemente um CRUD simples considerando os campos mencionados acima como sensíveis. 31 | - Utilize um algoritmo de criptografia simétrica ou assimétrica da sua preferência.
32 |
33 | 34 | Sugestões: 35 |
36 | [AES](https://pt.wikipedia.org/wiki/Advanced_Encryption_Standard) para criptografia simétrica ou 37 | [RSA](https://en.wikipedia.org/wiki/PBKDF2) para criptografia assimétrica. 38 | 39 | ## Soluções 40 | 41 | Neste [tópico](SOLUTIONS.md), você encontrará soluções para esse desafio, feitas por outros membros da comunidade. 42 | -------------------------------------------------------------------------------- /points-of-interest/PROBLEM.md: -------------------------------------------------------------------------------- 1 | # Pontos de Interesse por GPS 2 | 3 | O seu desafio será implementar um serviço para a empresa XY Inc., especializada na produção de excelentes receptores 4 | GPS (Global Positioning System). 5 | A diretoria está empenhada em lançar um dispositivo inovador que promete auxiliar pessoas na localização de pontos de 6 | interesse (POIs), e precisa muito da sua ajuda. 7 | Você foi contratado para desenvolver a plataforma que fornecerá toda a inteligência ao dispositivo. Esta plataforma deve 8 | ser baseada em serviços REST, para flexibilizar a integração. 9 | 10 | ## Exemplo 11 | 12 | Considere a seguinte base de dados de POIs: 13 | 14 | - 'Lanchonete' (x=27, y=12) 15 | - 'Posto' (x=31, y=18) 16 | - 'Joalheria' (x=15, y=12) 17 | - 'Floricultura' (x=19, y=21) 18 | - 'Pub' (x=12, y=8) 19 | - 'Supermercado' (x=23, y=6) 20 | - 'Churrascaria' (x=28, y=2) 21 | 22 | Dado o ponto de referência (x=20, y=10) indicado pelo receptor GPS, e uma distância máxima de 10 metros, o serviço deve 23 | retornar os seguintes POIs: 24 | 25 | - Lanchonete 26 | - Joalheria 27 | - Pub 28 | - Supermercado 29 | 30 | ## Requisitos 31 | 32 | - Cadastrar pontos de interesse, com 03 atributos: nome do POI, coordenada X (inteiro não negativo) 33 | e coordenada Y (inteiro não negativo). 34 | - Os POIs devem ser armazenados numa base de dados. 35 | - Listar todos os POIs cadastrados. 36 | - Listar os POIs por proximidade. Este serviço receberá uma coordenada X e uma coordenada Y, especificando um ponto de 37 | referência, bem como uma distância máxima (d-max) em metros. O serviço deverá retornar todos os POIs da base de dados 38 | que estejam a uma distância menor ou igual a d-max a partir do ponto de referência. 39 | 40 | ## Soluções 41 | 42 | Neste [tópico](SOLUTIONS.md), você encontrará soluções para esse desafio, feitas por outros membros da comunidade. 43 | -------------------------------------------------------------------------------- /cryptography/SOLUTIONS.md: -------------------------------------------------------------------------------- 1 | # Soluções - Criptografia 2 | 3 | Neste tópico, você encontrará uma lista de soluções para o desafio [Criptografia](PROBLEM.md). 4 | 5 | | Linguagem | Repositório | 6 | |:----------|:--------------------------------------------------------------------------------| 7 | | `Go` | https://github.com/Davi-Arauj/criptografia | 8 | | `Go` | https://github.com/lincolngondin/desafio-criptografia | 9 | | `C#` | https://github.com/louresb/CryptographyAPI | 10 | | `C#` | https://github.com/LucasBaitz/csharp-cryptography-service | 11 | | `Java` | https://github.com/Kauan-Code19/desafioCriptografia | 12 | | `Java` | https://github.com/Icarolmo/DesafioBackend_Criptografia | 13 | | `Java` | https://github.com/Jvnyor/cryptography-challenge | 14 | | `Java` | https://github.com/Krygz/BackEndBr-cryptography | 15 | | `Java` | https://github.com/buildrun-tech/buildrun-desafio-backend-cryptography-solution | 16 | | `Java` | https://github.com/gustavorsmedina/challenge-cryptography | 17 | | `Java` | https://github.com/deiz0n/desafio-backend-criptografia | 18 | | `Java` | https://github.com/FakeKus/Cryptography-Java | 19 | | `Ruby` | https://github.com/oransje/desafio-backend-br-criptografia | 20 | | `Ruby` | https://github.com/b-sep/cripto | 21 | | `NodeJS` | https://github.com/rof20004/api-criptografia | 22 | | `NodeJS` | https://github.com/rms-diego/desafio-2-backend-br | 23 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribuindo 2 | 3 | * [Overview](#overview) 4 | * [Como posso contribuir?](#contributing) 5 | - [Sugerindo um novo desafio](#problem) 6 | - [Adicionando uma solução de desafio](#solution) 7 | 8 |
9 | 10 | ## Overview 11 | 12 | Obrigado por investir seu tempo em contribuir para o projeto. 13 | 14 | Estas são as principais diretrizes, use seu bom senso e sinta-se à vontade para propor alterações a este documento em 15 | um pull request. 16 | 17 |
18 | 19 | ## Como posso contribuir? 20 | 21 | Esta seção orienta você as possíveis maneiras de contribuir. 22 | 23 |
24 | 25 | ### Sugerindo um novo desafio 26 | 27 | A ideia é criar uma lista de desafios relevantes para o mercado, focando em problemas e soluções práticas, em vez de se 28 | concentrar em implementações de ordenação em estruturas de dados ou sequências de Fibonacci, que já são 29 | encontrados em diversos sites, como o [HackerRank](https://www.hackerrank.com), [CodeSignal](https://codesignal.com) e 30 | outros. 31 | 32 | Para iniciar o desenvolvimento, você precisará seguir alguns passos: 33 | 34 | - Fork este repositório. 35 | - Faça um clone do repositório que você fez seu fork. 36 | - Crie uma branch a partir da branch `master`. 37 | - Adicione sua contribuição, faça o commit e push. 38 | - Abra um [pull request](https://github.com/backend-br/desafios/pulls). 39 | 40 |
41 | 42 | ### Adicionando uma solução de desafio 43 | 44 | Basta adicionar o link da sua implementação no arquivo `SOLUTIONS.md`, do respectivo problema que você resolveu. 45 | 46 | Para iniciar o desenvolvimento, você precisará seguir alguns passos: 47 | 48 | - Fork este repositório. 49 | - Faça um clone do repositório que você fez seu fork. 50 | - Crie uma branch a partir da branch `master`. 51 | - Adicione sua contribuição, faça o commit e push. 52 | - Abra um [pull request](https://github.com/backend-br/desafios/pulls). 53 | -------------------------------------------------------------------------------- /loans/SOLUTIONS.md: -------------------------------------------------------------------------------- 1 | # Soluções - Empréstimos 2 | 3 | Neste tópico, você encontrará uma lista de soluções para o desafio [Empréstimos](PROBLEM.md). 4 | 5 | | Linguagem | Repositório | 6 | |:-------------|:-------------------------------------------------------------------------| 7 | | `C#` | https://github.com/LucasBaitz/csharp-loans-service | 8 | | `Go` | https://github.com/josehenriquepg/loans-service | 9 | | `Go` | https://github.com/mrangel-jr/loans-service | 10 | | `Go` | https://github.com/rlevidev/emprestimo-go | 11 | | `PHP` | https://github.com/albreis/desafio-emprestimo | 12 | | `Java` | https://github.com/caio20538/loans.git | 13 | | `Java` | https://github.com/Glaudencio12/challenge-loans | 14 | | `Java` | https://github.com/andre-xizto/loans | 15 | | `Java` | https://github.com/alvarengacarlos/Hexagonal-Achitecture | 16 | | `Java` | https://github.com/paulomalandrim/loans-application | 17 | | `Java` | https://github.com/buildrun-tech/buildrun-desafio-backend-loans-solution | 18 | | `Java` | https://github.com/eckelp/challenge-loans | 19 | | `Java` | https://github.com/gustavorsmedina/challenge-loans | 20 | | `Java` | https://github.com/JoaoGbriel13/Avaliador-de-Emprestimos) | 21 | | `Java` | https://github.com/Lucas-Vinicius-Santos/desafio--customer-loans | 22 | | `Java` | https://github.com/FakeKus/Loan-Java | 23 | | `Python` | https://github.com/cesarcoppolasantos/python-loans-service | 24 | | `TypeScript` | https://github.com/lucazpinheiro/loans-service | 25 | | `TypeScript` | https://github.com/HenriqueSilverio/Loans.TypeScript | 26 | -------------------------------------------------------------------------------- /loans/PROBLEM.md: -------------------------------------------------------------------------------- 1 | # Empréstimos 2 | 3 | O seu desafio será implementar um serviço que determine quais modalidades de empréstimo uma pessoa tem acesso. 4 | 5 | ## Exemplo 6 | 7 | As modalidades de empréstimo que serão analisadas são: 8 | 9 | - **Empréstimo pessoal**: Taxa de juros de 4%. 10 | - **Empréstimo consignado**: Taxa de juros de 2%. 11 | - **Empréstimo com garantia**: Taxa de juros de 3%. 12 | 13 | As modalidades de empréstimo disponíveis para uma pessoa são baseadas em algumas variáveis específicas, são elas: 14 | 15 | - **Idade** 16 | - **Salário** 17 | - **Localização** 18 | 19 | O seu serviço recebe uma chamada para determinar quais modalidades de empréstimo uma pessoa tem acesso. 20 | 21 | **[POST]** `{{host}}/customer-loans` 22 | 23 | ```json 24 | { 25 | "age": 26, 26 | "cpf": "275.484.389-23", 27 | "name": "Vuxaywua Zukiagou", 28 | "income": 7000.00, 29 | "location": "SP" 30 | } 31 | ``` 32 | 33 | O seu serviço deve retornar uma resposta contendo o nome do cliente e uma lista de empréstimos aos quais ele tem acesso, 34 | com os respectivos tipos e taxas de juros. 35 | 36 | ``` 37 | HTTP/1.1 200 Ok 38 | ``` 39 | 40 | ```json 41 | { 42 | "customer": "Vuxaywua Zukiagou", 43 | "loans": [ 44 | { 45 | "type": "PERSONAL", 46 | "interest_rate": 4 47 | }, 48 | { 49 | "type": "GUARANTEED", 50 | "interest_rate": 3 51 | }, 52 | { 53 | "type": "CONSIGNMENT", 54 | "interest_rate": 2 55 | } 56 | ] 57 | } 58 | ``` 59 | 60 | ## Requisitos 61 | 62 | - Conceder o empréstimo pessoal se o salário do cliente for igual ou inferior a R$ 3000. 63 | - Conceder o empréstimo pessoal se o salário do cliente estiver entre R$ 3000 e R$ 5000, se o cliente tiver menos de 30 64 | anos e residir em São Paulo (SP). 65 | - Conceder o empréstimo consignado se o salário do cliente for igual ou superior a R$ 5000. 66 | - Conceder o empréstimo com garantia se o salário do cliente for igual ou inferior a R$ 3000. 67 | - Conceder o empréstimo com garantia se o salário do cliente estiver entre R$ 3000 e R$ 5000, se o cliente tiver 68 | menos de 30 anos e residir em São Paulo (SP). 69 | 70 | ## Soluções 71 | 72 | Neste [tópico](SOLUTIONS.md), você encontrará soluções para esse desafio, feitas por outros membros da comunidade. 73 | -------------------------------------------------------------------------------- /url-shortener/SOLUTIONS.md: -------------------------------------------------------------------------------- 1 | # Soluções - Encurtador de URLs 2 | 3 | Neste tópico, você encontrará uma lista de soluções para o desafio [Encurtador de URLs](PROBLEM.md). 4 | 5 | | Linguagem | Repositório | 6 | |:-------------|:---------------------------------------------------------------------------------| 7 | | `Go` | https://github.com/reisvitt/url-shortener-go | 8 | | `Go` | https://github.com/Davi-Arauj/desafio-encurtadorURL | 9 | | `Go` | https://github.com/RianNegreiros/url-shortener-go-redis | 10 | | `C#` | https://github.com/LucasBaitz/csharp-url-shortener-service | 11 | | `Java` | https://github.com/andre-xizto/encurtador-url | 12 | | `Java` | https://github.com/tyronedamasceno/URLShortener | 13 | | `Java` | https://github.com/Raeski/url-encurtator | 14 | | `Java` | https://github.com/tuliorsc10/encurtadorUrl | 15 | | `Java` | https://github.com/buildrun-tech/buildrun-desafio-backend-url-shortener-solution | 16 | | `Java` | https://github.com/gustavorsmedina/challenge-url-shortener | 17 | | `Java` | https://github.com/matheusgmello/desafio-url-shortener | 18 | | `Java` | https://github.com/rlevidev/encurtador-url | 19 | | `NodeJS` | https://github.com/devGuerra/urlShortener | 20 | | `NodeJS` | https://github.com/victornovaiss/encurtador-url | 21 | | `NodeJS` | https://github.com/Estevamrod/desafio/tree/main | 22 | | `Python` | https://github.com/Robotz213/EncurtadoPy | 23 | | `Typescript` | https://github.com/goncadanilo/url-shortener | 24 | | `Typescript` | https://github.com/rof20004/encurtador-url | 25 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Código de Conduta 2 | 3 | ## 1. Propósito 4 | 5 | Um dos principais objetivos do **Back-end Brasil** é ser inclusivo para o maior número de contribuidores, com as origens 6 | mais variadas e diversificadas possíveis. Como tal, estamos empenhados em proporcionar um ambiente amigável, seguro e 7 | acolhedor para todos, independentemente do sexo, orientação sexual, habilidade, etnia, posição socioeconômico e 8 | religião (ou falta dela). 9 | 10 | Este código de conduta descreve nossas expectativas para todos os que participam de nossa comunidade, bem como as 11 | consequências de comportamento inaceitável. 12 | 13 | Convidamos todos os que participam em **Back-end Brasil** a nos ajudar a criar experiências seguras e positivas para 14 | todos. 15 | 16 | ## 2. Open source 17 | 18 | Um objetivo adicional deste código de conduta é aumentar a participação em projetos de código aberto encorajando 19 | desenvolvedores a reconhecer e melhorar os relacionamentos entre nossas ações e seus efeitos dentro da nossa comunidade. 20 | 21 | As comunidades espelham as sociedades em que existem e a ação positiva é essencial para neutralizar as muitas formas de 22 | desigualdade e abuso de poder que existem na sociedade. 23 | 24 | Se você vir alguém que está se esforçando para garantir que nossa comunidade seja acolhedora, amigável e 25 | encoraje todos os participantes a contribuir ao máximo, queremos saber. 26 | 27 | ## 3. Comportamento esperado 28 | 29 | Os seguintes comportamentos são esperados e solicitados de todos os membros da comunidade: 30 | 31 | - Participe de forma autêntica e ativa. Ao fazer isso, você contribui para a saúde e longevidade desta comunidade. 32 | - Exercite consideração e respeito em suas palavras e ações. 33 | - Tente a colaboração antes do conflito. 34 | - Abstenha-se de comportamento e fala humilhantes, discriminatórios ou assediantes. 35 | - Esteja atento ao seu entorno e aos outros participantes. Alerte os líderes comunitários se notar uma situação 36 | perigosa, alguém em perigo ou violações deste Código de Conduta, mesmo que pareçam inconsequentes. 37 | - Lembre-se de que os locais de eventos da comunidade podem ser compartilhados com membros do público; por favor, seja 38 | respeitoso com todos os clientes desses locais. 39 | 40 | ## 4. Comportamento inaceitável 41 | 42 | Os seguintes comportamentos são considerados assédio e são inaceitáveis em nossa comunidade: 43 | 44 | - Violência, ameaças de violência ou linguagem violenta dirigida contra outra pessoa. 45 | - Piadas e linguagem sexista, racista, homofóbica, transfóbica, capacitista ou de outra forma discriminatória. 46 | - Postar ou exibir material sexualmente explícito, ou violento. 47 | - Postar ou ameaçar postar informações de identificação pessoal de outras pessoas (_doxing_). 48 | - Insultos pessoais, particularmente aqueles relacionados a gênero, orientação sexual, raça, religião ou deficiência. 49 | - Fotografia ou gravação inadequada. 50 | - Contato físico inadequado. Você deve ter o consentimento de alguém antes de tocá-lo. 51 | - Atenção sexual indesejada. Isso inclui comentários ou piadas sexualizadas; toque inapropriado, apalpação e investidas 52 | sexuais indesejadas. 53 | - Intimidação deliberada, perseguição ou seguimento (online ou pessoalmente). 54 | - Defender ou encorajar qualquer um dos comportamentos acima. 55 | - Interrupção sustentada de eventos comunitários, incluindo palestras e apresentações. 56 | 57 | ## 5. Consequências do comportamento inaceitável 58 | 59 | Comportamento inaceitável de qualquer membro da comunidade, incluindo patrocinadores e pessoas com autoridade para tomar 60 | decisões, não será tolerado. 61 | 62 | Espera-se que qualquer pessoa solicitada a interromper um comportamento inaceitável obedeça imediatamente. 63 | 64 | Se um membro da comunidade se envolver em comportamento inaceitável, os organizadores da comunidade podem tomar qualquer 65 | ação que considerem apropriada, até e incluindo um banimento temporário ou expulsão permanente da comunidade sem aviso 66 | (e sem reembolso no caso de um evento pago). 67 | 68 | ## 6. Diretrizes de relatórios 69 | 70 | Se você estiver sujeito ou testemunhar um comportamento inaceitável, ou tiver qualquer outra preocupação, notifique um 71 | organizador da comunidade o mais rápido possível. 72 | 73 | ## 7. Escopo 74 | 75 | Esperamos que todos os participantes da comunidade (contribuintes, pagos ou não; patrocinadores; e outros convidados) 76 | cumpram este Código de Conduta em todos os locais da comunidade - online e pessoalmente - bem como em todas as 77 | comunicações individuais relacionadas aos negócios da comunidade. 78 | 79 | Este código de conduta e seus procedimentos relacionados também se aplicam a comportamentos inaceitáveis que ocorrem 80 | fora do escopo das atividades da comunidade quando tal comportamento tem o potencial de afetar adversamente a segurança 81 | e o bem-estar dos membros da comunidade. 82 | 83 | ## 8. Informações de contato 84 | 85 | - Email: backendbr@gmail.com 86 | - Fórum: 87 | [reportando comportamento inaceitável](https://github.com/orgs/backend-br/discussions/new?category=reportando-comportamento-inaceit%C3%A1vel) 88 | 89 | ## 9. Licença e atribuição 90 | 91 | O Código de Conduta do Cidadão é distribuído pela [Stumptown Syndicate](https://github.com/stumpsyn) sob uma 92 | licença [Creative Commons Attribution-ShareAlike](https://creativecommons.org/licenses/by-sa/3.0). 93 | 94 | Partes do texto derivadas do [Código de Conduta Django](https://www.djangoproject.com/conduct) e da 95 | [Política Anti-Assédio do Feminismo Geek](https://geekfeminism.fandom.com/wiki/Conference_anti-harassment/Policy). 96 | --------------------------------------------------------------------------------