# 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.