Skip to content

Final project developed for conclusion of the C# Acceleration course

Notifications You must be signed in to change notification settings

Mario-Junior/tryitter

Repository files navigation

Tryitter Application - Mário Júnior

banner da logomarca Tryitter

Boas vindas ao repositório da aplicação Tryitter

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.

Responsável técnico por este repositório:

Mário JS Júnior - Software Engineer XP Inc.


Planejamento

Gestão ágil do processo de Planejamento e Desenvolvimento

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 inicial

Quadro kanban final:

quadro kanban final

Tecnologias utilizadas

C#  .NET  Entity Framework  SQL Server  xUnit  FluentAssertions  Git  GitHub  Markdown  Azure  Swagger  Docker  Grafana K6 


Requisitos Técnicos

  • Desenvolvimento da aplicação em C#, com .NET Core e com Entity 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 web REST e utilizando-se de POO, 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 o Entity Framework. Além de proporcionar opção de implantação (deploy) prática no serviço da Azure;
  • Para os testes, considerando a aplicação em .NET Core, optei pela dupla xUnit (como framework/base para a melhor organização dos códigos de teste) e FluentAssertions (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;

Banco de Dados

Diagrama Entidade Relacionamento - Modelagem do Banco de dados:
diagrama entidade relacionamento do banco de dados

Testes

Testes Funcionais

A aplicação teve 98% de todas as suas principais funcionalidades testadas, em todas as camadas.

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:

quadro de testes com noventa e oito porcento da aplicação coberta

Testes de Carga

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

quadro de testes de carga para simulação com 10 usuários virtuais

100 VUs

quadro de testes de carga para simulação com 100 usuários virtuais

1.000 VUs

quadro de testes de carga para simulação com 1000 usuários virtuais

Documentação

A documentação da Aplicação pode ser acessada em Produção pelo endereço:

Tryitter.Application v1


Executando a Aplicação

Localmente

Para execução local (exemplo de ambiente em sistema Linux), você precisará de:

Recomendação: Azure Data Studio

  • Client HTTP à sua escolha:

Recomendações: Insomnia | Postman | Firecamp

Clone o repositório

  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

Aprendizados adicionais e melhorias

  • 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).

About

Final project developed for conclusion of the C# Acceleration course

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published