Giter VIP home page Giter VIP logo

msemail's Introduction

Email

Esse é um projeto de estudos que apresenta uma API para envio de emails, além de dois microserviços responsáveis pelo preparo do email e pelo envio do email por meio da tecnologia SMTP do Google.

Tecnologias

  • Asp.NET
    • Swagger
    • Entity Framework
    • JWT Token
  • Docker
  • SQL Server

Arquitetura e escolhas

O projeto foi criado com a inteção de seguir o padrão de Clean Architecture, com as camadas:

  • Common
  • Domain
  • Infra
  • Api
  • MS PrepareEmail
  • MS SendEmail

fluxo

Como executar

Primeiro baixe o repositório

git clone https://github.com/jos3s/MSEmail/

or

gh repo clone jos3s/MSEmail/

Acesse os projetos API, MSEmail.PrepareEmail e MSEmail.SendEmail e altere os arquivos appsettings.json configurando a ConnectionStrings do banco.

{
  ...
  "ConnectionStrings": {
    "MsEmail": "Server= ;Database= ;User ID= ;Password= ;Integrated Security = True;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;"
  },
  ...
}

No projeto da API configure um valor para TokenSecret

{
  ...
  "AppSettings": {
    "DefaultUserId": 1,
    "TokenSecret": ""
  }
}

No MSEmail.Send é preciso fazer uma configuração a mais, pois para o envio do email é necessário configurar qual email vai ser utilizado como redirecionamento. Para isso pode usar o texto de suporte do google aqui.

{
  "AppSettings": {
    "DefaultUserId": 1,
    "SmtpHost": "smtp.gmail.com",
    "SmtpPort": 587,
    "SmtpUserName": "",
    "SmtpPassword": ""
  }
}

Para rodar os projetos

Para rodar os projetos execute os seguintes comandos no terminal ou execute-os pelo Visual Studio:

API

dotnet run --project .\MsEmail.Api

MSEmail.PrepareEmail

dotnet run --project .\MsEmail.PrepareEmail

MSEmail.Send

dotnet run --project .\MsEmail.Send

Endpoints

Ao rodar pelo Visual Studio, vai abrir a interface do swagger com todos os endpoints e schemas da api. msemailapi

msemail's People

Contributors

jos3s avatar

Watchers

 avatar

msemail's Issues

Implementar email como rascunho

Contexto Operacional

É preciso permitir que o usuário faça o envio de um email sem a data de envio. de modo a ter um registro de um email que pode ser modificado por tempo indeterminado.

Contexto Técnico

Foi analisado a necessidade dos seguintes pontos:

  • Remover o atributo Required do campo SendDate do método de Post de EmailController

  • Criar os valores draft, preSend no enum de EmailStatus

  • Criar um novo workservices MSEmail.PrepareEmail que vai conter duas threads

    • Uma thread responsável por validar se o email criado tem o sendDate, se não tiver vai para o status de draft e se tiver vai para PreSend
    • Uma thread responsável por validar se um email em draft tem o sendDate se não tiver vai para o status de draft e se tiver vai para PreSend
  • Atualizar o MsEmail,Sender para pegar os emails agora com o status de PreSend não mais de Created

Image

Criptografar a senha do login

Contexto Operacional

Tem como objetivo garantir uma maior segurança das informações de login

Contexto Técnico

Implementar uma função que gere a criptografia da senha ao criar um usuário

Criar Login no WebUI

Contexto Técnico

Implementar o controller, view e models responsáveis por realizar a autenticação do usuário no admin usando a api.

Contexto Operacional

  • Implementar a Controller
  • Implementar a View
  • Implementar a conexão com a API
  • Implementar o salvamento do token retornado na api no localsStorage

Implementar salvamento de Exceptions

Contexto Operaciona

Essa Issue tem como objetivo implementar um rastreamento da exeções dos controller

Contexto Técnico

image

Adicionar nos métodos das controller o salvamento da exeções, além de implementar a estrutura de try/catch onde ela não existe

Padronizar respostas de exceção com o ApiResult

Contexto Operacional

É preciso padronizar todas as respostas da api com o retorno como ApiResult

Contexto Técnico

Nos retornos sem padrão de todos os controllers, substitua o uso do Problem por StatusCode(codigo, new ApiResult)

Melhoria nos Controllers

Contexto operacional

O item tem como objetivo simplificar métodos do EmailController e corrigir validações para o LoginController

Contexto técnico

  • Email

  • Remover o método GetAllByUser e implementar o mesmo no GetAll

  • Impedir a deleção de email enviados no Delete

  • User

  • Adicionar validação de usuário já existente

