From dca443affca3a519389a15d6d4be6c144216fb5e Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Wed, 6 Mar 2024 11:29:21 +0800 Subject: [PATCH] chore: add sqlx files --- ...9b06b810745569363613d6779444ead6a3cd7.json | 17 ++++++ ...44ac932ee88c6326ecaf9b4b4c7f690eff41c.json | 59 +++++++++++++++++++ ...9db0cdbb009c92dce1c1e67900c44efdb8db4.json | 15 +++++ ...617e442145affb56c90e12a81563232b284b4.json | 46 +++++++++++++++ .../20240306110000_workspace_invitation_2.sql | 34 +++++++++++ 5 files changed, 171 insertions(+) create mode 100644 .sqlx/query-060018c2bfdfcfb4b06186b6bc29b06b810745569363613d6779444ead6a3cd7.json create mode 100644 .sqlx/query-2c1152b8867bebcb63b637820eb44ac932ee88c6326ecaf9b4b4c7f690eff41c.json create mode 100644 .sqlx/query-3b3dd104bf9e1fb9cf6d413e0e59db0cdbb009c92dce1c1e67900c44efdb8db4.json create mode 100644 .sqlx/query-7244adcf92c93f0cb7b3311f348617e442145affb56c90e12a81563232b284b4.json create mode 100644 migrations/20240306110000_workspace_invitation_2.sql diff --git a/.sqlx/query-060018c2bfdfcfb4b06186b6bc29b06b810745569363613d6779444ead6a3cd7.json b/.sqlx/query-060018c2bfdfcfb4b06186b6bc29b06b810745569363613d6779444ead6a3cd7.json new file mode 100644 index 00000000..bd2d2ee6 --- /dev/null +++ b/.sqlx/query-060018c2bfdfcfb4b06186b6bc29b06b810745569363613d6779444ead6a3cd7.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO public.af_workspace_invitation (\n workspace_id,\n inviter,\n invitee_email,\n role_id\n )\n VALUES (\n $1,\n (SELECT uid FROM public.af_user WHERE uuid = $2),\n $3,\n $4\n )\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Uuid", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "060018c2bfdfcfb4b06186b6bc29b06b810745569363613d6779444ead6a3cd7" +} diff --git a/.sqlx/query-2c1152b8867bebcb63b637820eb44ac932ee88c6326ecaf9b4b4c7f690eff41c.json b/.sqlx/query-2c1152b8867bebcb63b637820eb44ac932ee88c6326ecaf9b4b4c7f690eff41c.json new file mode 100644 index 00000000..c62ab8d1 --- /dev/null +++ b/.sqlx/query-2c1152b8867bebcb63b637820eb44ac932ee88c6326ecaf9b4b4c7f690eff41c.json @@ -0,0 +1,59 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n id AS invite_id,\n workspace_id,\n (SELECT workspace_name FROM public.af_workspace WHERE workspace_id = af_workspace_invitation.workspace_id),\n (SELECT email FROM public.af_user WHERE uid = af_workspace_invitation.inviter) AS inviter_email,\n (SELECT name FROM public.af_user WHERE uid = af_workspace_invitation.inviter) AS inviter_name,\n status,\n updated_at\n FROM\n public.af_workspace_invitation\n WHERE af_workspace_invitation.invitee_email = (SELECT email FROM public.af_user WHERE uuid = $1)\n AND ($2::SMALLINT IS NULL OR status = $2)\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "invite_id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "workspace_id", + "type_info": "Uuid" + }, + { + "ordinal": 2, + "name": "workspace_name", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "inviter_email", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "inviter_name", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "status", + "type_info": "Int2" + }, + { + "ordinal": 6, + "name": "updated_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Int2" + ] + }, + "nullable": [ + false, + false, + null, + null, + null, + false, + false + ] + }, + "hash": "2c1152b8867bebcb63b637820eb44ac932ee88c6326ecaf9b4b4c7f690eff41c" +} diff --git a/.sqlx/query-3b3dd104bf9e1fb9cf6d413e0e59db0cdbb009c92dce1c1e67900c44efdb8db4.json b/.sqlx/query-3b3dd104bf9e1fb9cf6d413e0e59db0cdbb009c92dce1c1e67900c44efdb8db4.json new file mode 100644 index 00000000..340d60a7 --- /dev/null +++ b/.sqlx/query-3b3dd104bf9e1fb9cf6d413e0e59db0cdbb009c92dce1c1e67900c44efdb8db4.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE public.af_workspace_invitation\n SET status = 1\n WHERE invitee_email = (SELECT email FROM public.af_user WHERE uuid = $1)\n AND id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "3b3dd104bf9e1fb9cf6d413e0e59db0cdbb009c92dce1c1e67900c44efdb8db4" +} diff --git a/.sqlx/query-7244adcf92c93f0cb7b3311f348617e442145affb56c90e12a81563232b284b4.json b/.sqlx/query-7244adcf92c93f0cb7b3311f348617e442145affb56c90e12a81563232b284b4.json new file mode 100644 index 00000000..77fc33c6 --- /dev/null +++ b/.sqlx/query-7244adcf92c93f0cb7b3311f348617e442145affb56c90e12a81563232b284b4.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n workspace_id,\n inviter AS inviter_uid,\n (SELECT uid FROM public.af_user WHERE email = invitee_email) AS invitee_uid,\n status,\n role_id AS role\n FROM\n public.af_workspace_invitation\n WHERE id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "inviter_uid", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "invitee_uid", + "type_info": "Int8" + }, + { + "ordinal": 3, + "name": "status", + "type_info": "Int2" + }, + { + "ordinal": 4, + "name": "role", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false, + false, + null, + false, + false + ] + }, + "hash": "7244adcf92c93f0cb7b3311f348617e442145affb56c90e12a81563232b284b4" +} diff --git a/migrations/20240306110000_workspace_invitation_2.sql b/migrations/20240306110000_workspace_invitation_2.sql new file mode 100644 index 00000000..8c301d34 --- /dev/null +++ b/migrations/20240306110000_workspace_invitation_2.sql @@ -0,0 +1,34 @@ +ALTER TABLE af_workspace_invitation ADD COLUMN invitee_email TEXT NOT NULL; + +-- Auto add to af_workspace_member upon invitation accepted +CREATE OR REPLACE FUNCTION add_to_af_workspace_member() +RETURNS TRIGGER AS $$ +BEGIN + IF NEW.status = 1 THEN + -- workspace permission + INSERT INTO af_workspace_member (workspace_id, uid, role_id) + VALUES ( + NEW.workspace_id, + (SELECT uid FROM af_user WHERE email = NEW.invitee_email), + NEW.role_id + ) + ON CONFLICT (workspace_id, uid) DO NOTHING; + + -- collab permission + INSERT INTO af_collab_member (uid, oid, permission_id) + VALUES ( + (SELECT uid FROM af_user WHERE email = NEW.invitee_email), + NEW.workspace_id, + (SELECT permission_id + FROM public.af_role_permissions + WHERE public.af_role_permissions.role_id = NEW.role_id) + ) + ON CONFLICT (uid, oid) + DO UPDATE + SET permission_id = excluded.permission_id; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +ALTER TABLE af_workspace_invitation DROP COLUMN invitee;