Skip to content

Commit

Permalink
feat: keep on with electric
Browse files Browse the repository at this point in the history
  • Loading branch information
ledouxm committed Jul 4, 2024
1 parent 1629ad9 commit 5ef49c5
Show file tree
Hide file tree
Showing 9 changed files with 262 additions and 149 deletions.
1 change: 1 addition & 0 deletions db/migrations/902-rework_clauses.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ CREATE TABLE clause_v2 (
id text NOT NULL PRIMARY KEY
,key text NOT NULL
,value text NOT NULL
,position int
,udap_id text
,text text NOT NULL
);
Expand Down
27 changes: 17 additions & 10 deletions packages/backend/src/tmp.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
import { db } from "./db/db";
import { v4 } from "uuid";
import { groupBy } from "pastable";

export const initClauseV2 = async () => {
const nbClausesV2 = await db.clause_v2.count();
if (nbClausesV2 > 0) return;

const clauses = await db.clause.findMany();

for (const clause of clauses) {
await db.clause_v2.create({
data: {
id: v4(),
key: clause.key,
text: clause.text,
value: clause.value,
udap_id: clause.udap_id,
},
});
const grouped = groupBy(clauses, (clause) => `${clause.udap_id}-${clause.key}`);

for (const clausesToAdd of Object.values(grouped)) {
for (let i = 0; i < clausesToAdd.length; i++) {
const clause = clausesToAdd[i]!;
await db.clause_v2.create({
data: {
id: v4(),
key: clause.key,
text: clause.text,
value: clause.value,
position: i,
udap_id: clause.udap_id,
},
});
}
}

return "done";
Expand Down
11 changes: 6 additions & 5 deletions packages/electric-client/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,10 @@ model service_instructeurs {
}

model clause_v2 {
id String @id
key String
value String
udap_id String?
text String
id String @id
key String
value String
position Int?
udap_id String?
text String
}
158 changes: 94 additions & 64 deletions packages/electric-client/src/generated/client/index.ts

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions packages/electric-client/src/generated/client/migrations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,16 +135,16 @@ export default [
},
{
"statements": [
"CREATE TABLE \"clause_v2\" (\n \"id\" TEXT NOT NULL,\n \"key\" TEXT NOT NULL,\n \"value\" TEXT NOT NULL,\n \"udap_id\" TEXT,\n \"text\" TEXT NOT NULL,\n CONSTRAINT \"clause_v2_pkey\" PRIMARY KEY (\"id\")\n) WITHOUT ROWID;\n",
"CREATE TABLE \"clause_v2\" (\n \"id\" TEXT NOT NULL,\n \"key\" TEXT NOT NULL,\n \"value\" TEXT NOT NULL,\n \"position\" INTEGER,\n \"udap_id\" TEXT,\n \"text\" TEXT NOT NULL,\n CONSTRAINT \"clause_v2_pkey\" PRIMARY KEY (\"id\")\n) WITHOUT ROWID;\n",
"INSERT OR IGNORE INTO _electric_trigger_settings (namespace, tablename, flag) VALUES ('main', 'clause_v2', 1);",
"DROP TRIGGER IF EXISTS update_ensure_main_clause_v2_primarykey;",
"CREATE TRIGGER update_ensure_main_clause_v2_primarykey\n BEFORE UPDATE ON \"main\".\"clause_v2\"\nBEGIN\n SELECT\n CASE\n WHEN old.\"id\" != new.\"id\" THEN\n \t\tRAISE (ABORT, 'cannot change the value of column id as it belongs to the primary key')\n END;\nEND;",
"DROP TRIGGER IF EXISTS insert_main_clause_v2_into_oplog;",
"CREATE TRIGGER insert_main_clause_v2_into_oplog\n AFTER INSERT ON \"main\".\"clause_v2\"\n WHEN 1 = (SELECT flag from _electric_trigger_settings WHERE namespace = 'main' AND tablename = 'clause_v2')\nBEGIN\n INSERT INTO _electric_oplog (namespace, tablename, optype, primaryKey, newRow, oldRow, timestamp)\n VALUES ('main', 'clause_v2', 'INSERT', json_patch('{}', json_object('id', new.\"id\")), json_object('id', new.\"id\", 'key', new.\"key\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"), NULL, NULL);\nEND;",
"CREATE TRIGGER insert_main_clause_v2_into_oplog\n AFTER INSERT ON \"main\".\"clause_v2\"\n WHEN 1 = (SELECT flag from _electric_trigger_settings WHERE namespace = 'main' AND tablename = 'clause_v2')\nBEGIN\n INSERT INTO _electric_oplog (namespace, tablename, optype, primaryKey, newRow, oldRow, timestamp)\n VALUES ('main', 'clause_v2', 'INSERT', json_patch('{}', json_object('id', new.\"id\")), json_object('id', new.\"id\", 'key', new.\"key\", 'position', new.\"position\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"), NULL, NULL);\nEND;",
"DROP TRIGGER IF EXISTS update_main_clause_v2_into_oplog;",
"CREATE TRIGGER update_main_clause_v2_into_oplog\n AFTER UPDATE ON \"main\".\"clause_v2\"\n WHEN 1 = (SELECT flag from _electric_trigger_settings WHERE namespace = 'main' AND tablename = 'clause_v2')\nBEGIN\n INSERT INTO _electric_oplog (namespace, tablename, optype, primaryKey, newRow, oldRow, timestamp)\n VALUES ('main', 'clause_v2', 'UPDATE', json_patch('{}', json_object('id', new.\"id\")), json_object('id', new.\"id\", 'key', new.\"key\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"), json_object('id', old.\"id\", 'key', old.\"key\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"), NULL);\nEND;",
"CREATE TRIGGER update_main_clause_v2_into_oplog\n AFTER UPDATE ON \"main\".\"clause_v2\"\n WHEN 1 = (SELECT flag from _electric_trigger_settings WHERE namespace = 'main' AND tablename = 'clause_v2')\nBEGIN\n INSERT INTO _electric_oplog (namespace, tablename, optype, primaryKey, newRow, oldRow, timestamp)\n VALUES ('main', 'clause_v2', 'UPDATE', json_patch('{}', json_object('id', new.\"id\")), json_object('id', new.\"id\", 'key', new.\"key\", 'position', new.\"position\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"), json_object('id', old.\"id\", 'key', old.\"key\", 'position', old.\"position\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"), NULL);\nEND;",
"DROP TRIGGER IF EXISTS delete_main_clause_v2_into_oplog;",
"CREATE TRIGGER delete_main_clause_v2_into_oplog\n AFTER DELETE ON \"main\".\"clause_v2\"\n WHEN 1 = (SELECT flag from _electric_trigger_settings WHERE namespace = 'main' AND tablename = 'clause_v2')\nBEGIN\n INSERT INTO _electric_oplog (namespace, tablename, optype, primaryKey, newRow, oldRow, timestamp)\n VALUES ('main', 'clause_v2', 'DELETE', json_patch('{}', json_object('id', old.\"id\")), NULL, json_object('id', old.\"id\", 'key', old.\"key\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"), NULL);\nEND;"
"CREATE TRIGGER delete_main_clause_v2_into_oplog\n AFTER DELETE ON \"main\".\"clause_v2\"\n WHEN 1 = (SELECT flag from _electric_trigger_settings WHERE namespace = 'main' AND tablename = 'clause_v2')\nBEGIN\n INSERT INTO _electric_oplog (namespace, tablename, optype, primaryKey, newRow, oldRow, timestamp)\n VALUES ('main', 'clause_v2', 'DELETE', json_patch('{}', json_object('id', old.\"id\")), NULL, json_object('id', old.\"id\", 'key', old.\"key\", 'position', old.\"position\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"), NULL);\nEND;"
],
"version": "902"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,19 +179,19 @@ export default [
},
{
"statements": [
"CREATE TABLE clause_v2 (\n id text NOT NULL,\n key text NOT NULL,\n value text NOT NULL,\n udap_id text,\n text text NOT NULL,\n CONSTRAINT clause_v2_pkey PRIMARY KEY (id)\n)",
"CREATE TABLE clause_v2 (\n id text NOT NULL,\n key text NOT NULL,\n value text NOT NULL,\n \"position\" integer,\n udap_id text,\n text text NOT NULL,\n CONSTRAINT clause_v2_pkey PRIMARY KEY (id)\n)",
"INSERT INTO \"public\".\"_electric_trigger_settings\" (\"namespace\", \"tablename\", \"flag\")\n VALUES ('public', 'clause_v2', 1)\n ON CONFLICT DO NOTHING;",
"DROP TRIGGER IF EXISTS update_ensure_public_clause_v2_primarykey ON \"public\".\"clause_v2\";",
"CREATE OR REPLACE FUNCTION update_ensure_public_clause_v2_primarykey_function()\nRETURNS TRIGGER AS $$\nBEGIN\n IF OLD.\"id\" IS DISTINCT FROM NEW.\"id\" THEN\n RAISE EXCEPTION 'Cannot change the value of column id as it belongs to the primary key';\n END IF;\n RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;",
"CREATE TRIGGER update_ensure_public_clause_v2_primarykey\n BEFORE UPDATE ON \"public\".\"clause_v2\"\n FOR EACH ROW\n EXECUTE FUNCTION update_ensure_public_clause_v2_primarykey_function();",
"DROP TRIGGER IF EXISTS insert_public_clause_v2_into_oplog ON \"public\".\"clause_v2\";",
" CREATE OR REPLACE FUNCTION insert_public_clause_v2_into_oplog_function()\n RETURNS TRIGGER AS $$\n BEGIN\n DECLARE\n flag_value INTEGER;\n BEGIN\n -- Get the flag value from _electric_trigger_settings\n SELECT flag INTO flag_value FROM \"public\"._electric_trigger_settings WHERE namespace = 'public' AND tablename = 'clause_v2';\n\n IF flag_value = 1 THEN\n -- Insert into _electric_oplog\n INSERT INTO \"public\"._electric_oplog (namespace, tablename, optype, \"primaryKey\", \"newRow\", \"oldRow\", timestamp)\n VALUES (\n 'public',\n 'clause_v2',\n 'INSERT',\n json_strip_nulls(json_build_object('id', new.\"id\")),\n jsonb_build_object('id', new.\"id\", 'key', new.\"key\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"),\n NULL,\n NULL\n );\n END IF;\n\n RETURN NEW;\n END;\n END;\n $$ LANGUAGE plpgsql;",
" CREATE OR REPLACE FUNCTION insert_public_clause_v2_into_oplog_function()\n RETURNS TRIGGER AS $$\n BEGIN\n DECLARE\n flag_value INTEGER;\n BEGIN\n -- Get the flag value from _electric_trigger_settings\n SELECT flag INTO flag_value FROM \"public\"._electric_trigger_settings WHERE namespace = 'public' AND tablename = 'clause_v2';\n\n IF flag_value = 1 THEN\n -- Insert into _electric_oplog\n INSERT INTO \"public\"._electric_oplog (namespace, tablename, optype, \"primaryKey\", \"newRow\", \"oldRow\", timestamp)\n VALUES (\n 'public',\n 'clause_v2',\n 'INSERT',\n json_strip_nulls(json_build_object('id', new.\"id\")),\n jsonb_build_object('id', new.\"id\", 'key', new.\"key\", 'position', new.\"position\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"),\n NULL,\n NULL\n );\n END IF;\n\n RETURN NEW;\n END;\n END;\n $$ LANGUAGE plpgsql;",
"CREATE TRIGGER insert_public_clause_v2_into_oplog\n AFTER INSERT ON \"public\".\"clause_v2\"\n FOR EACH ROW\n EXECUTE FUNCTION insert_public_clause_v2_into_oplog_function();",
"DROP TRIGGER IF EXISTS update_public_clause_v2_into_oplog ON \"public\".\"clause_v2\";",
" CREATE OR REPLACE FUNCTION update_public_clause_v2_into_oplog_function()\n RETURNS TRIGGER AS $$\n BEGIN\n DECLARE\n flag_value INTEGER;\n BEGIN\n -- Get the flag value from _electric_trigger_settings\n SELECT flag INTO flag_value FROM \"public\"._electric_trigger_settings WHERE namespace = 'public' AND tablename = 'clause_v2';\n\n IF flag_value = 1 THEN\n -- Insert into _electric_oplog\n INSERT INTO \"public\"._electric_oplog (namespace, tablename, optype, \"primaryKey\", \"newRow\", \"oldRow\", timestamp)\n VALUES (\n 'public',\n 'clause_v2',\n 'UPDATE',\n json_strip_nulls(json_build_object('id', new.\"id\")),\n jsonb_build_object('id', new.\"id\", 'key', new.\"key\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"),\n jsonb_build_object('id', old.\"id\", 'key', old.\"key\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"),\n NULL\n );\n END IF;\n\n RETURN NEW;\n END;\n END;\n $$ LANGUAGE plpgsql;",
" CREATE OR REPLACE FUNCTION update_public_clause_v2_into_oplog_function()\n RETURNS TRIGGER AS $$\n BEGIN\n DECLARE\n flag_value INTEGER;\n BEGIN\n -- Get the flag value from _electric_trigger_settings\n SELECT flag INTO flag_value FROM \"public\"._electric_trigger_settings WHERE namespace = 'public' AND tablename = 'clause_v2';\n\n IF flag_value = 1 THEN\n -- Insert into _electric_oplog\n INSERT INTO \"public\"._electric_oplog (namespace, tablename, optype, \"primaryKey\", \"newRow\", \"oldRow\", timestamp)\n VALUES (\n 'public',\n 'clause_v2',\n 'UPDATE',\n json_strip_nulls(json_build_object('id', new.\"id\")),\n jsonb_build_object('id', new.\"id\", 'key', new.\"key\", 'position', new.\"position\", 'text', new.\"text\", 'udap_id', new.\"udap_id\", 'value', new.\"value\"),\n jsonb_build_object('id', old.\"id\", 'key', old.\"key\", 'position', old.\"position\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"),\n NULL\n );\n END IF;\n\n RETURN NEW;\n END;\n END;\n $$ LANGUAGE plpgsql;",
"CREATE TRIGGER update_public_clause_v2_into_oplog\n AFTER UPDATE ON \"public\".\"clause_v2\"\n FOR EACH ROW\n EXECUTE FUNCTION update_public_clause_v2_into_oplog_function();",
"DROP TRIGGER IF EXISTS delete_public_clause_v2_into_oplog ON \"public\".\"clause_v2\";",
" CREATE OR REPLACE FUNCTION delete_public_clause_v2_into_oplog_function()\n RETURNS TRIGGER AS $$\n BEGIN\n DECLARE\n flag_value INTEGER;\n BEGIN\n -- Get the flag value from _electric_trigger_settings\n SELECT flag INTO flag_value FROM \"public\"._electric_trigger_settings WHERE namespace = 'public' AND tablename = 'clause_v2';\n\n IF flag_value = 1 THEN\n -- Insert into _electric_oplog\n INSERT INTO \"public\"._electric_oplog (namespace, tablename, optype, \"primaryKey\", \"newRow\", \"oldRow\", timestamp)\n VALUES (\n 'public',\n 'clause_v2',\n 'DELETE',\n json_strip_nulls(json_build_object('id', old.\"id\")),\n NULL,\n jsonb_build_object('id', old.\"id\", 'key', old.\"key\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"),\n NULL\n );\n END IF;\n\n RETURN NEW;\n END;\n END;\n $$ LANGUAGE plpgsql;",
" CREATE OR REPLACE FUNCTION delete_public_clause_v2_into_oplog_function()\n RETURNS TRIGGER AS $$\n BEGIN\n DECLARE\n flag_value INTEGER;\n BEGIN\n -- Get the flag value from _electric_trigger_settings\n SELECT flag INTO flag_value FROM \"public\"._electric_trigger_settings WHERE namespace = 'public' AND tablename = 'clause_v2';\n\n IF flag_value = 1 THEN\n -- Insert into _electric_oplog\n INSERT INTO \"public\"._electric_oplog (namespace, tablename, optype, \"primaryKey\", \"newRow\", \"oldRow\", timestamp)\n VALUES (\n 'public',\n 'clause_v2',\n 'DELETE',\n json_strip_nulls(json_build_object('id', old.\"id\")),\n NULL,\n jsonb_build_object('id', old.\"id\", 'key', old.\"key\", 'position', old.\"position\", 'text', old.\"text\", 'udap_id', old.\"udap_id\", 'value', old.\"value\"),\n NULL\n );\n END IF;\n\n RETURN NEW;\n END;\n END;\n $$ LANGUAGE plpgsql;",
"CREATE TRIGGER delete_public_clause_v2_into_oplog\n AFTER DELETE ON \"public\".\"clause_v2\"\n FOR EACH ROW\n EXECUTE FUNCTION delete_public_clause_v2_into_oplog_function();"
],
"version": "902"
Expand Down
Loading

0 comments on commit 5ef49c5

Please sign in to comment.