Skip to main content

Rotas de Usuário

Buscar usuário por ID

 A rota GET /user/<int:id_user> continua protegida e acessível somente a usuários autenticados, mas agora também recebe o e-mail de quem faz a requisição para validar permissões antes de retornar qualquer dado.

 Ao chegar uma chamada, o sistema primeiro busca o usuário logado pelo e-mail informado (email_user) e só então recupera o registro do usuário alvo pelo id_user. Dessa forma, garante-se que sempre há conhecimento de quem está solicitando as informações.

 Se não existir nenhum usuário com o ID fornecido, o método interrompe o fluxo e lança a exceção “Usuário não encontrado!”, resultando em um erro 500. Caso o solicitante tente acessar dados de outro ID e não tenha o cargo de administrador, a lógica agora identifica essa tentativa e retorna o erro “Você não possui permissão para acessar outros usuários”.

 Quando todas as validações passam, a função prossegue normalmente e devolve um status 200 com o JSON padrão, contendo a chave "message": "Usuário encontrado com sucesso" e o objeto do usuário obtido por user.as_dict().

Atualizar o usuário

 A função de atualização de usuário agora importa o bcrypt para lidar com alterações de senha e aprimora a verificação de permissões antes de processar qualquer alteração.

 No novo fluxo, o sistema primeiro identifica o solicitante pelo e-mail (email_user) e então busca o registro a ser atualizado pelo ID informado em data["id"]. Caso o registro não exista, lança imediatamente a exceção “Usuário não encontrado!”. Em seguida, valida se o solicitante é o próprio usuário ou um administrador; qualquer outra tentativa resulta em erro de permissão.

 As atualizações de e-mail, nome completo e cargo mantêm a lógica anterior, usando os valores de data somente quando fornecidos. A grande novidade é o tratamento de troca de senha: se o campo senha_nova estiver presente, a função exige senha_antiga e verifica sua validade com bcrypt.check_password_hash. Apenas quando a senha antiga confere é gerada a nova hash e atribuída ao usuário; caso contrário, dispara “Senha anterior incorreta.” ou “Senha antiga é obrigatória para alterar a senha.”

 Por fim, todas as alterações são confirmadas com db.session.commit(). Em caso de qualquer falha, o banco é revertido (rollback) e retorna JSON de erro com detalhes da exceção, mantendo o status 500. No sucesso, responde com status 200 e o JSON padrão contendo "message": "Usuário atualizado com sucesso!" e o objeto atualizado via user_update.as_dict().