# Nubank Challenge: Capital Gains
O projeto nubank-challenge-capital-gains é uma ferramenta de linha de comando desenvolvida para gerenciar e calcular o fluxo de taxas sobre ganhos de capital.
Ideal para investidores que precisam acompanhar a performance de seus investimentos e calcular os impostos devidos sobre os lucros obtidos na venda de ativos.
## Decisões de Arquitetura
A arquitetura foi criada com a ideia de simplificar o numero de camadas. Basicamente:
nubank-challenge-capital-gains
- nubank-challenge-capital-gains-test
> Projeto do desafio, possui camadas:
> Model - Modelo de Dados
> Services - Classes de Serviço (CapitalGain e Util)
> Pasta Cases - com arquivos de input do desafio
> Arquivo Program.cs - stdin
- nubank-challenge-capital-gains-test
> projeto de teste (xUnit), possui camadas:
> IntegrationTest - teste de fluxo completo
> Mocks - fixtures para testes
> UnitTests - teste classes de serviço
#### Bibliotecas
No projeto foram utilizadas as seguintes bibliotecas:
> xUnit + Moq para execução e mock de testes
> Newtonsoft.Json para Serialização
## Pré-requisitos
Para executar e desenvolver a aplicação nubank-challenge-capital-gains, você precisará ter instalado:
- .NET SDK (versão recomendada 6.0)
- Um editor de código ou IDE de sua preferencia (VS Code, Visual Studio, etc.)
## Configuração do Ambiente
### Windows, Linux, e MacOS
A instalação do .NET SDK pode variar dependendo do seu sistema operacional. Siga as instruçoes oficiais na [documentação do .NET](https://dotnet.microsoft.com/pt-br/download/visual-studio-sdks) para instalar a versão apropriada para o seu sistema.
Após a instalação, você pode verificar se o .NET foi instalado corretamente abrindo um terminal ou prompt de comando e executando:
> dotnet --version
Isso deve exibir a versão do .NET SDK que você instalou.
## Executando a Aplicação
Para utilizar a aplicação nubank-challenge-capital-gains, siga os passos abaixo. Os comandos são similares em Windows, Linux e MacOS, com pequenas diferenãas na forma de lidar com arquivos de entrada.
### 1. Descompactar arquivo zip
Primeiro, descompacte o arquivo capital-gains.zip e acesse o diretorio com o conteãdo do projeto
### 2. Executar Testes
Para garantir que tudo está configurado corretamente, execute os testes da aplicação:
> dotnet test nubank-challenge-capital-gains-test/nubank-challenge-capital-gains-test.csproj
### 3. Executar a Aplicação
Para executar a aplicação e processar os dados de um arquivo de entrada, use o comando a seguir. A forma de passar o conteãdo do arquivo para a aplicação varia entre os sistemas operacionais.
#### Windows
> cd nubank-challenge-capital-gains
> type cases\input01.txt | dotnet run --project nubank-challenge-capital-gains
#### Linux/MacOS
> nubank-challenge-capital-gains
> cat Cases/input01.txt | dotnet run --project nubank-challenge-capital-gains
### Resultado Esperado
Após a execução, você deverá ver um resultado similar a este no terminal:
```
[{"tax":0.00},{"tax":0.00},{"tax":0.00}]
```
Este resultado indica que a aplicação processou as operaçães de compra e venda especificadas no arquivo de entrada e calculou os ganhos de capital conforme esperado.
---
## Executando a Aplicação com Docker container
Para executar o teste do projeto nubank-challenge-capital-gains utilizando um container Docker, siga os passos abaixo. Esses comandos permitem a construção de uma imagem Docker do projeto e a execução do container para testar o cãdigo com diferentes entradas.
### Pré-requisitos
Certifique-se de que você tem o Docker instalado e funcionando em sua maquina. Alem disso, você deve ter o arquivo de projeto .csproj no diretorio correto.
### Comandos para Linux e Mac
#### Build da Imagem Docker
Para construir a imagem Docker do seu projeto, navegue até o diretório raiz do projeto no terminal e execute o seguinte comando:
> docker build -t nubank-challenge-capital-gains:nubank01 .
Este comando constroi uma nova imagem Docker com a tag nubank-challenge-capital-gains:nubank01, baseando-se nas instruçães encontradas no arquivo Dockerfile presente no diretorio atual.
#### Execução do Container
Para executar o container utilizando uma entrada específica, você pode redirecionar um arquivo de entrada para o container da seguinte maneira:
> cat Cases/input01.txt | docker run -i nubank-challenge-capital-gains:nubank01
Neste comando, o conteudo do arquivo **Cases/input01.txt** é passado como entrada padrão para o container Docker que executa o codigo do desafio. Isso permite testar o comportamento do programa com diferentes conjuntos de dados de entrada.
#### Notas Adicionais
> Os comandos acima são compatíveis tanto para usuarios de Linux quanto para Mac, considerando que o Docker esteja devidamente instalado e configurado em seu sistema operacional.
> Para usuarios de Windows, os comandos são muito similares, mas certifique-se de usar o caminho correto do arquivo conforme a sintaxe do sistema operacional.