7.4 KiB
7.4 KiB
📋 Atualizações: Perfil e Chat
✅ O que foi implementado:
1️⃣ Upload de Foto de Perfil
Frontend (apps/web/src/routes/(dashboard)/perfil/+page.svelte):
- ✅ Avatar maior com ring colorido
- ✅ Botão de edição visível ao passar o mouse (hover effect)
- ✅ Modal dedicado para upload de foto
- ✅ Preview da foto atual antes do upload
- ✅ Validação de tipo (imagens apenas) e tamanho (máx 5MB)
- ✅ Loading indicator durante o upload
- ✅ Mensagens de erro amigáveis
- ✅ Atualização automática do perfil após upload bem-sucedido
Backend:
- ✅ Já existente:
api.usuarios.gerarUrlUploadFotoPerfil - ✅ Já existente:
api.usuarios.atualizarPerfil - ✅ Já existente: Storage no Convex para imagens
Store (apps/web/src/lib/stores/auth.svelte.ts):
- ✅ Adicionados campos
avatar,fotoPerfil,fotoPerfilUrlna interface Usuario - ✅ Método
refresh()para atualizar dados do perfil sem relogar
2️⃣ Exibição do Cargo/Função
Localização:
Na página de perfil, abaixo do nome, aparece em destaque:
João Silva
Desenvolvedor Senior ← CARGO EM DESTAQUE
joao@exemplo.com
Implementação:
{#if funcionario?.descricaoCargo}
<p class="text-lg font-semibold text-base-content/80 mt-1">
{funcionario.descricaoCargo}
</p>
{/if}
- ✅ Fonte maior (text-lg)
- ✅ Negrito (font-semibold)
- ✅ Posicionado entre o nome e o email
- ✅ Só aparece se o cargo foi cadastrado
3️⃣ Sistema de Chat
Status: ✅ Já estava implementado e funcionando!
Funcionalidades disponíveis:
- ✅ Chat widget flutuante no canto inferior direito
- ✅ Conversas 1-para-1 entre usuários
- ✅ Notificações em tempo real
- ✅ Sino com contador de mensagens não lidas
- ✅ Avatar/foto dos usuários nas conversas
- ✅ Timestamps das mensagens
- ✅ Busca de usuários
- ✅ Interface moderna e responsiva
Backend do Chat (packages/backend/convex/chat.ts):
- ✅
criarConversa- Criar nova conversa - ✅
enviarMensagem- Enviar mensagem - ✅
listarConversas- Listar conversas do usuário - ✅
listarMensagens- Listar mensagens de uma conversa - ✅
marcarComoLida- Marcar mensagens como lidas - ✅
obterNaoLidas- Contar mensagens não lidas
🎯 Como usar:
Upload de Foto:
- Login → Canto superior direito → Perfil
- Passar mouse sobre o avatar
- Clicar no botão de câmera 📷
- Selecionar imagem
- Aguardar upload
- ✅ Foto atualizada!
Ver Cargo:
- Login → Canto superior direito → Perfil
- O cargo aparece automaticamente abaixo do nome
- Nota: O cargo precisa ter sido preenchido no cadastro do funcionário
Testar Chat:
- Criar 2 usuários no sistema (ou usar 2 existentes)
- Fazer login com Usuário 1
- Clicar no botão roxo flutuante 💬 (canto inferior direito)
- Iniciar conversa com Usuário 2
- Enviar mensagem
- Em outra aba/navegador, fazer login com Usuário 2
- Ver notificação no sino 🔔
- Responder mensagem
- Voltar para Usuário 1 e ver resposta em tempo real
🗂️ Arquivos Modificados:
Frontend:
-
apps/web/src/routes/(dashboard)/perfil/+page.svelte- Header redesenhado com avatar maior
- Botão de edição com hover
- Modal de upload de foto
- Exibição do cargo em destaque
- Badges de status e time
-
apps/web/src/lib/stores/auth.svelte.ts- Adicionados campos de foto na interface Usuario
- Método
refresh()para atualização do perfil
Documentação:
TESTE_CHAT_SISTEMA.md- Guia completo de testesATUALIZACOES_PERFIL_E_CHAT.md- Este arquivo (resumo)
🎨 Design Atualizado:
Antes:
[Ícone] Nome
email
Depois:
┌─────────────────────────────────────────────┐
│ [FOTO GRANDE] João Silva │
│ (com 📷) Desenvolvedor Senior │ ← NOVO!
│ joao@exemplo.com │
│ 🏷️ TI 👥 Equipe Dev │
│ 🏖️ Em Férias (se aplicável)│
└─────────────────────────────────────────────┘
Melhorias visuais:
- Avatar 50% maior (w-24 h-24)
- Ring colorido ao redor da foto
- Botão de edição com animação hover
- Cargo em fonte grande e negrito
- Badges organizados e informativos
- Layout mais espaçado e legível
🔧 Detalhes Técnicos:
Upload de Foto:
// Fluxo:
1. handleUploadFoto() → Validar arquivo
2. api.usuarios.gerarUrlUploadFotoPerfil() → Gerar URL
3. fetch(uploadUrl, {body: file}) → Upload para Convex Storage
4. api.usuarios.atualizarPerfil({fotoPerfil: storageId}) → Salvar ID
5. authStore.refresh() → Atualizar store local
6. ✅ Foto aparece automaticamente
Validações:
- Tipo: apenas image/* (JPG, PNG, GIF, etc.)
- Tamanho: máximo 5MB
- Tratamento de erros com mensagens amigáveis
- Loading state durante upload
Storage:
- Convex File Storage (
_storagetable) - URLs assinadas com expiração
- Suporte a qualquer formato de imagem
📝 Notas Importantes:
-
Cargo não aparece?
- Certifique-se de que o campo
descricaoCargofoi preenchido no cadastro do funcionário - Vá em: Recursos Humanos > Funcionários > Cadastro/Edição
- Certifique-se de que o campo
-
Foto não carrega?
- Verifique o tamanho do arquivo (máx 5MB)
- Confirme que é uma imagem válida
- Abra o console (F12) para ver erros
-
Chat não funciona?
- Confirme que o Convex está rodando
- Verifique se ambos os usuários estão logados
- O chat precisa de 2 usuários diferentes para testar
-
authStore.refresh() demora?
- É normal, pois faz uma query ao Convex
- O loading indicator mostra o progresso
- Após o upload, pode levar 1-2 segundos
✅ Checklist de Teste:
Upload de Foto:
- Passar mouse sobre avatar mostra botão de câmera
- Clicar no botão abre modal
- Modal mostra preview da foto atual
- Selecionar imagem válida funciona
- Selecionar arquivo muito grande mostra erro
- Selecionar arquivo não-imagem mostra erro
- Loading aparece durante upload
- Foto atualiza automaticamente após upload
- Fechar modal sem upload não quebra nada
Exibição do Cargo:
- Cargo aparece abaixo do nome
- Fonte é maior e em negrito
- Se não houver cargo, nada quebra
- Layout fica bonito e organizado
Chat (entre 2 usuários):
- Botão flutuante aparece no canto inferior direito
- Clicar abre o chat
- Pode criar nova conversa
- Pode selecionar usuário da lista
- Enviar mensagem funciona
- Mensagem aparece instantaneamente
- Outro usuário recebe notificação
- Sino mostra contador correto
- Clicar na notificação abre o chat
- Resposta aparece em tempo real
- Avatar/foto aparece corretamente
🚀 Próximos Passos (Opcional):
Funcionalidades que poderiam ser adicionadas:
- Crop/resize da imagem antes do upload
- Escolher entre foto customizada ou avatares pré-definidos
- Histórico de fotos anteriores
- Galeria de avatares do sistema
- Compressão automática de imagens grandes
- Upload via drag & drop
- Câmera web para tirar foto diretamente
Tudo pronto! 🎉
Siga o guia TESTE_CHAT_SISTEMA.md para testar passo a passo.