O projeto DevFreela foi realizado durante o curso de Formação em ASP Net Core afim de aperfeiçoar minhas habilidades na construção de APIs. Ele consiste em dois serviços (um de projetos e um de pagamentos) que se comunicam entre sí.
Plataforma para cadastro e contratação de serviços de Freelancer de desenvolvedores no formato de API. Oferece uma plataforma unificada para os clientes contratarem os melhores freelancers para seus projetos, de maneira confiável e gerenciada.
- ID (int)
- FirstName (string)
- LastName (string)
- Email (string)
- Skills (list of skill)
- OwnedProjects (list of project)
- FreelancerProjects (list of project)
- ID (int)
- Title (string)
- Description (string)
- IdClient (int)
- IdFreelancer (int)
- TotalCost (decimal)
- StartedAt (datetime)
- FinishedAt (datetime)
- Comments (list of comment)
- Description (string)
- ID (int)
- IdProject (int)
- IdUser (int)
- Content (string)
- .NET 8.0
- Entity Framework Core 8.0
- Um projeto não pode ser iniciado caso já tenha sido finalizado;
- Um projeto não pode ser finalizado caso já tenha sido iniciado;
- Ao criar um projeto, o título e a descrição são obrigatórios;
- O usuário é obrigado a informar pelo menos uma habilidade ao se cadastrar;
- O email deve ser único para cada usuário na plataforma;
- Um usuário pode ser tanto cliente quanto freelancer, mas não pode ser ambos em um mesmo projeto;
- Utilizar docker para gerenciar os serviços e os bancos de dados;
- Aplicar documentação de APIs com o Swagger
- Arquiteturar camadas da arquitetura limpa
- Aplicar ORM EfCore nas entidades
- Arquiteturar o padrão CQRS no projeto
- Arquiteturar o padrão Repository nas entidades do projeto
- Aplicar validação de APIs com middleware global na camada Application
- Aplicar autenticação com JWT
- Criar funcão para gerar token JWT
- Gerar migrations com dados de Login;
- Computar o SHA256 ao salvar a senha no banco de dados (salvar a role também);
- Implementar o login nos serviços;
- Configurar as permissões por recurso e por papel;
- Aplicar testes unitários com o NSubstitute:
- Entender o que é um Mock;
- Entender correspondencia de argumentos;
- Criar dois testes utilizando o NSubstitute;
- Criar um serviço de pagamento para o serviço de projetos
- Criar uma abstração de pagamentos no serviço de projetos;
- Criar uma conexão entre o serviço de projetos e pagamentos via HTTP;
- Criar um repositório para salvar os pagamentos em um banco de dados MySQL;
- Criar uma conexão entre o serviço de projetos e pagamentos via mensagens (RabbitMQ);
- No serviço de projetos, criar a conexão com as filas RabbitMQ e publicar uma mensagem de pagamento ao finalizar projeto;
- No serviço de pagamentos, criar um background service para consumir as mensagens de pagamentos;
- Caso seja realizado com sucesso, enviar uma mensagem para uma fila de "Pagamentos aprovados";
- Caso seja realizado com falha, enviar uma mensagem para uma fila de "Pagamentos reprovados";
- No serviço de projetos, consumir as mensagens das filas aprovados e reprovados, e realizar alteração correspondente no projeto;
- Aplicar conceitos de DevOps com o Azure
- Realizar publicação