/aula-minimal-desafio1

Repositório de Código do Desafio 1 - Curso Microsserviços

Primary LanguageC#

Auth App

DeliveryFIT - Autenticação

.NET Core 6 C Sharp JWT SQLite

Descrição

Neste desafio você deve desenvolver uma API de autenticação utilizando o .NET Core 6 Minimal APIs.

🚀 Tecnologias

🔰 Instalação

$ dotnet restore

🚀 Rodando a API

$ dotnet run

🧠 Desafios

POST /sign-up

A rota deve receber um username, password e name dentro do Body da requisição e criar um novo usuário dentro do banco de dados utilizando os dados recebidos.

{
  "username": "fulano123",
  "password": "12345678",
  "name": "Fulano de Tal"
}
  • Receber username, password e name.
  • Cria a base do usuário no banco de dados.
  • Criar usuário no banco de dados.
  • isAdmin deve ser false por padrão.
  • Rota deve retornar o usuário criado na requisição
    • Não deve conter isAdmin
    • Não deve conter password
  • Validar dados recebidos
    • username deve ter no mínimo 5 dígitos
    • password deve ter no mínimo 8 dígitos
    • name deve ter no mínimo 3 dígitos
  • Requisições inválidas devem retornar erro padronizado
    • Status de resposta deve ser 400
    • username existente deve retornar status 400
  • Criptografar senha do usuário antes de salvar no banco de dados

Modelo de Usuário para Banco de dados

public record User
{
    public Guid id { get; init; }
    public string username { get; init; } = default!;
    public string password { get; init; } = default!;
    public string name { get; init; } = default!;
    public Boolean isAdmin { get; init; }
}

Modelo de Requisição Bem Sucedida

{
  "id": "f1d5e317-cfbb-4111-b38b-819b7c4c9cf8",
  "username": "fulano123",
  "name": "Fulano de Tal"
}

Modelo de Requisição com Erro

{
  "title": "Bad Request",
  "status": 400,
  "detail": "Usuario já registrado"
}

POST /sign-in

A rota deve receber um username e password dentro do Body da requisição e validar os dados, retornando um Token JWT caso estejam válidos.

{
  "username": "fulano123",
  "password": "12345678"
}
  • Receber username, password
  • Validar dados recebidos
    • username deve ter no mínimo 5 dígitos
    • password deve ter no mínimo 8 dígitos
  • Encontrar usuário no Banco de Dados
  • Verificar password da requisição com Hash no Banco de Dados
  • Requisições inválidas devem retornar erro padronizado
    • Status de resposta deve ser 400
    • username não existente deve retornar status 400
  • Requisições válidas devem retornar Token JWT para o cliente
    • Token deve conter informações do usuário

Modelo de Requisição Bem Sucedida

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiQW5kcmUgU2FtcGFpbyIsInJvbGUiOiJVc2VyIiwibmFtZWlkIjoiZDRjZDA4MzUtYTFkMy00MTAxLWE2YjEtZTIyZWM0YzUxNDE1IiwibmJmIjoxNjQ3NTI2ODQ4LCJleHAiOjE2NDc1MzQwNDgsImlhdCI6MTY0NzUyNjg0OH0.ar2hJrwY3zG-g7FbupjvgGtLfjLoZo7LQ88epA9VW0k"

📅 Entrega

Esse desafio deve ser entregue a partir da plataforma Edx, enviado em formato de repositório de código, plataforma de edição de código online ou zip. Lembre-se de manter o arquivo público antes de compartilhar com o instrutor.

Feito com 💜 por Andre Sampaio