-- Migration: Table delivered_status pour le système de delivered status -- Création: 2025-01-27 -- Version: 1.0.0 -- ================================================================ -- TABLE DELIVERED STATUS -- ================================================================ -- Table pour tracker les delivered status (messages reçus mais pas encore lus) CREATE TABLE IF NOT EXISTS delivered_status ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), message_id UUID NOT NULL REFERENCES messages(id) ON DELETE CASCADE, user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE, delivered_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), -- Un utilisateur ne peut avoir qu'un seul delivered status par message UNIQUE(message_id, user_id) ); -- ================================================================ -- INDEX POUR PERFORMANCE -- ================================================================ -- Index pour rechercher les delivered status par message CREATE INDEX IF NOT EXISTS idx_delivered_status_message_id ON delivered_status(message_id); -- Index pour rechercher les delivered status par utilisateur CREATE INDEX IF NOT EXISTS idx_delivered_status_user_id ON delivered_status(user_id); -- Index pour rechercher les delivered status par conversation CREATE INDEX IF NOT EXISTS idx_delivered_status_conversation_id ON delivered_status(conversation_id); -- Index composite pour les requêtes fréquentes (dernière délivrance dans une conversation) CREATE INDEX IF NOT EXISTS idx_delivered_status_conversation_user ON delivered_status(conversation_id, user_id, delivered_at DESC); -- Index pour les requêtes de comptage de messages non délivrés CREATE INDEX IF NOT EXISTS idx_delivered_status_message_user ON delivered_status(message_id, user_id); -- ================================================================ -- TRIGGERS POUR MISE À JOUR AUTOMATIQUE -- ================================================================ CREATE TRIGGER update_delivered_status_updated_at BEFORE UPDATE ON delivered_status FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- ================================================================ -- COMMENTAIRES POUR DOCUMENTATION -- ================================================================ COMMENT ON TABLE delivered_status IS 'Table des delivered status pour tracker quels messages ont été délivrés (reçus) par quels utilisateurs'; COMMENT ON COLUMN delivered_status.message_id IS 'ID du message délivré'; COMMENT ON COLUMN delivered_status.user_id IS 'ID de l''utilisateur qui a reçu le message'; COMMENT ON COLUMN delivered_status.conversation_id IS 'ID de la conversation (pour optimiser les requêtes)'; COMMENT ON COLUMN delivered_status.delivered_at IS 'Timestamp de la délivrance du message';