Skip to content

[SCRUM-56] Integração com a API da lista de avaliações#28

Merged
FuscaRetratil merged 6 commits intodevelopfrom
scrum-56-lista_avaliacoes
Apr 26, 2026
Merged

[SCRUM-56] Integração com a API da lista de avaliações#28
FuscaRetratil merged 6 commits intodevelopfrom
scrum-56-lista_avaliacoes

Conversation

@ronaldo-ribeirof
Copy link
Copy Markdown
Contributor

Implementei a integração completa da tela de Avaliações (Reviews) no painel Minha Empresa, permitindo que microempreendedores visualizem todas as avaliações recebidas de seus clientes, organizadas por filtros de sentimento (Positiva, Negativa, Neutra, Sugestão, Dúvida).

Implementações

1. Serviço de Usuários (services/userService.ts)

  • Nova função getUserById(userId) que busca dados do usuário pela API
  • Retorna interface User com id_usuario, nome e email
  • Tratamento de erros com fallback para caso de usuário não encontrado

2. Enriquecimento de Assessments (services/assessmentService.ts)

  • Interface Assessment atualizada com campo opcional usuario_nome
  • Permite armazenar nome do usuário para exibição na UI

3. Hook com Enriquecimento de Dados (hooks/useAssessments.ts)

  • Hook useAssessments(enterpriseId) carrega avaliações da API
  • Função enrichAssessmentsWithUserNames() realiza parallel GET requests para buscar nomes dos usuários
  • Retorna assessments com usuario_nome populado (ou "Anônimo" como fallback)
  • Implementa useFocusEffect para recarregar dados ao voltar para a tela

4. Filtros Responsivos (components/MyBusiness/reviewsFilter/main.tsx)

  • Grid centralizada com flex-row flex-wrap justify-center items-center
  • 6 filtros: Todos, Positiva, Negativa, Neutra, Sugestão, Dúvida
  • Botões com estilo ativo/inativo e cores do theme
  • Suporta seleção e callback para parent component

5. Tela de Avaliações (app/(mybusiness)/reviews.tsx)

  • Integração com hook useAssessments para carregar dados reais da API
  • Filtro client-side por ReviewFilterType
  • Estados de loading (spinner), erro e vazio
  • Exibe nome real do avaliador em vez de UUID
  • Responsividade completa

6. Card de Avaliação (components/MyBusiness/reviewCard/main.tsx)

  • Exibe nome do avaliador, tag de sentimento colorida e texto do comentário
  • Tag colorida com background e texto baseado em SENTIMENT_CONFIG do theme
  • Função getSimpleName() para extrair primeiro nome + último sobrenome
  • Suporta até 3 linhas de comentário com truncation

Design System

Integração com constants/theme.ts usando SENTIMENT_CONFIG:
Mudamos um pouco do source do figma diante de um alinhamento que fiz com guilherme. Ao invés de apensas Elogios, Dicas e Dúvidas temos todos esses campos.

Tipo Cor de Fundo Cor de Texto Label
Positiva #E0F9F0 (Verde) #00896B Elogio
Negativa #FDE8E8 (Vermelho) #C62828 Crítica
Neutra #F5F5F5 (Cinza) #424242 Neutra
Sugestão #FFF3E0 (Laranja) #E65100 Sugestão
Dúvida #E1F5FE (Azul) #0D47A1 Dúvida

Futuro

Futuramente vamos precisar fazer apenas um ajuste para poder receber a data de criação, mas optei por implementar sem no momento

  1. Adicionar campo created_at na tabela avaliacoes (DateTime, auto-populated)
  2. Ordenação decrescente no endpoint /assessments/by-enterprise/{id} por created_at

@ronaldo-ribeirof ronaldo-ribeirof self-assigned this Apr 24, 2026
@ronaldo-ribeirof ronaldo-ribeirof changed the title Scrum 56 lista avaliacoes [SCRUM-56] Integração com a API da lista de avaliações Apr 24, 2026
Copy link
Copy Markdown
Contributor

@FuscaRetratil FuscaRetratil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Análise concluída. O PR está bem estruturado e segue os padrões do projeto.

Pontos positivos:

  • Excelente centralização do SENTIMENT_CONFIG em constants/theme.ts, garantindo consistência visual em toda a aplicação.
  • Filtros locais na tela
    eviews.tsx funcionais com boa experiência ao usuário.

Ressalvas para atenção:

  1. Performance (N+1 no Frontend): O hook useAssessments realiza uma requisição getUserById individual para cada avaliação cujo usuario_nome não vem preenchido. Com listas grandes, isso pode gerar sobrecarga de requisições HTTP.

    • Sugestão: Avaliar se o backend pode retornar o nome do autor diretamente no endpoint /assessments/by-enterprise/{id}, eliminando a necessidade de enriquecimento no frontend.
  2. Débito Técnico: A lógica do getSimpleName no ReviewCard funciona bem para o cenário atual, mas pode precisar de revisão para nomes compostos mais complexos no futuro.

Nota: As variáveis hardcoded (ENTERPRISE_ID) foram ignoradas nesta revisão, pois a autenticação ainda está pendente de implementação.

@FuscaRetratil FuscaRetratil merged commit f167d92 into develop Apr 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants