From b0ce5273ce630127d21d71cc547775dd7c2ab28d Mon Sep 17 00:00:00 2001 From: charles-gauthereau Date: Mon, 16 Mar 2026 12:16:50 +0100 Subject: [PATCH] feat: add-valkey engine --- public/images/valkey.png | Bin 0 -> 31675 bytes .../projects/database/database-tabs.tsx | 2 +- src/db/migrations/0039_conscious_solo.sql | 1 + src/db/migrations/meta/0039_snapshot.json | 2432 +++++++++++++++++ src/db/migrations/meta/_journal.json | 7 + src/db/schema/types.ts | 2 +- 6 files changed, 2442 insertions(+), 2 deletions(-) create mode 100644 public/images/valkey.png create mode 100644 src/db/migrations/0039_conscious_solo.sql create mode 100644 src/db/migrations/meta/0039_snapshot.json diff --git a/public/images/valkey.png b/public/images/valkey.png new file mode 100644 index 0000000000000000000000000000000000000000..82cefeffeec67528d40f6f041b5ccb73bc1033d8 GIT binary patch literal 31675 zcmV)eK&HQmP)Os#%V-xXgbw-Y;ZRRycc+4#3oSUdSGh=v0t-NP*+QJzPo~N(5 z9_C3lJr|A51Y*@mN!$zF34U_KQ& z+kto;)*l1<+0CDsYj5-fm^qj8sAd}!`I<8Xb2vP$>S_$==TNTpuznp`(AS(HXb%F$ z<*jCY@Uiv3e9rpIx2W>cYinld*4sAk{>829o_(Ezf3zhW9iN-oH2Uc=_*ByW|-^Sa6;8;iWc#S5#izbYAPqD|X(pWzR4E;L~4y|9Rb!ITLQQ zB^(`}n+DHo(6_oPpBoj;oa?O{{^9aZZ+o#fQ%hc~xr=_=sf$$VN=V@&PHNDeL#hj? z*)AmNqHDVsz3rdw-1PIu?%nY9D`(#7>#gQ=R)(=<&TG)Ox+_1QhWoaSzvy+|+xDG~ zid*~z3j$XxAoT;llmS;jSSX`XivS(MnGiK+5uw9N%&MEJ>Q|q=b?poHpNsxnc!tJJ zLrr7LoY$bAMsLo$B6sxt@Wz`q?0X?{S8Pet#YPn_!eHH@nx(K>p&DhdlsbwMbQC+` z;GtGe;l$@DmN1ZdNWAW)S-5ojT|17xbo2VB|09b73bVMTU-d#ZG}GhZr=gZSovH3sDl8yz8p;F&x zkDwE%po*+uaH1ZptlKyL{K%)*eCvuSM3}ei3vV?Ts~SD_b&lTD9PvF5*xp9} z`_8SuSQi&o>`whlZybyY&_u2PUV9303>1qY>a^y5;K35*nzr6$7C``5>yWUFl(+=*PNL=c=!5Z}-;i zyEi1kTlZJp<(nhbrD|f?!vLwx^0u6{Fv>y`=)O#R8hJy19+`$VmgQ204vu9Mx3^i6 z!gC&U<{{7?l*^ECM#zTOgbSBdvx|1#z3b>pA6xx{`|}3gc+5xxErMP~Zbt3ArYha@ zz;nO(iS38?S8?ga2n%`g(usr{(o`ARaN2RzP^)%;A(#!pYq(J*&S9+NdDMp`s4XW1 z%UD2Cg_KMj5(_xM(H-(JP_Lk#DVXBLI30Da40^8H{zqH(ym;sKe_f9A^it=kTq2fs zE&YiLhtZuG9T#S=b-IOqd+)=izj^f3g0I7MUFn>m(Y8oU3Su$`{Lmi^5x^?~T??Q| z%8BkQfsP#LS}eK?;L++2kxU9rE>Ib)%9K?WwJd>GDso~0nE@i}Axet~%ge4h8D0ML z?OR`2JzKr2*)kZXz8fcPvZT3?VWRf*bp5j-2BSMOIzE*DS`6>%dwR+3Tc6wLI~-223ZDFt3X(|WNCuM+iu%>de0x-|GgQ5Us@DN&n3;L3^F3)_O-PY zU|bfjiNu>X{bF5JUAM31FWJza6<|swZZxSjV%H${ik$LJf<1IC?V0slnnkg^p{! zao46jkKK0f8((!X!9~?EXB>Eslf;6r{rivZ{@SuTAK3Sd>%QvgBXxgSstc%A6J*s4 zix+kAh@If1e^Kl#qLx%4z!bn6Zcr8dbY*!CNnhOx(H@JxpL!92EtJ5i3<7-7q)dv$ zWQe>Bv2mOnipd6se!Iun;`8(;$Q%lAuoe3DslkHIPJ-V)X?d zu3y_fXcup(r=7H%Wq<%9hPYWx`L)y#R4E+Ix}v|4Lsx0qUq$O|ka7};`{I<8NgW7q zQLF|~Fmmp$bL)-RK`RBxQ#ALQF)#C(XGko^l>)rPr_abg(SY?0PjF&nToK?q=2~!m zz@-Y71#G5acw7o-WIQc$T0!{%BIl!?b)ptux>AR4|LfcP_Wr{yea|k#8y7Wo9w7M932S zge0+PF*s0#avHuDA`D8XR%-AbqmaSrT295X z4=+%ta9>~v(o(q_QDjkIdWMJq8(nw_Q0zfQ-!~%|r2`ERNel!Y#<@gQ8j4sFk^+u?wkL~}O1Uvr$G(lpI`f6v8c8~<9u+*2J6Ex}ZRE~PKl@KN^&YJE#|t*c zdI3~nfg6lKYwKXO_`{?6)l@(;7?m+W)QS2$LMw;YaG_xvL`I?S!8a_E61+A-xnR(L z;si>ZaEb_4IA&<%@4ePNk;5vMv6tQ6_&yB#Ug|MB^Vmd43x zR&e8FwUpH4GijY!H!?2wTh{)3*&W-CezW4P{0r4}d00gT>s#=jqP0O!R|yIIY^mIE zFBlsmuBP>t1X0o1qzF_2sS}IKVtfUU>W4|ND{1w59S$*!s*`GPwSHXM)%D#%s=rl? zeFQvSG%RT7zq3UO(a=ZEcZj!A{S>_}FR|-bJ>KM8-h0xaHL6ZkX@TW

