Esta é uma aplicação de Back-end em C#
, usando .NET Core
para prover os serviços de um aplicativo de rede social baseado em texto.
A API foi desenvolvida seguindo padrão Repository
, os princípios de arquitetura web REST
e utilizando-se de POO
, conectando-se a um banco de dados SQL Server
para a persistência das informações.
Para acessar a API e consumir seus serviços, faz-se necessário que a pessoa usuária cadastre-se e faça login com suas credencias. Isso será autenticado pela ferramenta JWT
, gerando um token seguro JWT
(JSON Web Token), que servirá de autorização da sessão, e validação de acessos a alguns dos serviços disponíveis à pessoa usuária, enquanto conectada a aplicação.
Mário JS Júnior - Software Engineer XP Inc.
A gestão ágil de todo o processo de planejamento e desenvolvimento do desafio, foi executada com o apoio das metodologias scrum
(product backlog, sprint e simulações de daily meeting) e kanban
(quadro de atividades).
Quadro kanban inicial:
Quadro kanban final:
- Desenvolvimento da aplicação em
C#
, com.NET Core
e comEntity Framework
que é um framework mapeador moderno de banco de dados de objeto para .NET. Dando suporte a consultas LINQ, controle de alterações, atualizações e migrações de esquema. Funciona ainda com muitos bancos de dados, incluindo o Banco de Dados SQL (local e do Azure); - A API foi desenvolvida seguindo padrão
Repository
, os princípios de arquitetura webREST
e utilizando-se dePOO
, como já citado na introdução, por serem padrões e metodologias de desenvolvimento já consagrados; - O banco de dados escolhido para a persistência das informações foi o
SQL Server
, por sua acessibilidade, confiabilidade, robustez e compatibilidade plena com o ecossistema.NET Core
e oEntity Framework
. Além de proporcionar opção de implantação (deploy) prática no serviço daAzure
; - Para os testes, considerando a aplicação em
.NET Core
, optei pela duplaxUnit
(como framework/base para a melhor organização dos códigos de teste) eFluentAssertions
(para as asserções, fornecendo formas de dizer ao código o que espero, testar e validar o retorno de forma fluente e intuitiva).
Dessa forma, necessitando ainda otimizar o recurso tempo, priorizei a filosofia de testes em BDD
(Behavior Driven Development), onde fiz o desenvolvimento orientado ao comportamento dos requisitos do sistema/aplicação e usando linguagem mais próxima do negócio, desenvolvendo os testes em paralelo à codificação da aplicação;
Foram ao todo, 31 asserções
, entre testes unitários e de integração
, todas devidamente confirmadas, com simulação de todas as dependências externas e isolamento completo do banco de dados.
Quadro de Cobertura de Testes:
A aplicação foi testada com cargas de 10
, 100
e 1.000
VUs (usuários virtuais), em ambiente de Produção
, no endpoint de login
, sem erros
e com as seguintes respostas:
10 VUs
100 VUs
1.000 VUs
- .NET
- dotnet CLI
- SQL Server
- Entity Framework
- Ferramenta visual de administração de Banco de Dados.
Recomendação: Azure Data Studio
- Client HTTP à sua escolha:
git clone git@github.com:Mario-Junior/tryitter.git
Entre no diretório do repositório
cd tryitter/
Instale as dependências do projeto
dotnet restore
Entre no diretório da aplicação
cd Tryitter.Application/
Suba as migrações (migrations) | caso já não existirem
dotnet ef migrations add [nome-para-a-migration]
Conecte-se ao sistema de administração de banco de dados e suba o banco de dados
dotnet ef database update
Suba o servidor local
dotnet run
Como os testes estão totalmente desacoplados de dependências externas, é possível executá-los a qualquer momento pelo comando
Na pasta ./tryitter
dotnet test
- Converter/encriptar dados sensíveis como Email, Password, etc. para hash;
- Arquivo de variáveis de ambiente (
.env
ou outro); - Conteinerização da aplicação;
- Usar contratos via Interfaces;
- Implementar “modo rascunho” (draft).