@@ -5,10 +5,12 @@ import { ErroAplicacao } from "@/shared/errors/erro-aplicacao";
55
66import type { PerfilSocialService } from "./perfil-social.service" ;
77
8+ // Parametro de rota: id do usuario cujo perfil social sera consultado.
89type PerfilSocialParams = {
910 usuarioId : string ;
1011} ;
1112
13+ // Filtros e paginacao aceitos na listagem de amigos.
1214type ListarAmigosQuery = {
1315 page ?: number ;
1416 limit ?: number ;
@@ -18,15 +20,31 @@ type ListarAmigosQuery = {
1820
1921type RequisicaoAutenticada = Pick < Request , "usuario" | "headers" > ;
2022
23+ /**
24+ * Controller HTTP do perfil social.
25+ *
26+ * Valida os dados da requisicao, delega ao PerfilSocialService e devolve a resposta
27+ * em JSON, encaminhando erros ao middleware central via next.
28+ */
2129export class PerfilSocialController {
2230 constructor ( private readonly perfilSocialService : PerfilSocialService ) { }
2331
32+ /**
33+ * GET da lista de amigos do usuario logado.
34+ *
35+ * Aceita paginacao e filtros por nome/nickname na query string.
36+ *
37+ * @param request Requisicao Express com os filtros de listagem.
38+ * @param response Resposta Express.
39+ * @param next Encaminha erros ao middleware central.
40+ */
2441 listarAmigos = async (
2542 request : Request < unknown , unknown , unknown , ListarAmigosQuery > ,
2643 response : Response ,
2744 next : NextFunction ,
2845 ) => {
2946 try {
47+ // Resolve usuario e token e repassa os filtros (request.query) ao service.
3048 const usuario = this . obterUsuario ( request ) ;
3149 const authorization = this . obterAuthorization ( request ) ;
3250 const resultado = await this . perfilSocialService . listarAmigosSociais (
@@ -37,16 +55,25 @@ export class PerfilSocialController {
3755
3856 return response . status ( 200 ) . json ( resultado ) ;
3957 } catch ( error ) {
58+ // Erros (inclusive 401 de validacao) vao para o middleware central.
4059 return next ( error ) ;
4160 }
4261 } ;
4362
63+ /**
64+ * GET do perfil social de um amigo especifico. O usuarioId vem na rota.
65+ *
66+ * @param request Requisicao Express tipada com o parametro usuarioId.
67+ * @param response Resposta Express.
68+ * @param next Encaminha erros ao middleware central.
69+ */
4470 buscarPerfil = async (
4571 request : Request < PerfilSocialParams > ,
4672 response : Response ,
4773 next : NextFunction ,
4874 ) => {
4975 try {
76+ // O usuarioId da rota ja foi validado pela camada de rota antes de chegar aqui.
5077 const usuario = this . obterUsuario ( request ) ;
5178 const authorization = this . obterAuthorization ( request ) ;
5279 const perfil = await this . perfilSocialService . buscarPerfilSocial (
@@ -55,15 +82,24 @@ export class PerfilSocialController {
5582 request . params . usuarioId ,
5683 ) ;
5784
85+ // Envolve o perfil no envelope padrao (mensagem + dados) da API.
5886 return response . status ( 200 ) . json ( {
5987 mensagem : "Perfil social encontrado." ,
6088 dados : perfil ,
6189 } ) ;
6290 } catch ( error ) {
91+ // O 404 de "nao e amigo" tambem cai aqui e e formatado pelo middleware central.
6392 return next ( error ) ;
6493 }
6594 } ;
6695
96+ /**
97+ * Exige que o usuario ja tenha sido autenticado pelo middleware.
98+ *
99+ * @param request Requisicao que deveria conter o usuario autenticado.
100+ * @returns O usuario autenticado.
101+ * @throws ErroAplicacao 401 quando nao ha usuario na requisicao.
102+ */
67103 private obterUsuario ( request : RequisicaoAutenticada ) {
68104 if ( ! request . usuario ?. id ) {
69105 throw new ErroAplicacao ( {
@@ -76,6 +112,13 @@ export class PerfilSocialController {
76112 return request . usuario ;
77113 }
78114
115+ /**
116+ * Recupera o header Authorization a ser repassado aos servicos internos.
117+ *
118+ * @param request Requisicao de onde o header e lido.
119+ * @returns O valor do header Authorization.
120+ * @throws ErroAplicacao 401 quando o header esta ausente.
121+ */
79122 private obterAuthorization ( request : RequisicaoAutenticada ) : string {
80123 const authorization = request . headers . authorization ;
81124
0 commit comments