-
Criar, editar, excluir e listar agendas. -
-
Fiz o create de agendas aqui para cumprir o requisito, mas na lógica do projeto eu implementei o create da agenda junto com o create das empresas ou seja quando CRIAR uma empresa automaticamente ja é criado a agenda.
![](https://private-user-images.githubusercontent.com/142629826/309575969-7f454092-f116-407d-9328-86ec1d4578ac.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc1OTY5LTdmNDU0MDkyLWYxMTYtNDA3ZC05MzI4LTg2ZWMxZDQ1NzhhYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kN2U5NmM5MTAzNGYyYzNmYTgxNTY3NTc3NjA3YWVkYzUzNGEwZTAxNWViMzMyNTlhMmRhZWM1ZTA2OWJjYzdhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.2KnBwyDn30G1AWeCP5Gz84AetS5EwiJt1a0Ea3-dXXA)
- Criar, editar, excluir e listar empresas.
![](https://private-user-images.githubusercontent.com/142629826/309576332-0c93c235-84a2-473f-8edb-e4fcb6ae819e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc2MzMyLTBjOTNjMjM1LTg0YTItNDczZi04ZWRiLWU0ZmNiNmFlODE5ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZDA2NDRiNzY2Yjg2Y2ZkZDU0YWNkNWY3Y2VjMjEyMmZiZTU4ODE3OWYyYWMwNTk3ZjVkYzFlNTBjZTRlYjEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.aeRj2Ra8dciQWCzO5fs1KpUINa3i_KyA-zT8aQn4ras)
============================================================
-
Importar contatos a partir de um arquivo .csv - Todos Requisitos cumpridos.
-
As linhas em amarelo representam os seguintes erros: sem nome, sem email, já existente no sistema, sem numero de telefone e empresa inexistente no sistema. O contato com uma empresa inexistente é registrado sem vinculo com empresas, e o resto são excluidos da importação.
-
Irei deixar um CSV de exemplo no repositorio para possivel teste no Endpoint.
![](https://private-user-images.githubusercontent.com/142629826/309577843-a2c85ffc-be0c-4888-81be-11b155f35115.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc3ODQzLWEyYzg1ZmZjLWJlMGMtNDg4OC04MWJlLTExYjE1NWYzNTExNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05YTgyZjY2OWNkNjIyNmZlYjcyMzNiNjhlZGQ1OWQwNWQ3Mjg3MTRmMWU4MGZiMjU4M2QwYzczYjY1M2QzOWQ4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.eoV-EzawuMlyr2DZylFX17wmfHjOBAUkBFstRF2mkfw)
============================================================
- Pesquisar contatos
- Deve pesquisar em qualquer campo do contato (incluído o nome da empresa).
- O parâmetro de entrada deve ser apenas uma string (Semelhante a pesquisa do google onde tem apenas um campo texto)
![](https://private-user-images.githubusercontent.com/142629826/309578390-58dfd2b8-404b-4856-bcc5-9c17417a35be.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc4MzkwLTU4ZGZkMmI4LTQwNGItNDg1Ni1iY2M1LTljMTc0MTdhMzViZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02NGQxZGRhNTUxNzk5N2I1YTJmMWYxOTMzZmVlYTY0NWU4YmU4YzJmNGQwNWQ0ZDQ0YTJjZThhNjVmODU5ZWVkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.a-wpdapE0LtccoMjheLIo7YPXkJlK_TuejJjS2KdEqo)
-
A pesquisa deve ser paginada (Fique a vontade para utilizar qualquer estratégia).
-
No JSON retorno o current page, take e total para facilitar uma posterior implementação do FrontEnd
![](https://private-user-images.githubusercontent.com/142629826/309578495-aa13e1e7-4de4-4bfb-9d22-19e4d5e388e7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc4NDk1LWFhMTNlMWU3LTRkZTQtNGJmYi05ZDIyLTE5ZTRkNWUzODhlNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00NGQyMWE0OTk4ODIwZTAzZGY2OTA1MDY5ZmYyYTg5NTIyMDNjNjRiMzA2MDMyMGQ4NGVkOWQ2MDQzYmQ1NjIxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.Yd3R2rtkmyXAO8SidihCtTIs9jk5ncJffrS-zHAqMDY)
============================================================
- Pesquisa de contatos da empresa (A partir de uma pesquisa pelo nome ou parte do nome, ou seja, a entrada é um texto)
![](https://private-user-images.githubusercontent.com/142629826/309578890-0b1d583a-b96f-4546-8bd9-0a0cfd5637e6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc4ODkwLTBiMWQ1ODNhLWI5NmYtNDU0Ni04YmQ5LTBhMGNmZDU2MzdlNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04MzgyMWUyYTgzZWMzOGJjY2MzMDFhOWQwMDZjZmI0ZmM5NmU2OWVlMzc1MjMxNWZjNzUxZjFlMTMwMWFjZWRmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.e0KSTUKJPng3CWxvllq9_KENjrO_7biA8vi9Hy0hjA8)
- Deve retornar os contatos agrupados pela agenda.
![](https://private-user-images.githubusercontent.com/142629826/309578952-2ca1a8a2-0988-41fd-a90d-400500ac7127.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3NDE1NzIsIm5iZiI6MTcyMTc0MTI3MiwicGF0aCI6Ii8xNDI2Mjk4MjYvMzA5NTc4OTUyLTJjYTFhOGEyLTA5ODgtNDFmZC1hOTBkLTQwMDUwMGFjNzEyNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyM1QxMzI3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZWZjMDFjNjkwNWY0NGU1ZjZhOTc0YzVmMGY5MjE5OWRjYzQ2YzJiOTEwNWU3ZWI1NDFmNTFmNzk3ZWQyZmUwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.Kakvu9uHeH6ZU2YYAQf7bJBZ5tsT8sjB4KWkGK0PB_Q)
============================================================
Como poderiamos refatorar da forma que quiséssemos optei por utilizar: Entity Framework e Clean Architecture.
Agradeço pelo desafio, com ele precisei aprender sobre importação de arquivos em APIs, exercitei meus conhecimentos em Clean Architecture e tive o desafio de trabalhar com o .NET 5, versão que não estou acostumado.
Espero ver vocês novamente nas proximas etapas do processo seletivo.
Abraços.