Skip to content
Snippets Groups Projects
Commit 9988d0a4 authored by gsf20's avatar gsf20
Browse files

Issue #67: ADD route for current user.

parent fc6f114e
Branches
No related tags found
1 merge request!63Issue #67: ADD route for current user.
......@@ -62,8 +62,6 @@ const userUpdateSchema = createSelectSchema(userTable)
.partial()
.required({ id: true })
const userProfileSchema = userModelSchema.omit({
id: true,
user_stats_id: true,
password: true,
birthday: true,
cpf: true,
......
import { describeRoute } from 'hono-openapi';
const meUserRoute = describeRoute({
method: "GET",
path: "/me",
tags: ["User"],
summary: "Obter o perfil do usuário autenticado.",
description: "Retorna as informações do perfil do usuário que está autenticado com o JWT.",
request: {
headers: {
"Authorization": {
type: "string",
description: "Token JWT do usuário autenticado. Deve ser passado no cabeçalho da requisição."
}
}
},
response: {
200: {
description: "Perfil do usuário retornado com sucesso.",
content: {
"application/json": {
user: {
type: "object",
properties: {
id: { type: "string", description: "ID único do usuário." },
name: { type: "string", description: "Nome do usuário." },
email: { type: "string", description: "Email do usuário." },
// Adicione outros campos do perfil, se necessário.
}
}
}
}
},
400: {
description: "Erro ao tentar encontrar o usuário.",
content: {
"application/json": {
status: { type: "string", example: "error" },
message: { type: "string", example: "could not find the user" },
code: { type: "number", example: 400 },
path: { type: "string", example: "/me" },
suggestion: { type: "string", example: "login again" }
}
}
}
}
});
const followUserRoute = describeRoute({
method: "POST",
path: "/follow",
tagss: ["User"],
summary: "Seguir um usuário.",
description: "Cria uma relação de seguidor entre dois usuários, aumentando o número de seguidores e seguidos.",
request: {
......@@ -39,6 +85,7 @@ const followUserRoute = describeRoute({
const unfollowUserRoute = describeRoute({
method: "POST",
path: "/unfollow",
tags: ["User"],
summary: "Deixar de seguir um usuário.",
description: "Remove a relação de seguidor entre dois usuários, reduzindo o número de seguidores e seguidos.",
request: {
......@@ -74,6 +121,7 @@ const followUserRoute = describeRoute({
const getFollowsRoute = describeRoute({
method: "GET",
path: "/follows/:id",
tags: ["User"],
summary: "Listar usuários seguidos.",
description: "Retorna a lista de usuários que o ID especificado segue.",
request: {
......@@ -100,6 +148,7 @@ const followUserRoute = describeRoute({
const getFollowersRoute = describeRoute({
method: "GET",
path: "/followers/:id",
tags: ["User"],
summary: "Listar seguidores.",
description: "Retorna a lista de usuários que seguem o ID especificado.",
request: {
......@@ -126,6 +175,7 @@ const followUserRoute = describeRoute({
const getUsersRoute = describeRoute({
method: "GET",
path: "/users",
tags: ["User"],
summary: "Listar todos os usuários.",
description: "Retorna a lista de todos os usuários cadastrados.",
response: {
......@@ -146,6 +196,7 @@ const followUserRoute = describeRoute({
const getUserByUsernameRoute = describeRoute({
method: "GET",
path: "/:username",
tags: ["User"],
summary: "Obter detalhes de um usuário pelo nome de usuário.",
description: "Retorna as informações de um usuário com base no seu nome de usuário.",
request: {
......@@ -170,6 +221,7 @@ const followUserRoute = describeRoute({
const updateUserRoute = describeRoute({
method: "POST",
path: "/update",
tags: ["User"],
summary: "Atualiza as informações de um usuário.",
description: "Recebe os novos dados do usuário e atualiza no banco de dados.",
request: {
......@@ -208,6 +260,7 @@ const updateUserRoute = describeRoute({
const confirmUserRoute = describeRoute({
method: "POST",
path: "/confirmation/:email",
tags: ["User"],
summary: "Confirma o e-mail do usuário.",
description: "Atualiza o status de confirmação do usuário baseado no e-mail informado.",
request: {
......@@ -233,6 +286,7 @@ const updateUserRoute = describeRoute({
const reactivateUserRoute = describeRoute({
method: "POST",
path: "/reactivate/:email",
tags: ["User"],
summary: "Reativa um usuário inativo.",
description: "Altera o status do usuário para ativo e atualiza a data de reativação.",
request: {
......@@ -259,6 +313,7 @@ const updateUserRoute = describeRoute({
const deleteUserRoute = describeRoute({
method: "POST",
path: "/delete/:id",
tags: ["User"],
summary: "Desativa um usuário.",
description: "Marca um usuário como inativo e registra a data de exclusão.",
request: {
......@@ -284,6 +339,7 @@ const updateUserRoute = describeRoute({
const systemDeleteUserRoute = describeRoute({
method: "POST",
path: "/delete/system/:id",
tags: ["User"],
summary: "Exclui um usuário permanentemente.",
description: "Remove um usuário do banco de dados de forma definitiva.",
request: {
......@@ -306,8 +362,7 @@ const updateUserRoute = describeRoute({
});
export
{
export {
followUserRoute,
unfollowUserRoute,
getFollowsRoute,
......@@ -318,5 +373,6 @@ export
confirmUserRoute,
reactivateUserRoute,
deleteUserRoute,
systemDeleteUserRoute
systemDeleteUserRoute,
meUserRoute
}
\ No newline at end of file
......@@ -20,7 +20,8 @@ import {
confirmUserRoute,
reactivateUserRoute,
deleteUserRoute,
systemDeleteUserRoute
systemDeleteUserRoute,
meUserRoute
} from "../documentation/userDescriber"
const service = Container.get(UserService)
......@@ -28,6 +29,28 @@ const followService = Container.get(FollowRelationService)
const userStatsService = Container.get(UserStatsService)
export const userRouter = honoWithJwt()
.get('/me', meUserRoute,
async (c) => {
const userId = c.get('jwtPayload').id;
try {
const user = userSchemas.userProfileSchema.parse( await service.findById(userId));
return c.json({ user });
} catch {
return c.json(
createApexError({
status: 'error',
message: 'could not find the user',
code: HttpStatus.BAD_REQUEST,
path: c.req.routePath,
suggestion: 'login again'
}),
HttpStatus.BAD_REQUEST)
}
}
)
.post('/follow/:user_to_follow_id', followUserRoute,
async (c) => {
try {
......@@ -303,4 +326,3 @@ export const userRouter = honoWithJwt()
)
}
})
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment