Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

SeraphyBR/email_validator

Repository files navigation

email_validator

Sobre

Essa é uma API feita em Rust, para um desafio de processo seletivo, que deve verificar se um determinado email é valido e confiavel, possui 2 métodos de validação, o v1 que utiliza de código próprio (básico) para validar um email, e o v3 que faz consulta a outra API para determinar se é valido.

O código foi construido usando o framework web Rocket na versão 0.5 para uso de async e await. Foi utilizado o SQLx para comunicação com o banco Postgres. E reqwest para requisições a API EVA

TODO's

  • Requisitos:
    • Criar servidor com duas rotas de acesso / e /health.
    • Adicionar rota de validação v1 (código próprio).
    • Adicionar rota de validação v3 (API EVA).
    • Criar banco de dados com as tabelas email_data_v1 e email_data_v3
    • Atualizar rotas para salvar os dados nas tabelas
    • Criar rotas com query string para consultas nas tabelas
    • Suporte a docker
    • Atualizar a rota de validação v3 para funcionar com concorrência, nos casos de um array.
  • Extras:
    • Adicionar mais condições para um email válido na rota de validação v1
    • Implementar testes unitários para as rotas.
    • Fazer tratamento de erros e remover os .unwrap().

Como compilar e executar

Linux, Windows e MacOS

  • Instale o PostgreSQL
  • Instale o Rustup (ele gerencia as ferramentas do rust)
  • (Em sistemas Ubuntu, recomendo rodar: sudo apt install build-essential)
  • Rode rustup update nightly
  • Verifique se os componentes, como cargo estão presentes no PATH do seu sistema
  • Rode cargo install sqlx-cli --no-default-features --features postgres
  • Clone esse projeto
  • Dentro do diretorio, copie o arquivo .env.example para um novo arquivo .env
    • Modifique de acordo com a configuração do seu postgres (usuario e senha)
  • Rode sqlx database create e sqlx migrate run
    • Isso vai criar o banco no postgres se não existir, e rodar as migrations
  • Se tudo der certo, voce está pronto para rodar: cargo run ou cargo run --release
    • O comando vai compilar e executar o binário gerado, o segundo comando irá aplicar o perfil release, e então aplicar as otimizações de código (mais demorado)

Docker

  • Instale o docker e o docker-compose
  • Clone esse projeto
  • Entre no diretorio do projeto e rode docker-compose up
  • Aguarde a criação dos containers e o projeto compilar (essa fase é demorada)
  • Se tudo estiver certo, a api estara rodando em http://localhost:8080/

Rotas

URL /
Metodo GET
Paramêtros da URL n/a
Resposta 200
{
    "status": "OK",
    "code": 200,
    "results": []
}
URL /health
Metodo GET
Paramêtros da URL n/a
Resposta 200
{
    "status": "OK",
    "code": 200,
    "results": [
        {
            "message": "Servidor executando na porta 8080"
        },
    ]
}
URL /mail/db/v1
Metodo GET
Paramêtros da URL Opcionais
id=[integer]
email_address=[string]
domain=[string]
valid_syntax=[boolean]
Exemplo
/mail/db/[email protected]&valid_syntax=true
Resposta 200
{
    "status": "OK",
    "code": 200,
    "results": [
        {
            "id": 1,
            "email_address": "[email protected]",
            "domain": "mail",
            "valid_syntax": true,
            "created_at": "2021-05-12T11:37:01.684178Z"
        },
    ]
}
URL /mail/db/v3
Metodo GET
Paramêtros da URL Opcionais
id=[integer]
email_address=[string]
domain=[string]
valid_syntax=[boolean]
disposable=[boolean]
webmail=[boolean]
deliverable=[boolean]
catch_all=[boolean]
gibberish=[boolean]
spam=[boolean]
Exemplo
/mail/db/[email protected]&valid_syntax=true
Resposta 200
{
    "status": "OK",
    "code": 200,
    "results": [
        {
            "email_address": "[email protected]",
            "domain": "gmail.com",
            "valid_syntax": true,
            "disposable": false,
            "webmail": true,
            "deliverable": true,
            "catch_all": false,
            "gibberish": false,
            "spam": false,
            "created_at": "2021-05-12T11:18:11.413685Z"
        }
    ]
}
URL /mail/validation/v1
Metodo POST
Body da Requisição
{
    "email_address": "[email protected]",
    "domain": "mail"
}
Resposta 200
{
    "status": "OK",
    "code": 200,
    "results": [
        {
            "email_address": "[email protected]",
            "domain": "mail",
            "valid_syntax": true,
        }
    ]
}
Observação Pode ser tambem enviado um array no body
URL /mail/validation/v3
Metodo POST
Body da Requisição
{
    "email_address": "[email protected]",
}
Resposta 200
{
    "status": "OK",
    "code": 200,
    "results": [
        {
            "email_address": "[email protected]",
            "domain": "gmail.com",
            "valid_syntax": true,
            "disposable": false,
            "webmail": true,
            "deliverable": true,
            "catch_all": false,
            "gibberish": false,
            "spam": false
        }
    ]
}
Observação Pode ser tambem enviado um array no body.
Esse método ira demorar mais, devido a consulta a api Eva.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published