├── .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 |
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 |
--------------------------------------------------------------------------------