Skip to content

Instantly share code, notes, and snippets.

@virgiliojr94
Created April 12, 2024 20:58
Show Gist options
  • Save virgiliojr94/bdf8b5df3e0d6908dad8e3930862682b to your computer and use it in GitHub Desktop.
Save virgiliojr94/bdf8b5df3e0d6908dad8e3930862682b to your computer and use it in GitHub Desktop.

Desafio: API Carteira de Investimentos [Off] [Junior] [Pleno]

Contexto

Ativos financeiros representam a posse de um direito econômico que pode gerar lucro ao longo do tempo. Os ativos possuem preço, identificação, titular, tipo (ações, títulos do tesouro direto, títulos de CDB, etc...) e podem ser negociados no mercado financeiro dependendo da política de cada tipo. Também são conhecidos como "papéis" embora sejam títulos digitais intangíveis. Um ativo financeiro pode aumentar de rentabilidade ao longo do tempo, por exemplo, quem comprou uma ação da Empresa A na bolsa da Nasdaq no dia 2 de novembro de 2020, pagou $52,95. Hoje esse mesmo ativo está valendo $69,33 representando uma rentabilidade de %30,93 para o titular.

Aplicativos de carteira de investimentos são muito comuns no mercado financeiro quando estamos falando do gerenciamento de ativos financeiros. A ideia é ajudar investidores a manterem sua lista de ativos comprados, rendimento, valor total por ativo, tipo de operação, etc…

Desafio

Com o intuito de operar uma carteira de investimentos, onde deve-se receber entradas e responder operações, você deverá criar uma aplicação que exponha suas funcionalidades através de uma API:

  1. Endpoint de persistência de recursos (ativos, operações de compra e venda)
  2. Endpoint de listagem e busca de recursos (ativos na carteira, valor consolidado, histórico de operações de compra e venda) A API pode ter os dados persistidos e mantidos em memória durante a execução. Persistir os dados num banco de dados seria um plus/bônus. Essa aplicação deverá suportar as operações descritas abaixo:
  3. Adicionar um novo ativo na carteira: O usuário informa os dados de entrada contendo o código do ativo que foi comprado (ex.: STNE, GOOG, PGRM), quantidade de ativos e o valor pago por cada unidade do ativo
  4. Visualizar a lista de ativos investidos Semelhante a um extrato bancário, esse comando deverá exibir uma lista de ativos investidos, informando código, preço de cada unidade do ativo, valor total alocado no ativo e data de compra.
  5. Informar a venda de um ativo Esse comando servirá para informar a venda de um ativo. O usuário irá informar o código do ativo e quantas unidades ele vendeu. O usuário não deve conseguir vender ativos que não existem na carteira.
  6. Visualizar um resumo do valor total investido em todos os ativos e também o valor investido em cada ativo Comando que deve exibir um resumo da carteira de investimentos do usuário. O objetivo é mostrar o valor total da carteira e o valor total alocado por ativos.

Requisitos Técnicos

  • Utilizar .NET Core em sua última versão para o desenvolvimento;
  • Utilizar todo seu conhecimento em orientação a objetos, SOLID e Clean Code;
  • Faça um bom uso de recursos RESTful, rotas, verbos, status codes e afins;
  • Todo ambiente deve ser containerizado (Docker) e preferencialmente executado com todos serviços dependentes em um único comando;
  • Para o armazenamento das informações utilizar qualquer banco SQL ou NoSQL da sua preferência;
  • Testes são muito importantes. Crie alguns casos de testes unitários (com uso de Mock);
  • Use frameworks com sabedoria, sem poluir seu código;
  • Ter um repositório organizado, documentação e fácil de utilizar, um ou poucos comandos para levantar todo ambiente e suas dependências;
  • O repositório deve ser público e ter integração com qualquer serviço de CI (seja Azure DevOps, AppVeyor, CircleCI, etc);
  • A aplicação tem que estar funcional e cumprir os requisitos que foram apresentados no desafio.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment