fga-eps-mds / 2019.2-Vsign

O Vsign realiza assinatura através de gravação de vídeo com análise automática e notificação dos resultados em tempo real. ✅ Servidor de homologação: https://develop.dar0d46dq2rcb.amplifyapp.com/ ✅ Servidor de produção: https://master.dar0d46dq2rcb.amplifyapp.com/ ✅ Documentação do projeto:
https://fga-eps-mds.github.io/2019.2-Vsign/
GNU General Public License v3.0
6 stars 9 forks source link

Enviar email quando novo contrato é criado #181

Closed Foxtrot40 closed 4 years ago

Foxtrot40 commented 4 years ago

Descrição
Criei o método send_email_new_contract para ser executado antes do contrato ser criado, com ajuda do helper before_create, esse método apenas envia um email para o usuário usando o SendgridMailer. Para criar a rota que deverá ser enviada para o botão do email tem o método base_url que checa se o ambiente é de desenvolvimento, retornando localhost, ou retorna a url de produção.

Checklist

Foxtrot40 commented 4 years ago

@kairon-v por favor dê uma olhada na função /backend/models/contract.rb#base_url, pois estou com dúvida se a escolha será correta nos diferentes ambientes da aplicação. No momento só está indo pra localhost ou ambiente de homologação.

kairon-v commented 4 years ago

Você pode declarar a URL desejada no routes.rb com o objetivo de usar apenas os helpers, sem a necessidade de criar um método na model (isso não é nem recomendado).

O rails conta com uma opção para definir o domínio direto no arquivo do ambiente. Ex. no arquivo config/environments/development.rb:

config.action_mailer.default_url_options = { host: 'localhost', port: '3000' }
Foxtrot40 commented 4 years ago

Você pode declarar a URL desejada no routes.rb com o objetivo de usar apenas os helpers, sem a necessidade de criar um método na model (isso não é nem recomendado).

O rails conta com uma opção para definir o domínio direto no arquivo do ambiente. Ex. no arquivo config/environments/development.rb:

config.action_mailer.default_url_options = { host: 'localhost', port: '3000' }

No caso @kairon-v eu receio usar essa configuração pois pode gerar conflito no futuro, já que ela é feita para determinar a url da API e não do frontend. Também não posso usar o helper porque a URL do frontend é bem diferente da que eu conseguiria com os helpers (contracts/1 ao invés de introduction/:token).

kairon-v commented 4 years ago

Acredito que o receio com relação a conflitos não faz sentido, pois a integração da API + Frontend é via GraphQL.

O Rails já oferece uma forma de definir domínio por ambiente, helpers para construir urls com estes domínios de maneira automática. Por que não utilizar?

Além disso, da forma que está agora, fere um princípio de S.O.L.I.D chamado Single Responsability Principle. Está sendo adicionado a uma model a responsabilidade de definir a URL que vai ser utilizada em um email. O método não usa nenhum atributo do objeto.

Se precisarmos fazer o mesmo para outros emails?

Por isso, sugiro definir o parâmetro config.action_mailer.default_url_options em cada ambiente e adicionar a rota:

get '/login/:token', to: redirect('/'), as: :login_by_token

O próprio framework irá criar um helper: login_by_token_path.

Em routes.rb.