Notifications
This commit is contained in:
39
water-api/sql/add_notifications.sql
Normal file
39
water-api/sql/add_notifications.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- ============================================================================
|
||||
-- Add Notifications Table
|
||||
-- Migration for notification system supporting negative flow alerts
|
||||
-- ============================================================================
|
||||
|
||||
-- Create notification type enum
|
||||
CREATE TYPE notification_type AS ENUM ('NEGATIVE_FLOW', 'SYSTEM_ALERT', 'MAINTENANCE');
|
||||
|
||||
-- ============================================================================
|
||||
-- TABLE: notifications
|
||||
-- ============================================================================
|
||||
CREATE TABLE notifications (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
meter_id UUID REFERENCES meters(id) ON DELETE SET NULL,
|
||||
notification_type notification_type NOT NULL DEFAULT 'NEGATIVE_FLOW',
|
||||
title VARCHAR(255) NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
meter_serial_number VARCHAR(255),
|
||||
flow_value DECIMAL(12, 4),
|
||||
is_read BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
read_at TIMESTAMP WITH TIME ZONE,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Indexes for performance
|
||||
CREATE INDEX idx_notifications_user_id ON notifications(user_id);
|
||||
CREATE INDEX idx_notifications_meter_id ON notifications(meter_id);
|
||||
CREATE INDEX idx_notifications_is_read ON notifications(is_read);
|
||||
CREATE INDEX idx_notifications_created_at ON notifications(created_at DESC);
|
||||
CREATE INDEX idx_notifications_user_unread ON notifications(user_id, is_read) WHERE is_read = FALSE;
|
||||
|
||||
COMMENT ON TABLE notifications IS 'User notifications for meter alerts and system events';
|
||||
COMMENT ON COLUMN notifications.user_id IS 'User who receives this notification';
|
||||
COMMENT ON COLUMN notifications.meter_id IS 'Related meter (nullable if meter is deleted)';
|
||||
COMMENT ON COLUMN notifications.notification_type IS 'Type of notification';
|
||||
COMMENT ON COLUMN notifications.flow_value IS 'Flow value if negative flow alert';
|
||||
COMMENT ON COLUMN notifications.is_read IS 'Whether notification has been read by user';
|
||||
COMMENT ON COLUMN notifications.read_at IS 'Timestamp when notification was marked as read';
|
||||
Reference in New Issue
Block a user