Release 2025-05-21-MXjT
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
-- AlterEnum
|
||||
ALTER TYPE "NotificationType" ADD VALUE 'KARMA_CHANGE';
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Notification" ADD COLUMN "aboutKarmaTransactionId" INTEGER;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "NotificationPreferences" ADD COLUMN "karmaNotificationThreshold" INTEGER NOT NULL DEFAULT 10;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Notification" ADD CONSTRAINT "Notification_aboutKarmaTransactionId_fkey" FOREIGN KEY ("aboutKarmaTransactionId") REFERENCES "KarmaTransaction"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -135,6 +135,7 @@ enum NotificationType {
|
||||
SUGGESTION_MESSAGE
|
||||
SUGGESTION_STATUS_CHANGE
|
||||
// KARMA_UNLOCK // TODO: [KARMA_UNLOCK] Will be added later, when karma unloks are in the database, not in the code.
|
||||
KARMA_CHANGE
|
||||
/// Marked as spammer, promoted to admin, etc.
|
||||
ACCOUNT_STATUS_CHANGE
|
||||
EVENT_CREATED
|
||||
@@ -207,6 +208,8 @@ model Notification {
|
||||
aboutCommentStatusChange CommentStatusChange?
|
||||
aboutServiceVerificationStatusChange ServiceVerificationStatusChange?
|
||||
aboutSuggestionStatusChange ServiceSuggestionStatusChange?
|
||||
aboutKarmaTransaction KarmaTransaction? @relation(fields: [aboutKarmaTransactionId], references: [id])
|
||||
aboutKarmaTransactionId Int?
|
||||
|
||||
@@index([userId])
|
||||
@@index([read])
|
||||
@@ -229,6 +232,7 @@ model NotificationPreferences {
|
||||
enableOnMyCommentStatusChange Boolean @default(true)
|
||||
enableAutowatchMyComments Boolean @default(true)
|
||||
enableNotifyPendingRepliesOnWatch Boolean @default(false)
|
||||
karmaNotificationThreshold Int @default(10)
|
||||
|
||||
onEventCreatedForServices Service[] @relation("onEventCreatedForServices")
|
||||
onRootCommentCreatedForServices Service[] @relation("onRootCommentCreatedForServices")
|
||||
@@ -522,6 +526,7 @@ model KarmaTransaction {
|
||||
createdAt DateTime @default(now())
|
||||
grantedBy User? @relation("KarmaGrantedBy", fields: [grantedByUserId], references: [id], onDelete: SetNull)
|
||||
grantedByUserId Int?
|
||||
Notification Notification[]
|
||||
|
||||
@@index([createdAt])
|
||||
@@index([userId])
|
||||
|
||||
29
web/prisma/triggers/11_notifications_karma.sql
Normal file
29
web/prisma/triggers/11_notifications_karma.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
CREATE OR REPLACE FUNCTION trigger_karma_notifications()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
-- Only create notification if the user has enabled karma notifications
|
||||
-- and the karma change exceeds their threshold
|
||||
INSERT INTO "Notification" ("userId", "type", "aboutKarmaTransactionId")
|
||||
SELECT NEW."userId", 'KARMA_CHANGE', NEW.id
|
||||
FROM "NotificationPreferences" np
|
||||
WHERE np."userId" = NEW."userId"
|
||||
AND ABS(NEW.points) >= COALESCE(np."karmaNotificationThreshold", 10)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM "Notification" n
|
||||
WHERE n."userId" = NEW."userId"
|
||||
AND n."type" = 'KARMA_CHANGE'
|
||||
AND n."aboutKarmaTransactionId" = NEW.id
|
||||
);
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Drop the trigger if it exists to ensure a clean setup
|
||||
DROP TRIGGER IF EXISTS karma_notifications_trigger ON "KarmaTransaction";
|
||||
|
||||
-- Create the trigger to fire after inserts
|
||||
CREATE TRIGGER karma_notifications_trigger
|
||||
AFTER INSERT ON "KarmaTransaction"
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION trigger_karma_notifications();
|
||||
Reference in New Issue
Block a user