{"id":22366683,"url":"https://github.com/miguelprogrammer/sales-analysis","last_synced_at":"2025-03-26T15:51:00.854Z","repository":{"id":264121218,"uuid":"892428853","full_name":"MiguelProgrammer/sales-analysis","owner":"MiguelProgrammer","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-24T06:55:19.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-31T17:08:12.357Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MiguelProgrammer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-22T05:02:39.000Z","updated_at":"2024-11-24T06:55:22.000Z","dependencies_parsed_at":"2024-11-22T07:00:21.384Z","dependency_job_id":null,"html_url":"https://github.com/MiguelProgrammer/sales-analysis","commit_stats":null,"previous_names":["miguelprogrammer/sales-analysis"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiguelProgrammer%2Fsales-analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiguelProgrammer%2Fsales-analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiguelProgrammer%2Fsales-analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiguelProgrammer%2Fsales-analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MiguelProgrammer","download_url":"https://codeload.github.com/MiguelProgrammer/sales-analysis/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245689414,"owners_count":20656414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-04T18:15:08.923Z","updated_at":"2025-03-26T15:51:00.823Z","avatar_url":"https://github.com/MiguelProgrammer.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Application - Sales Analysis - Challenge\n\n## Descrição\n\n    Criar um sistema de análise de dados de venda que irá importar lotes de arquivos e produzir\n    um relatório baseado em informações presentes nos arquivos.\n \n    Existem 3 tipos de dados dentro dos arquivos e eles podem ser distinguidos pelo seu\n    identificador que estará presente na primeira coluna de cada linha, onde o separador de\n    colunas é o caractere “ç”.\n \n    Dados do vendedor\n \n    Os dados do vendedor possuem o identificador 001 e seguem o seguinte formato:\n    001çSalesmanIDçNameçSalary\n \n    Dados do cliente\n \n    Os dados do cliente possuem o identificador 002 e seguem o seguinte formato:\n    002çClientIDçNameçBusiness \n    \n    Area Dados de venda\n    \n    Os dados de venda possuem o identificador 003 e seguem o seguinte formato:\n    003çSale IDç[Item ID-Item Quantity-Item Price]çSalesman name\n\n    Exemplo de conteúdo total do arquivo:\n \n\n\t001ç1234567891234çPedroç50000\n\t001ç3245678865434çPauloç40000.99\n\t002ç2345675434544345çJose da SilvaçRural\n\t002ç2345675433444345çEduardo PereiraçRural\n\t003ç10ç[1-10-100,2-30-2.50,3-40-3.10]çPedro\n\t003ç08ç[1-34-10,2-33-1.50,3-40-0.10]çPaulo\n    \n    O sistema deverá ler continuamente todos os arquivos dentro do diretório padrão\n    HOMEPATH/data/in e colocar o arquivo de saída em HOMEPATH/data/out.\n    \n    No arquivo de saída o sistema deverá possuir os seguintes dados:\n    • Quantidade de clientes no arquivo de entrada\n    • Quantidade de vendedores no arquivo de entrada\n    • ID da venda mais cara\n    • O pior vendedor, que vendeu o menor valor acumulado\n    \n    Requisitos\n \n    • O sistema deve ser construído utilizando Java\n    • O sistema deve rodar continuamente e capturar novos arquivos assim que eles sejam \n    inseridos no diretório padrão.\n    • Os arquivos capturados deverão ser importados para um banco de dados postgreSQL\n    • Você tem que utilizar as funcionalidades do Java Springboot para importar os \n    arquivos e gerar os relatórios\n    • Você tem total liberdade para adicionar qualquer outra biblioteca externa se achar necessário.\n\n## Solução\n\n![alt text](https://i.imgur.com/ELCaceu.png)\n    \n  * A cada arquivo.txt inserido no path indicado, a aplicação irá executar os passos construidos para tratamento do arquivo\n  * É verificado o formato do arquivo, se já existe algum item, venda, vendedor já inseridos, assim o registro em base desse dado é evitado\n  * A cada arquivo lido, há um novo arquivo de saída respectivo\n  * Os dados são persistidos em base.\n    \n\n## Solução técnica\n\n  * Orientada a Objetos\n  * Arquitetura em Camadas\n  * PostgreSql\n  * Clean Code / Solid\n  * Dockerfile \u0026\u0026 compose\n  * Docker Hub -\u003e ``` docker push migprogrammer/sales:latest ```\n  * Lombok\n\n## Execução\n  * Crie os diretorios abaixo\n    * C:\\processa arquivos\\data\\\n      * Diretorio chamado in\n        * dados.txt\n      * Diretorio chamado out\n  * Execute a aplicação\n  * Comando para rodar a aplicação ``` java -jar nome-application.jar ```\n\n## Soluções alternativas\n\n  * Os itens de venda poderiam ser tratados com spring batch porque já muitas ferramentas já existentes que poderiam diminuir o gap\n  * Os dados poderiam também ser tratados com mensageria\n    * Arquivos incorretos seria publicados em filas de arquivos incorretos, posterior a isso, os responsáveis poderiam receber um relatório de arquivos incorretos\n  * Poderia tratar outros tipos de arquivos, desta forma, haveria outros módulos voltados para o tipo de arquivo inserido\n    * Este é um ponto importante, para cada typo de arquivo há uma tratativa diferente, além de deixar implicito que deverá haver um template a ser seguido\n    \n## Dados \u0026 Formatos arquivo de entrada\n````\n001ç1234000034çMariaç50000\n001ç3000065434çSarahç4300\n002ç2302309005çDéborajçRural\n002ç3430400002çJéssicaçRural\n003ç19ç[1-10-130,2-30-32.50,3-4-3.40]çMaria\n003ç90ç[41-34-10,2-33-13.50,4-12-0.230]çSarah\n````\n\n## Dados \u0026 Formatos arquivo de saída - relatório\n````\n    --------------------------------- RELATÓRIO 24/11/2024 03:02:06 --------------------\n* Arquivo processado = miguel.txt\n* Quantidade de clientes no arquivo de entrada = 2\n* Quantidade de vendedores no arquivo de entrada = 2\n* ID da venda mais cara = 19 | Valor R$ 165.90\n* O pior vendedor, que vendeu o menor valor acumulado = 90 | Valor R$ 23.73\n--------------------------------- RELATÓRIO 24/11/2024 03:02:06 --------------------\n````","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguelprogrammer%2Fsales-analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiguelprogrammer%2Fsales-analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguelprogrammer%2Fsales-analysis/lists"}