-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 WV>_m?pa`-60000 { const router = useRouter(); diff --git a/src/db/migrations/0039_conscious_solo.sql b/src/db/migrations/0039_conscious_solo.sql new file mode 100644 index 00000000..c92aace8 --- /dev/null +++ b/src/db/migrations/0039_conscious_solo.sql @@ -0,0 +1 @@ +ALTER TYPE "public"."dbms_status" ADD VALUE 'valkey'; \ No newline at end of file diff --git a/src/db/migrations/meta/0039_snapshot.json b/src/db/migrations/meta/0039_snapshot.json new file mode 100644 index 00000000..50bb31b8 --- /dev/null +++ b/src/db/migrations/meta/0039_snapshot.json @@ -0,0 +1,2432 @@ +{ + "id": "c1175913-c1dd-43a4-b396-282406986d5e", + "prevId": "32b91ca6-d52f-4120-8bfd-dd0a25beb913", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "smtp_password": { + "name": "smtp_password", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_from": { + "name": "smtp_from", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_host": { + "name": "smtp_host", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_port": { + "name": "smtp_port", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_user": { + "name": "smtp_user", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_secure": { + "name": "smtp_secure", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "default_storage_channel_id": { + "name": "default_storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "encryption": { + "name": "encryption", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "settings_default_storage_channel_id_storage_channel_id_fk": { + "name": "settings_default_storage_channel_id_storage_channel_id_fk", + "tableFrom": "settings", + "tableTo": "storage_channel", + "columnsFrom": [ + "default_storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "settings_name_unique": { + "name": "settings_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.passkey": { + "name": "passkey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "credentialID": { + "name": "credentialID", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "counter": { + "name": "counter", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "deviceType": { + "name": "deviceType", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backedUp": { + "name": "backedUp", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "transports": { + "name": "transports", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "aaguid": { + "name": "aaguid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "passkey_user_id_user_id_fk": { + "name": "passkey_user_id_user_id_fk", + "tableFrom": "passkey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sso_provider": { + "name": "sso_provider", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oidc_config": { + "name": "oidc_config", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "saml_config": { + "name": "saml_config", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "theme": { + "name": "theme", + "type": "user_themes", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'light'" + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "lastConnectedAt": { + "name": "lastConnectedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "lastChangedPasswordAt": { + "name": "lastChangedPasswordAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.projects": { + "name": "projects", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_archived": { + "name": "is_archived", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "projects_organization_id_organization_id_fk": { + "name": "projects_organization_id_organization_id_fk", + "tableFrom": "projects", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "projects_slug_unique": { + "name": "projects_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backups": { + "name": "backups", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'waiting'" + }, + "file": { + "name": "file", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "file_size": { + "name": "file_size", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "imported": { + "name": "imported", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backups_database_id_databases_id_fk": { + "name": "backups_database_id_databases_id_fk", + "tableFrom": "backups", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.databases": { + "name": "databases", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "agent_database_id": { + "name": "agent_database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dbms": { + "name": "dbms", + "type": "dbms_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backup_policy": { + "name": "backup_policy", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_waiting_for_backup": { + "name": "is_waiting_for_backup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "backup_to_restore": { + "name": "backup_to_restore", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "agent_id": { + "name": "agent_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "last_contact": { + "name": "last_contact", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "databases_agent_id_agents_id_fk": { + "name": "databases_agent_id_agents_id_fk", + "tableFrom": "databases", + "tableTo": "agents", + "columnsFrom": [ + "agent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "databases_project_id_projects_id_fk": { + "name": "databases_project_id_projects_id_fk", + "tableFrom": "databases", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.restorations": { + "name": "restorations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'waiting'" + }, + "backup_storage_id": { + "name": "backup_storage_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "backup_id": { + "name": "backup_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "restorations_backup_storage_id_backup_storage_id_fk": { + "name": "restorations_backup_storage_id_backup_storage_id_fk", + "tableFrom": "restorations", + "tableTo": "backup_storage", + "columnsFrom": [ + "backup_storage_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "restorations_backup_id_backups_id_fk": { + "name": "restorations_backup_id_backups_id_fk", + "tableFrom": "restorations", + "tableTo": "backups", + "columnsFrom": [ + "backup_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "restorations_database_id_databases_id_fk": { + "name": "restorations_database_id_databases_id_fk", + "tableFrom": "restorations", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.retention_policies": { + "name": "retention_policies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "retention_policy_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "count": { + "name": "count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 7 + }, + "days": { + "name": "days", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 30 + }, + "gfs_daily": { + "name": "gfs_daily", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 7 + }, + "gfs_weekly": { + "name": "gfs_weekly", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 4 + }, + "gfs_monthly": { + "name": "gfs_monthly", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 12 + }, + "gfs_yearly": { + "name": "gfs_yearly", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "retention_policies_database_id_databases_id_fk": { + "name": "retention_policies_database_id_databases_id_fk", + "tableFrom": "retention_policies", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.agents": { + "name": "agents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_archived": { + "name": "is_archived", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "last_contact": { + "name": "last_contact", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "agents_slug_unique": { + "name": "agents_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification_channel": { + "name": "notification_channel", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "provider": { + "name": "provider", + "type": "provider_kind", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "notification_channel_organization_id_organization_id_fk": { + "name": "notification_channel_organization_id_organization_id_fk", + "tableFrom": "notification_channel", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization_notification_channels": { + "name": "organization_notification_channels", + "schema": "", + "columns": { + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "notification_channel_id": { + "name": "notification_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_notification_channels_organization_id_organization_id_fk": { + "name": "organization_notification_channels_organization_id_organization_id_fk", + "tableFrom": "organization_notification_channels", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_notification_channels_notification_channel_id_notification_channel_id_fk": { + "name": "organization_notification_channels_notification_channel_id_notification_channel_id_fk", + "tableFrom": "organization_notification_channels", + "tableTo": "notification_channel", + "columnsFrom": [ + "notification_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_notification_channels_organization_id_notification_channel_id_unique": { + "name": "organization_notification_channels_organization_id_notification_channel_id_unique", + "nullsNotDistinct": false, + "columns": [ + "organization_id", + "notification_channel_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.alert_policy": { + "name": "alert_policy", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "notification_channel_id": { + "name": "notification_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "event_kind": { + "name": "event_kind", + "type": "event_kind[]", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "alert_policy_notification_channel_id_notification_channel_id_fk": { + "name": "alert_policy_notification_channel_id_notification_channel_id_fk", + "tableFrom": "alert_policy", + "tableTo": "notification_channel", + "columnsFrom": [ + "notification_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "alert_policy_database_id_databases_id_fk": { + "name": "alert_policy_database_id_databases_id_fk", + "tableFrom": "alert_policy", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification_log": { + "name": "notification_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "channel_id": { + "name": "channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "policy_id": { + "name": "policy_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "event": { + "name": "event", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_name": { + "name": "provider_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "level": { + "name": "level", + "type": "level", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "success": { + "name": "success", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_response": { + "name": "provider_response", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization_storage_channels": { + "name": "organization_storage_channels", + "schema": "", + "columns": { + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "storage_channel_id": { + "name": "storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_storage_channels_organization_id_organization_id_fk": { + "name": "organization_storage_channels_organization_id_organization_id_fk", + "tableFrom": "organization_storage_channels", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_storage_channels_storage_channel_id_storage_channel_id_fk": { + "name": "organization_storage_channels_storage_channel_id_storage_channel_id_fk", + "tableFrom": "organization_storage_channels", + "tableTo": "storage_channel", + "columnsFrom": [ + "storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_storage_channels_organization_id_storage_channel_id_unique": { + "name": "organization_storage_channels_organization_id_storage_channel_id_unique", + "nullsNotDistinct": false, + "columns": [ + "organization_id", + "storage_channel_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.storage_channel": { + "name": "storage_channel", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "provider_storage_kind", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "storage_channel_organization_id_organization_id_fk": { + "name": "storage_channel_organization_id_organization_id_fk", + "tableFrom": "storage_channel", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.storage_policy": { + "name": "storage_policy", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "storage_channel_id": { + "name": "storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "storage_policy_storage_channel_id_storage_channel_id_fk": { + "name": "storage_policy_storage_channel_id_storage_channel_id_fk", + "tableFrom": "storage_policy", + "tableTo": "storage_channel", + "columnsFrom": [ + "storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "storage_policy_database_id_databases_id_fk": { + "name": "storage_policy_database_id_databases_id_fk", + "tableFrom": "storage_policy", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup_storage": { + "name": "backup_storage", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "backup_id": { + "name": "backup_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "storage_channel_id": { + "name": "storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "backup_storage_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size": { + "name": "size", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "checksum": { + "name": "checksum", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_storage_backup_id_backups_id_fk": { + "name": "backup_storage_backup_id_backups_id_fk", + "tableFrom": "backup_storage", + "tableTo": "backups", + "columnsFrom": [ + "backup_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_storage_storage_channel_id_storage_channel_id_fk": { + "name": "backup_storage_storage_channel_id_storage_channel_id_fk", + "tableFrom": "backup_storage", + "tableTo": "storage_channel", + "columnsFrom": [ + "storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.user_themes": { + "name": "user_themes", + "schema": "public", + "values": [ + "light", + "dark", + "system" + ] + }, + "public.retention_policy_type": { + "name": "retention_policy_type", + "schema": "public", + "values": [ + "count", + "days", + "gfs" + ] + }, + "public.provider_kind": { + "name": "provider_kind", + "schema": "public", + "values": [ + "slack", + "smtp", + "discord", + "telegram", + "gotify", + "ntfy", + "webhook" + ] + }, + "public.event_kind": { + "name": "event_kind", + "schema": "public", + "values": [ + "error_backup", + "error_restore", + "success_restore", + "success_backup", + "weekly_report" + ] + }, + "public.level": { + "name": "level", + "schema": "public", + "values": [ + "critical", + "warning", + "info" + ] + }, + "public.provider_storage_kind": { + "name": "provider_storage_kind", + "schema": "public", + "values": [ + "local", + "s3", + "google-drive" + ] + }, + "public.backup_storage_status": { + "name": "backup_storage_status", + "schema": "public", + "values": [ + "pending", + "success", + "failed" + ] + }, + "public.dbms_status": { + "name": "dbms_status", + "schema": "public", + "values": [ + "postgresql", + "mysql", + "mongodb", + "sqlite", + "redis", + "valkey" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "waiting", + "ongoing", + "failed", + "success" + ] + }, + "public.type_storage": { + "name": "type_storage", + "schema": "public", + "values": [ + "local", + "s3" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/db/migrations/meta/_journal.json b/src/db/migrations/meta/_journal.json index ca9cb25c..be4e7196 100644 --- a/src/db/migrations/meta/_journal.json +++ b/src/db/migrations/meta/_journal.json @@ -274,6 +274,13 @@ "when": 1773433992397, "tag": "0038_misty_red_hulk", "breakpoints": true + }, + { + "idx": 39, + "version": "7", + "when": 1773659096498, + "tag": "0039_conscious_solo", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/db/schema/types.ts b/src/db/schema/types.ts index 45e480b7..3f46d02f 100644 --- a/src/db/schema/types.ts +++ b/src/db/schema/types.ts @@ -2,7 +2,7 @@ import {pgEnum} from "drizzle-orm/pg-core"; import {createSelectSchema} from "drizzle-zod"; import {z} from "zod"; -export const dbmsEnum = pgEnum("dbms_status", ["postgresql", "mysql", "mongodb", "sqlite", "redis"]); +export const dbmsEnum = pgEnum("dbms_status", ["postgresql", "mysql", "mongodb", "sqlite", "redis", "valkey"]); export const statusEnum = pgEnum("status", ["waiting", "ongoing", "failed", "success"]); export const typeStorageEnum = pgEnum("type_storage", ["local", "s3"]);