Sistema de Autenticação
Sistema de Cadastro e Validação de Usuários
Cadastro de Usuários
Registro de Empregado
- Endpoint:
/user/register/employee
- Método:
POST
- Descrição: Registra um novo empregado no sistema.
Processo:
- O cliente envia uma requisição
POST
com os dados do novo empregado: - O servidor lê o estado da aplicação (
AppStateType
) de forma assíncrona. - A função
fetch_employee_role
verifica se o papel (role
) fornecido é válido. - Se o papel for inválido, o servidor retorna um erro
400 Bad Request
: - O repositório de empregados (
app_state.repositories.employee
) cria um novo registro de empregado com os dados fornecidos. - Se a criação falhar, o servidor retorna um erro
500 Internal Server Error
: - O servidor remove o campo
password
da resposta por questões de segurança. - O servidor retorna uma resposta
201 Created
com os dados do empregado registrado (sem a senha):
Registro de Paciente
- Endpoint:
/user/register/patient
- Método:
POST
- Descrição: Registra um novo paciente no sistema.
Processo:
- O cliente envia uma requisição
POST
com os dados do novo paciente: - O servidor lê o estado da aplicação (
AppStateType
) de forma assíncrona. - O repositório de pacientes (
app_state.repositories.patient
) cria um novo registro de paciente com os dados fornecidos. - Se a criação falhar, o servidor retorna um erro
500 Internal Server Error
: - O servidor remove o campo
password
da resposta por questões de segurança. - O servidor retorna uma resposta
201 Created
com os dados do paciente registrado (sem a senha):
Validação de Usuários (Login)
Login de Usuário
- Endpoint:
/user/login
- Método:
POST
- Descrição: Autentica um usuário (empregado ou paciente) no sistema.
Processo:
- O cliente envia uma requisição
POST
com as credenciais do usuário: - O servidor lê o estado da aplicação (
AppStateType
) de forma assíncrona. - O servidor tenta encontrar um empregado com as credenciais fornecidas (
email
epassword
).- Se encontrar, converte os dados do empregado para JSON.
- Se a conversão falhar, o servidor retorna um erro
500 Internal Server Error
:
- Se não encontrar um empregado, o servidor tenta encontrar um paciente com as mesmas credenciais.
- Se encontrar, converte os dados do paciente para JSON.
- Se a conversão falhar, o servidor retorna um erro
500 Internal Server Error
:
- Se não encontrar nenhum usuário com as credenciais fornecidas, o servidor retorna um erro
401 Unauthorized
: - O servidor armazena o UUID do usuário autenticado na sessão utilizando
Redis
. - O servidor remove o campo
password
da resposta por questões de segurança. - O servidor retorna uma resposta
200 OK
com os dados do usuário autenticado (sem a senha):
Recuperação de Informações do Usuário
Informação do Usuário Autenticado
- Endpoint:
/user/info
- Método:
GET
- Descrição: Retorna informações sobre o usuário autenticado.
Processo:
- O cliente envia uma requisição
GET
com as informações da sessão. - O servidor lê o estado da aplicação (
AppStateType
) de forma assíncrona. - O servidor obtém o UUID do usuário autenticado a partir das informações da sessão.
- O servidor tenta encontrar um empregado ou paciente correspondente ao UUID.
- Se encontrar, converte os dados para JSON.
- Se a conversão falhar, o servidor retorna um erro
500 Internal Server Error
:
- Se não encontrar nenhum usuário com o UUID fornecido, o servidor retorna um erro
401 Unauthorized
: - O servidor remove o campo
password
da resposta por questões de segurança. - O servidor retorna uma resposta
200 OK
com os dados do usuário autenticado (sem a senha):
Listagem de Papéis
Listagem de Papéis de Empregados
- Endpoint:
/user/roles
- Método:
GET
- Descrição: Retorna uma lista de papéis de empregados.
Processo:
- O cliente envia uma requisição
GET
. - O servidor cria uma lista de papéis possíveis:
- O servidor retorna uma resposta
200 OK
com a lista de papéis em formato JSON.
Gerenciamento de Sessões
Armazenamento de Sessões
- As sessões são gerenciadas usando o Redis.
- Ao fazer login, o servidor armazena o UUID do usuário na sessão do Redis.
- As sessões são identificadas por um ID de sessão único.
Segurança
Remoção de Senhas
- As respostas JSON nunca incluem o campo
password
para evitar exposição de dados sensíveis.
Verificação de Papéis
- A função
fetch_employee_role
é usada para garantir que apenas papéis válidos sejam atribuídos a empregados.
Autorização
- As operações sensíveis, como obtenção de informações do usuário autenticado, verificam a sessão atual para garantir que o usuário esteja autenticado.