refactor: enhance chat components with type safety and response functionality

- Updated type definitions in ChatWindow and MessageList components for better type safety.
- Improved MessageInput to handle message responses, including a preview feature for replying to messages.
- Enhanced the chat message handling logic to support message references and improve user interaction.
- Refactored notification utility functions to support push notifications and rate limiting for email sending.
- Updated backend schema to accommodate new features related to message responses and notifications.
This commit is contained in:
2025-11-04 20:36:01 -03:00
parent 15374276d5
commit 12db52a8a7
23 changed files with 3195 additions and 503 deletions

View File

@@ -0,0 +1,75 @@
<script lang="ts">
import { onMount } from "svelte";
import { useConvexClient } from "convex-svelte";
import { api } from "@sgse-app/backend/convex/_generated/api";
import { authStore } from "$lib/stores/auth.svelte";
import {
registrarServiceWorker,
solicitarPushSubscription,
subscriptionToJSON,
removerPushSubscription,
} from "$lib/utils/notifications";
const client = useConvexClient();
onMount(async () => {
// Aguardar usuário estar autenticado
const checkAuth = setInterval(async () => {
if (authStore.usuario) {
clearInterval(checkAuth);
await registrarPushSubscription();
}
}, 500);
// Limpar intervalo após 30 segundos (timeout)
setTimeout(() => {
clearInterval(checkAuth);
}, 30000);
return () => {
clearInterval(checkAuth);
};
});
async function registrarPushSubscription() {
try {
// Solicitar subscription
const subscription = await solicitarPushSubscription();
if (!subscription) {
console.log(" Push subscription não disponível ou permissão negada");
return;
}
// Converter para formato serializável
const subscriptionData = subscriptionToJSON(subscription);
// Registrar no backend
const resultado = await client.mutation(api.pushNotifications.registrarPushSubscription, {
endpoint: subscriptionData.endpoint,
keys: subscriptionData.keys,
userAgent: navigator.userAgent,
});
if (resultado.sucesso) {
console.log("✅ Push subscription registrada com sucesso");
} else {
console.error("❌ Erro ao registrar push subscription:", resultado.erro);
}
} catch (error) {
console.error("❌ Erro ao configurar push notifications:", error);
}
}
// Remover subscription ao fazer logout
$effect(() => {
if (!authStore.usuario) {
removerPushSubscription().then(() => {
console.log("Push subscription removida");
});
}
});
</script>
<!-- Componente invisível - apenas lógica -->