mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: allow notification templates to be disabled by default (#16093)
Change as part of https://github.com/coder/coder/pull/16071 It has been decided that we want to be able to have some notification templates be disabled _by default_ https://github.com/coder/coder/pull/16071#issuecomment-2580757061. This adds a new column (`enabled_by_default`) to `notification_templates` that defaults to `TRUE`. It also modifies the `inhibit_enqueue_if_disabled` function to reject notifications for templates that have `enabled_by_default = FALSE` with the user not explicitly enabling it.
This commit is contained in:
+18
@@ -0,0 +1,18 @@
|
||||
ALTER TABLE notification_templates DROP COLUMN enabled_by_default;
|
||||
|
||||
CREATE OR REPLACE FUNCTION inhibit_enqueue_if_disabled()
|
||||
RETURNS TRIGGER AS
|
||||
$$
|
||||
BEGIN
|
||||
-- Fail the insertion if the user has disabled this notification.
|
||||
IF EXISTS (SELECT 1
|
||||
FROM notification_preferences
|
||||
WHERE disabled = TRUE
|
||||
AND user_id = NEW.user_id
|
||||
AND notification_template_id = NEW.notification_template_id) THEN
|
||||
RAISE EXCEPTION 'cannot enqueue message: user has disabled this notification';
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
ALTER TABLE notification_templates ADD COLUMN enabled_by_default boolean DEFAULT TRUE NOT NULL;
|
||||
|
||||
CREATE OR REPLACE FUNCTION inhibit_enqueue_if_disabled()
|
||||
RETURNS TRIGGER AS
|
||||
$$
|
||||
BEGIN
|
||||
-- Fail the insertion if one of the following:
|
||||
-- * the user has disabled this notification.
|
||||
-- * the notification template is disabled by default and hasn't
|
||||
-- been explicitly enabled by the user.
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM notification_templates
|
||||
LEFT JOIN notification_preferences
|
||||
ON notification_preferences.notification_template_id = notification_templates.id
|
||||
AND notification_preferences.user_id = NEW.user_id
|
||||
WHERE notification_templates.id = NEW.notification_template_id AND (
|
||||
-- Case 1: The user has explicitly disabled this template
|
||||
notification_preferences.disabled = TRUE
|
||||
OR
|
||||
-- Case 2: The template is disabled by default AND the user hasn't enabled it
|
||||
(notification_templates.enabled_by_default = FALSE AND notification_preferences.notification_template_id IS NULL)
|
||||
)
|
||||
) THEN
|
||||
RAISE EXCEPTION 'cannot enqueue message: notification is not enabled';
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
-- Enable 'workspace created' notification by default
|
||||
UPDATE notification_templates
|
||||
SET enabled_by_default = TRUE
|
||||
WHERE id = '281fdf73-c6d6-4cbb-8ff5-888baf8a2fff';
|
||||
|
||||
-- Enable 'workspace manually updated' notification by default
|
||||
UPDATE notification_templates
|
||||
SET enabled_by_default = TRUE
|
||||
WHERE id = 'd089fe7b-d5c5-4c0c-aaf5-689859f7d392';
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
-- Disable 'workspace created' notification by default
|
||||
UPDATE notification_templates
|
||||
SET enabled_by_default = FALSE
|
||||
WHERE id = '281fdf73-c6d6-4cbb-8ff5-888baf8a2fff';
|
||||
|
||||
-- Disable 'workspace manually updated' notification by default
|
||||
UPDATE notification_templates
|
||||
SET enabled_by_default = FALSE
|
||||
WHERE id = 'd089fe7b-d5c5-4c0c-aaf5-689859f7d392';
|
||||
Reference in New Issue
Block a user