Simplificar AppSettings e ConfigHelper

Contexto Operacional

Tem como objetivo remover seções do appsettings.json que poderia estar juntas

Contexto Técninco

image

Mover keys do SmtpConfiguration e Token para dentro de AppSettings

Simplificar o GetConfiguration do ConfigHelper

image

Adicionar Testes de Arquitetura

Contexto Operacional

Para garantir a separação das camadas deve ser implementada um novo projeto para testar as referência de projetos dentro da solution

Contexto Técnico

Criar um novo projeto MSEmail.Tests.Architecture usando os pacotes FluentAssertions e NetArchTest.eNhancedEdition

Criar novo campo para definir a data de envio do email

Contexto Operacional

O objetivo deste item é criar um novo campo de data que defina quando o email deve ser enviado. Já que para permitir que um email seja atualizado, é preciso que ele não tenha sido enviado.

Contexto Técnico

Implementar um novo campo de SendDate (datetime) de quando o email deve ser enviado pelo sistema

Adicionar metodo para dar um update no Email

Contexto Operacional

É preciso permitir que o usuário atualize o subject e o body de um email ainda não enviado, além da data de envio.

Contexto Técnico

Ao passar um Id para o novo endpoint, permitir que o usuário atualize o subject, body e sendDate do email apenas se estiver no status de criado.

Adicionar cache com o Redis

Contexto Operacional

Com o objetivo de reduzir o numero de buscas ao banco, devemos implementar um sistema de cache por meio do Redis

Contexto Técnico

  • Deve ser criado a instância no redis
  • Adicionando as classe que vai disponibilizar essa instância para uso
  • Criar um CacheKeyGenerator para gerar a key com base na entidade que vai ser salva
  • Implementar métodos que permitam o salvamento e a busca de dados no redis

Implementar MS para Envio de Email

Contexto Operacional

É preciso separar o envio do email da API, de modo a permitir que o usuário consiga dar atualizações no email mesmo depois de enviado para API e que ele não seja imediamente enviado, já que o envio vai depender do campo SendDate

Contexto Técnico

Implementar um MS que faça a conexão com o banco e busque todos os emails com status criado e com a data de envio menor ou igual a data de execução do MS

Separar Login e User

Contexto Operacional

Para uma separação melhor de funções, será necessário separar o método de criação de usuário do controller de Login

Contexto Técnico

Criar um novo Controller que será responsável pelos métodos de usuários, atualmente apenas o de criar, mas com planos de implementar o de atualizar senha e excluir usuário

Criar metodos admin para Login

Contexto Operacional

Com o objetivo de implementar um sistema web que consuma a api, é preciso implementar métodos administrativos para gerenciar usuários

Contexto Técnico

  • Métodos Administrativos

  • Implementar um método para listar todos os usuários

  • Implementar um método para dar poderes administrativos a usuários

Validar que a data sendDate >= hoje

Contexto Operacional

Não devemos permitir que o usuário envie uma data menor que a data de hoje ao criar ou atualizar um email em rascunho

Contexto Técnino

Implementar uma validação para o campo de SendDate que impeça o envio de uma data menor que hoje e informe o usuário que insira uma data válida

Adicionar endpoint para pegar emails em rascunho

Contexto Operacional

Permitir que o usuário veja todos os seus emails criados que estão em status de draft

Contexto Técnico

Implementar um novo método no EmailController para buscar todos os emails em draft de usuário

Criar estrutura do FrontEnd

Contexto Técnico

Como maneira de melhorar o uso do sistema, será necessário implementar um sistema web que faça uso dos endpoints do MSEmail.API.

Contexto Operacional

Adicionar um novo projeto na solution do tipo ASP.NET Web App

Normalizar emails ao criar e fazer login

Contexto Operacional

É preciso que o ao enviar o email, seja ele maiúscula e minúscula o email tratado pelo sistema deve ser capaz de entender que é o mesmo usuário

Contexto Técnico

Transformar todas as letras do email ao criar o usuário ou fazer login antes de ir para o banco em minúsculas para garantir que são o mesmo item e não haverá duplicidade no código

Corrigir GetAll sem parâmetro para role "user"

Contexto Operacional

A implementação atual do método GetAll do EmailController permite a busca por itens com DeletionDate, porém ao validar se é "admin" ou "user", o user não consegue utilizar o parâmetro para retornar os emails

Contexto Técnico

Passar o parâmetro withDeletionDate para a busca GetEmailsByUserId para buscar todos os elementos ou apenas os sem deletionDate

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.