Skip to content

Commit 2169883

Browse files
committed
### Fixed
* Fixed #29 update messages list after delete message ### Dependencies * Upgraded `supabase_flutter` to `^2.9.1` * Upgraded `meta` to `^1.16.0`
1 parent e940a21 commit 2169883

File tree

1 file changed

+33
-37
lines changed

1 file changed

+33
-37
lines changed

example/utils/sql/02_database_trigger.sql

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -30,50 +30,46 @@ AS $$
3030
DECLARE
3131
latest_message jsonb;
3232
ts_in_milliseconds bigint;
33+
affected_room_id bigint;
3334
BEGIN
34-
SELECT jsonb_build_object(
35-
'id', id,
36-
'createdAt', "createdAt",
37-
'metadata', metadata,
38-
'duration', duration,
39-
'mimeType', "mimeType",
40-
'name', name,
41-
'remoteId', "remoteId",
42-
'repliedMessage', "repliedMessage",
43-
'roomId', "roomId",
44-
'showStatus', "showStatus",
45-
'size', size,
46-
'status', status,
47-
'type', type,
48-
'updatedAt', "updatedAt",
49-
'uri', uri,
50-
'waveForm', "waveForm",
51-
'isLoading', "isLoading",
52-
'height', height,
53-
'width', width,
54-
'previewData', "previewData",
55-
'authorId', "authorId",
56-
'text', text
57-
)
58-
INTO latest_message
59-
FROM chats.messages
60-
WHERE "roomId" = NEW."roomId"
61-
ORDER BY "createdAt" DESC
62-
LIMIT 1;
63-
IF latest_message IS DISTINCT FROM (SELECT "lastMessages" FROM chats.rooms WHERE id = NEW."roomId") THEN
64-
SELECT EXTRACT(epoch FROM NOW()) * 1000 INTO ts_in_milliseconds;
65-
UPDATE chats.rooms
66-
SET "updatedAt" = ts_in_milliseconds,
67-
"lastMessages" = jsonb_build_array(latest_message)
68-
WHERE id = NEW."roomId";
69-
END IF;
35+
IF TG_OP = 'DELETE' THEN
36+
affected_room_id := OLD."roomId";
37+
ELSE
38+
affected_room_id := NEW."roomId";
39+
END IF;
40+
41+
SELECT to_jsonb(m)
42+
INTO latest_message
43+
FROM chats.messages m
44+
WHERE m."roomId" = affected_room_id
45+
ORDER BY m."createdAt" DESC
46+
LIMIT 1;
47+
48+
IF latest_message IS DISTINCT FROM (
49+
SELECT value FROM jsonb_array_elements(
50+
(SELECT "lastMessages" FROM chats.rooms WHERE id = affected_room_id)
51+
) LIMIT 1
52+
) THEN
53+
SELECT EXTRACT(epoch FROM NOW()) * 1000 INTO ts_in_milliseconds;
54+
55+
UPDATE chats.rooms
56+
SET "updatedAt" = ts_in_milliseconds,
57+
"lastMessages" = jsonb_build_array(latest_message)
58+
WHERE id = affected_room_id;
59+
END IF;
60+
61+
IF TG_OP = 'DELETE' THEN
62+
RETURN OLD;
63+
ELSE
7064
RETURN NEW;
65+
END IF;
7166
END;
7267
$$ LANGUAGE plpgsql;
7368

69+
7470
drop trigger if exists update_last_messages_trigger on chats.messages;
7571
CREATE TRIGGER update_last_messages_trigger
76-
AFTER INSERT OR UPDATE ON chats.messages
72+
AFTER INSERT OR UPDATE OR DELETE ON chats.messages
7773
FOR EACH ROW
7874
EXECUTE FUNCTION chats.update_last_messages();
7975

0 commit comments

Comments
 (0)