Showing preview only (4,344K chars total). Download the full file or copy to clipboard to get everything.
Repository: AppFlowy-IO/AppFlowy-Server
Branch: main
Commit: 9ad9ce584771
Files: 905
Total size: 4.0 MB
Directory structure:
gitextract_v4_lgx2l/
├── .dockerignore
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── audit.yml
│ ├── build_test_docker_image.yaml
│ ├── client_api_check.yml
│ ├── commitlint.yml
│ ├── integration_test.yml
│ ├── push_latest_docker.yml
│ ├── rustlint.yml
│ ├── stress_test.yml
│ ├── wasm_publish.yml
│ └── web_docker.yml
├── .gitignore
├── .sqlx/
│ ├── query-0389af6b225125d09c5a75b443561dba4d97b786d040e5b8d5a76de36716beb2.json
│ ├── query-05e89f62ff993fa2e4b0002c0022bba9706359e402b07b15ccdeb67492625064.json
│ ├── query-06096ba1131e78d3da5df25a4b0a1193f11c9782abaf91faf263a116f90e51af.json
│ ├── query-075b89cfe2572d28e7adfc29bbe52fef4afdd5013686f7294efd966739886f0d.json
│ ├── query-0781735c56d22370302beec06863dccbbb9e664b212de93e5073508a82b91609.json
│ ├── query-081abcd7f80664e8acd205833b0f9ca43bc1ccc03d992e7b1c45c3e401a6007a.json
│ ├── query-084655c4e26f78c9c0924ea39a099dc9c00ee73dc6ade2dcff27c03042ebe8c3.json
│ ├── query-09cf032adce81ba99362b3df50ba104f4e1eb2d538350c65cf615ea13f1c37f0.json
│ ├── query-09ff850490eab213cfa0ad88ece9ce7baa39beabee19754fd993268d29552eb9.json
│ ├── query-0affbd65859d6299c6ba736797f970b86552b83d95316ec3f54f93501e00b522.json
│ ├── query-0d9c62acb33b96bb81536d1ad3121174403bcd40b777eb8d384fe8e81e1db3c4.json
│ ├── query-0eeb2af3c6974c7e6d1c20bb4b08965eae9b0a291c7cef6451208b7740b9804c.json
│ ├── query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json
│ ├── query-1545a42d784a1a5fa8e9ed6128814608b9230b64ce23dcd85de444a7aa01bf9e.json
│ ├── query-15613595695e2e722c45712931ce0eb8d2a3deb1bb665d1f091f354a3ad96b92.json
│ ├── query-16208887bc2f2ca6b5f3df8062a12b482908f9f113c0474eeae75f6784b5e0fc.json
│ ├── query-18207c125d5f974894576ee1dcfe406b221e9119f570403ec7a41ae1359b3f6c.json
│ ├── query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json
│ ├── query-1b1ff4352abb6dad982279ee99c8dccb3621b55a838998c1b9803982ae10f622.json
│ ├── query-1bd79541a2b351b11ae94fe8a7aad408f9b563fd123099aa701a1e07ce797d2f.json
│ ├── query-1c8f022ff5add11376dbbc17efd874dd31fd908c4f17be1bded18dbc689e3b36.json
│ ├── query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json
│ ├── query-21195760ea7ed2dc4eda1dc2bd0eed9afcc63651ba6e67e7db675307e3b87821.json
│ ├── query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json
│ ├── query-21f66ca39be3377f8c5e4b218123e266fe8e03260ecd1891c644820892dda2b2.json
│ ├── query-223e530f8605f6d00789344565666f57705151e3c2318519e877b22f8ffc871b.json
│ ├── query-229a99b7a3a2f136babd5499c2a1047fe840903acf0d06e57fb78ca9b03e7008.json
│ ├── query-2394226650959b34ae80b1948b7a111720b3ea5da48934d8d7e395ecc84e6985.json
│ ├── query-24c5fb37a4391d590e83d2710e9a2ee7f4d06efcdd6034df1f67bb0d9db45716.json
│ ├── query-2593b975fcf2dcf0129a1390fd8e2888d440e07c904d7eb3ca14957be8bc6069.json
│ ├── query-2902fd3a9faa9481754d38b29abb543640c0b5564dca8f0141c7de2b8aab9551.json
│ ├── query-291f0916b7868f3598b50f659689b9c77d34112c2a2fff9fc04775da9f97e46d.json
│ ├── query-29279a0a97beb08aea84d588374c7534c28bd9c4da24b1ee20245109f5c33880.json
│ ├── query-2b0754f55889a20c294d2a77ba8d3fa34c8174856abfdede34797851183a177a.json
│ ├── query-2c0a776a787bc748857873b682d2fa3c549ffeaf767aa8ee05b09b3857505ded.json
│ ├── query-2c496e29533dd27117fbb688ba2324f04d7cc306181fcf3f82079d5639f632c4.json
│ ├── query-2d6d00669ea7d598d69d848d143f33e8c144d35b3d4c5293f98344b2c62fe6c8.json
│ ├── query-2dda0bc4d9486a49c0af00d8ee4408c970a2ba3533217c130281e7db5a4e3d6b.json
│ ├── query-30a592588fe20bb1444178b7ee9e73e37d1d55572f936988528178bfa10158e5.json
│ ├── query-315840e0657ea0b8d162635b4cc21ce84a09fd7ea14ea07980869a80ee06900c.json
│ ├── query-32fd3dcd1a3e02c32ddedb232b6af2e7f9ea160354528f3299cca62367af10f7.json
│ ├── query-340b8cef5a7676541b86505cdf103fcb5b54c40a9d6e599dc1d9dc0a95e1e862.json
│ ├── query-354166a6fa147dc6e17bfc14cb68d3a72a2e7c3aa2d115686deb12086786e034.json
│ ├── query-35622d4ebede28dd28b613edcf3970ad258286f176ce86e88bd662a602e4ad58.json
│ ├── query-36733444fc8fac851fb540105ea6c9dca785455ae44ae518b98d8b57082e11d8.json
│ ├── query-3865d921d76ac0d0eb16065738cddf82cb71945504116b0a04da759209b9c250.json
│ ├── query-3b2daf263b4022e69c819edb55d412da8ad3fe4377155d8485fbaf186069f389.json
│ ├── query-3bb5b82d46c55bbfd51319310a3cd065c4b796462a1ddf3c17617ee65ce9961a.json
│ ├── query-3c2c94b9ac0a329b92847d7176a7435f894c5ef3b3b11e3e2ae03a8ec454a6d8.json
│ ├── query-3ca587826f0598e7786c765dcb2fcd6ae08d8aa404f02920307547c769a3f91b.json
│ ├── query-3cfb0a6d9a798f29422bc4bf4a52d3c86c3aae98c173b83c60eb57504a3d2c7c.json
│ ├── query-3d3309a4ae7a88b3f7c9608dd78a1c1dc9b237a37e29722bcd2910bd23f9d873.json
│ ├── query-3fdd28c263edf5c91ab8b770e6106d4890ec4bae2ff3c20f80c40cb4042d9e03.json
│ ├── query-40db0a61665bdb9f7e9d1ce2a6c0eb05703e36e83c87802a72630388588de8cd.json
│ ├── query-4123fa8796e8b56225155f79c2ee4c4dacda5ef51e858ce7dcb9877c7d55bd53.json
│ ├── query-425b0b5ffbe3f1b80aedf15b8df1640c879d8d45883eee8b1e2fbd64eaf283d6.json
│ ├── query-441316f35ca8c24bf78167f9fec48e28c05969bbbbe3d0e3d9e1569a375de476.json
│ ├── query-4476f271f4ea8c83428b4178c43ee2894e380a7c3ae3cbc782f438fabc45de8b.json
│ ├── query-44e4be501db0375fbd8ad8ed923bef887e361fe466ab46bdd6663f6cf97413a8.json
│ ├── query-4f5951e61713d04963524b84648c9ff8c7be05f0089f6fd26fc6e0e0afeae579.json
│ ├── query-4fc0611c846f86be652d42eb8ae21a5da0353fe810856aaabe91d7963329d098.json
│ ├── query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.json
│ ├── query-523087b0101a35abfc70a561272acec7a357491a86901f7927b8242173b5c8c8.json
│ ├── query-52b936c6adf43ec5c7e777ad9379dec30b750fefad73684e552481f709006d04.json
│ ├── query-53d87db17bb9c1d002adc82ba9f2c07ff33ea987a1157d7f6fd2344091b98deb.json
│ ├── query-594af4041e0778476a699536316007f0a264f7d3db9de6326ef8082a2a898995.json
│ ├── query-598e731078fc6417039cc16772eb5bc6c74d24c1a8018a981d2175a483dc699c.json
│ ├── query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json
│ ├── query-5c2d58bfdedbb1be71337a97d5ed5a2921f83dd549507b2834a4d2582d2c361b.json
│ ├── query-5cce5f82c0fb9237f724478e2167243bc772c092910f07b8226431a6dd70a7da.json
│ ├── query-5d408d36790ade4da1ceeb68b4a183aa7d9abc27b0ec42c2a3c5af26ad80f128.json
│ ├── query-5d51aef40f7e0716338b406263240dbc5e4a64cec6f1be10a3676e4f86ce4557.json
│ ├── query-5e0d58f612425e1cf36dfc7f56691cfb8f6def1a3d29645922cb437d11ce62ef.json
│ ├── query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json
│ ├── query-62ed61bcf92fc0c3756f57d0fe05cdd12e70072f5646fe48790ad189a6e96b12.json
│ ├── query-6380f5a6ded2dab8f18de42541c9d77c2f3af512e3f66e1b731ca7c00c9ea8f8.json
│ ├── query-63f0871525ed70bd980223de574d241c0b738cfb7b0ea1fc808f02c0e05b9a2f.json
│ ├── query-66218110851919b05b95b008a17547547d23f6baeeff8a5521b2b246126adc34.json
│ ├── query-6716ec4787f7155af97a4890730f4b3fe564ead8d99f8355ac249f9b39316238.json
│ ├── query-67b381fdcd20f8cfe782d939e56bf94f105cdb23a59fefb846afe8105d91d129.json
│ ├── query-6821f1e02da2c71cdf0566a163c85ff185bf0ba89c770254c9c15880ba76a553.json
│ ├── query-6935572cb23700243fbbd3dc382cdbf56edaadc4aab7855c237bce68e29414c0.json
│ ├── query-6aca3fde126cb1761c0a5ce1fbfa793bdbac4aed137cdf60eb3f277f36d7bf7a.json
│ ├── query-6ca2a2fa10d5334183d98176998d41f36948fe5624e290a32d0b50bc9fb256bf.json
│ ├── query-6cc4a7da11a37413c9951983ee3f30de933cc6357a66c8e10366fde27acaefea.json
│ ├── query-6f5d6d79587d7f7a52c920acccfe338a8c001ea30b722d3a6a1a60259d47913c.json
│ ├── query-6fbcd1c32c638530461c74f8c8195a5b1e1e6f7a389a6a60d889c88c5f47302a.json
│ ├── query-71c15686124c05a4fdef066738eadd0ab17d6af1bfeffc480c8fe52a4e6edab8.json
│ ├── query-74de473589a405c3ab567e72a881869321095e2de497b2c1866c547f939c359c.json
│ ├── query-75dc8578510ae696bf4bcdd780f7cefc666b4436cf53edf30a98dd2ff7926799.json
│ ├── query-770a4979e137ca08c5ea625259221f9d397a56defb8e498eb92da7b3a8af612b.json
│ ├── query-786a59b28265397658aecf0318beeedece2a7f5bea80b9189f3989721035c593.json
│ ├── query-78a191e21a7e7a07eee88ed02c7fbf7035f908b8e4057f7ace1b3b5d433424fe.json
│ ├── query-794c4ced16801b3e98a62eb44c18c14137dd09b11be73442a7f46b2f938b8445.json
│ ├── query-7a4c7da16e99ff3875bdd7e0d189e26c3c1ab49672bace41992aecc446061850.json
│ ├── query-7a86f93afe6e77d4481920b08ed38926446f6473107d68dfcd82ffecddcee890.json
│ ├── query-7aa6e41c80f0b2906d46e73ae05e8e70e133b7edd450b102715b8a487d6055ac.json
│ ├── query-7f6b1db5fd7b4e235f1e04d9d990fa2d47edfed23e692fbab778d387b2861a22.json
│ ├── query-811b6b01de4fdb06ad58185a5c49dfaa31aef8ea30ab3421d4afc13822fc0a9c.json
│ ├── query-816a026ca4c25329b2fb24d59efde9ab71798ff8b31ce7320e02344d4e8b3e42.json
│ ├── query-834638eb3c38eb2c220aa23ac928874d87606b47ef3bb80540614ce2f8453936.json
│ ├── query-842243ea6ca59135ae539060ff37b80791e76aa268a44642ede515f315e80c01.json
│ ├── query-84c224af99f654e2e0ba11a411376794855483eedb0c30b1873ed660ca8d10cd.json
│ ├── query-84e600f13d61c56a45133e7458d5152e68dec72030e5789bf4149a333b6ebdf5.json
│ ├── query-852c729791d5b5eb2dde5772ccbcd24579486e43886d95a11481991fdf28efa8.json
│ ├── query-85e9688218913dee85480932273ff6cf75d29af45638b195e73d73b6048806bf.json
│ ├── query-865fe86df6d04f8abb6d477af13f8a2392a742f4027d99c290f0f156df48be07.json
│ ├── query-87628d6739441a22229d08832d09cbf4598c36204a6885b2e279c848cedcfa75.json
│ ├── query-88516b9a2a424bc7697337d6f16b0d6e94b919597d709f930467423c5b4c0ec2.json
│ ├── query-8cd79c307813a509119230c7673f86471463a06ad9a84764da8d5bb1e6168e1c.json
│ ├── query-90a302af791eeb5c5f60c3f95145e0e73c2a1652c5b547e4118bac1d005300de.json
│ ├── query-90afca9cc8b6d4ca31e8ddf1ce466411b5034639df91b739f5cbe2af0ffb6811.json
│ ├── query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json
│ ├── query-936faba4e3c8fc3685d68f561a2c2d4f386c77cffde6f25702c19758a12669ce.json
│ ├── query-93f6a59171d7cd08d321c777f24255621280fbcf6a2c009afd601eac16c9ba3a.json
│ ├── query-94555a25b986992bd3cfb67bd36ff015d39bdd78ac20d56570306616bf10faf3.json
│ ├── query-95b1b405028c45c074121110d046f42f8229f150c2384671802ee7c1ef9e376d.json
│ ├── query-95b4d7508569cac38c78d21a0a471772d3703e5678ee7ca0cd32d60f5343be91.json
│ ├── query-95c00cd1ce7cdb8f5c8f45d5262d371b1b3c3f903f4eab9c0070d9916e3f8c12.json
│ ├── query-9ab1ff2abc6d51bc5a48a1dc6c294bbfdbe0d5f11a5e2ffc8c1973217b80307b.json
│ ├── query-9b2a8297fa991418b255fc5cb6ad70d695c4dceed20bdc557bfedfc820511126.json
│ ├── query-a18d0c9536dba734715903c8e8f0b7be30d3e7a477c4ddd03533b781df2fb2c7.json
│ ├── query-a3ab30d48e4a10aff1fbfa9dbc5d275a06598610bc471893c8c0febfc36c4737.json
│ ├── query-a3c235bd5df50f80ec93c3d9f6da8db7e17e89788f30c5b6432c582992b6a009.json
│ ├── query-a527a90fcb69c58a5e711555b6ee56e7b92ceabe746279eccd7ae3e9fa918e96.json
│ ├── query-a75bf8b11d832d154716d4618595b117da583a31b51baaf7b84e9ee0d0e3109c.json
│ ├── query-a7c03becdf9954611ac7ad96e1f5bb5e8364f095f1cc4dc23719b218eb032973.json
│ ├── query-aa75996ca6aa12f0bcaa5fb092ac279f8a94aadcc29d0e2b652dc420506835e7.json
│ ├── query-b16f38d563d4d0b35f06978a8b2c76dc5121b0e59f8b5992c9dad05dd101c8ad.json
│ ├── query-b5024138772e13557df973c1c021daf74aab97b5874d7366c478c18ae2e89e58.json
│ ├── query-b509712055858af398fd12ddd1a8c3da54280cf55f0c53f340bddbf4bf09b3e0.json
│ ├── query-ba815f67aab3f302a2982225b72c6113bbd9bc87326e4f0a3b44dadbb5f47920.json
│ ├── query-bbb3c31ea7e9c0a3bdabbc23b2730ee0254f38a7c1457f917c8f37f1e1aefa12.json
│ ├── query-bd34e351ea1adc0d12d4f1cce5a855089b7f39a431dea2903c3e0b9a220640b8.json
│ ├── query-bde2b88ffb1b59362c7ae82369892c79131c175924f95e5d48d75931fb846f41.json
│ ├── query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json
│ ├── query-c335b73ad499b67100e4ce3131a526ddf1745488597c3392ae05e4b398a8715e.json
│ ├── query-c360ec37792d567535ccd2a5011d92c7a201f516e92e204db855167f381c58b1.json
│ ├── query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json
│ ├── query-c81848346ed2ff85f1d5fb8041fba648137a927762b385b97054552c00793a50.json
│ ├── query-c843fb8517b1e364016b85a9e94927673bf8311bfbf723b610d59ecfef3fafce.json
│ ├── query-c8b1f57c5ddce8006a8e137be07f13b455f59657f5fcef67d69905ecec4cb063.json
│ ├── query-ca2a21db67716e3f12b9f9240c1dba1b7cbe0bec1f59ef132fed53942ebad317.json
│ ├── query-cb2375ad0094baefed417645b781f40dcabfbfe4a4738c99bb4efff649e6a0e6.json
│ ├── query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json
│ ├── query-cbf1d3d9fdeb672eacd4b008879787bc1f0b22a554fb249d4e12a665d9767cbd.json
│ ├── query-cce2abeed3399ad0b8867901735c5883c8d35fa82d6e0596c56eaf02c36a7e4f.json
│ ├── query-d0a24b554fe420d7ebf856ae7f1525aff3695fc97e2f43041dc54a4e62a88746.json
│ ├── query-d0e5f5097b35a15f19e9e7faf2c62336d5f130e939331e84c7d834f6028ea673.json
│ ├── query-d1ab621e0b6e8bc24f8fa8cbb975ae3b7f9f366cac02d66b5291d7207295ca29.json
│ ├── query-d1f845717b19636e61d1d96d7a5629754f3ded9bda9116953bd1b40bd80551ae.json
│ ├── query-d2e87c077e5702cd57a88e23e1eabe4b0badd98ef99da1b185bffa8d5c9ed298.json
│ ├── query-d366aca6b187f086e5a8281081adec190bbb3cd5256c5a77ed321b99cd34bbbc.json
│ ├── query-d388782f755f0b164ef36c168af142baeb9bbd3cc2b8b7cd736b346580be8790.json
│ ├── query-d492c20dec54c7335744dcc139b95f30a80f06d9fd48de644630adf183e1ac34.json
│ ├── query-d4fa2c5f3c455be4694235009e82efdd99d366e3b0374f78efec8dd560f88d95.json
│ ├── query-d61523de25986b47a382d36a1f18e590420f1b1285d024f5554cc02c375d6476.json
│ ├── query-d756ec630d5b75dd0dc7df2339847e28bdf07a790e65fd40a64d7f9022f430bd.json
│ ├── query-d84ab58e78653688e7c392ffad00d6e039be5ccb9c5b99b7088cc41cfe981873.json
│ ├── query-d90e7efaca54b92de038b6eef20a7bd36be747dc38f7943fe299799c623038be.json
│ ├── query-d921f52e4bc3fef72c810e19455a2fa4fbd52f5a1f3a1838b146d001eadabd47.json
│ ├── query-da1434fe116cbb48bc5aac0b6905dd748f096bf78d3cdcfea3a576b4aaeba5fc.json
│ ├── query-dbc31936b3e79632f9c8bae449182274d9d75766bd9a5c383b96bd60e9c5c866.json
│ ├── query-dc600fc160b55be22fb77e285fd7e5e646ef359fdbca9b62c6aefede5ebff606.json
│ ├── query-e219696c80f1d4c38260ebeb50ec78e344975eef6760951dbf6201c01b8ceef0.json
│ ├── query-e2b4d66736962d1e3d0b9cf687ce5c5e653b465462f53433a28cf314e5c87d6c.json
│ ├── query-e38e66d89806471f358b317778de35a68da4b9e6ca6e4b6a7c437ca7493b858c.json
│ ├── query-e6159a03f1521b44de59858cd95c48e62cabefba6cac629c104eec75d2868bf3.json
│ ├── query-e6a0e771ffacfdec95ef8c36de769448384fda4350aa630becebd0e5add632f4.json
│ ├── query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json
│ ├── query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json
│ ├── query-ed9bce7f35c4dd8d41427bc56db67adf175044a8d31149b3745ceb8f9b3c82fa.json
│ ├── query-ef947984b00fdd32271e7e76d8b5d035cd4ca211b600787fda18d62a34b4c04b.json
│ ├── query-f05042dd22f862603e63f63d47b93e579545c79cabe15d32304a47ca7665a55f.json
│ ├── query-f18d6e075a522b0ce5935351dd57ab0dda4d8b4ed3881c2ad0bc09c07c43e6fe.json
│ ├── query-f409626142553d4496d15b5dfa7da8a5a238da86f56c930c09a261f2efa1f55c.json
│ ├── query-f54ced785b4fdd22c9236b566996d5d9d4a8c91902e4029fe8f8f30f3af39b39.json
│ ├── query-f58a2f05efbda0698d27d83be5c6816fc46e3de33f926c6343bcbfa90a387b07.json
│ ├── query-f68cc2042d6aa78feeb33640e9ef13f46c5e10ee269ea0bd965b0e57dee6cf94.json
│ ├── query-f78c2c56568dcee0b93e759ee517fb87d6d115a02856a756d481ea4c863c0327.json
│ ├── query-f9c28d0fa124ef543259c6869d7c517deabda3af9a67c6e59d8e15c0245c83a0.json
│ ├── query-fa92aff963d9a0c69fb203f76f54728c67d52a68eada59ba3bd445c4b8aeceef.json
│ ├── query-faf37892741717680e9a8d8e7d8decaba571d0dd129b57334aad7c63e2a2ef59.json
│ ├── query-fb21df2827de97055cdc1c493b079b29667f75b18169c909c4c8341697fd0105.json
│ ├── query-fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f.json
│ └── query-fffe6f01abf0e5d8649a49b5793ccb92a9f823f07c363341357ea74bf4f4a16d.json
├── Cargo.toml
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── SELF_HOST_LICENSE_AGREEMENT.md
├── admin_frontend/
│ ├── Cargo.toml
│ ├── Dockerfile
│ ├── README.md
│ ├── assets/
│ │ ├── README.md
│ │ ├── apple/
│ │ │ └── logo.html
│ │ ├── base.css
│ │ ├── discord/
│ │ │ ├── README.md
│ │ │ └── logo.html
│ │ ├── github/
│ │ │ ├── README.md
│ │ │ └── logo.html
│ │ ├── google/
│ │ │ ├── README.md
│ │ │ ├── logo.css
│ │ │ └── logo.html
│ │ ├── home.css
│ │ ├── login.css
│ │ ├── logo.html
│ │ ├── message.css
│ │ ├── minio/
│ │ │ └── logo.html
│ │ ├── navigate.css
│ │ ├── postgres/
│ │ │ └── logo.html
│ │ ├── sidebar.css
│ │ └── top_menu_bar.css
│ ├── dev.env
│ ├── src/
│ │ ├── askama_entities.rs
│ │ ├── config.rs
│ │ ├── error.rs
│ │ ├── ext/
│ │ │ ├── api.rs
│ │ │ ├── entities.rs
│ │ │ ├── error.rs
│ │ │ └── mod.rs
│ │ ├── lib.rs
│ │ ├── main.rs
│ │ ├── models.rs
│ │ ├── response.rs
│ │ ├── session.rs
│ │ ├── templates.rs
│ │ ├── web_api.rs
│ │ └── web_app.rs
│ ├── templates/
│ │ ├── components/
│ │ │ ├── admin_navigate.html
│ │ │ ├── admin_sidebar.html
│ │ │ ├── admin_sso_create.html
│ │ │ ├── admin_sso_detail.html
│ │ │ ├── admin_sso_list.html
│ │ │ ├── admin_top_menu_bar.html
│ │ │ ├── admin_user_details.html
│ │ │ ├── admin_users.html
│ │ │ ├── appflowy_banner.html
│ │ │ ├── change_password.html
│ │ │ ├── create_user.html
│ │ │ ├── invite.html
│ │ │ ├── message.html
│ │ │ ├── navigate.html
│ │ │ ├── shared_workspaces.html
│ │ │ ├── sidebar.html
│ │ │ ├── top_menu_bar.html
│ │ │ ├── user_details.html
│ │ │ ├── user_usage.html
│ │ │ └── workspace_usage.html
│ │ ├── layouts/
│ │ │ └── base.html
│ │ └── pages/
│ │ ├── admin_home.html
│ │ ├── home.html
│ │ ├── login.html
│ │ ├── login_callback.html
│ │ ├── login_v2.html
│ │ ├── open_appflowy_or_download.html
│ │ ├── payment_success_redirect.html
│ │ └── redirect.html
│ └── tests/
│ ├── main.rs
│ ├── oauth/
│ │ └── mod.rs
│ └── utils/
│ ├── mod.rs
│ └── test_config.rs
├── assets/
│ └── mailer_templates/
│ ├── build_production/
│ │ ├── access_request.html
│ │ ├── access_request_approved_notification.html
│ │ ├── confirmation.html
│ │ ├── import_data_fail.html
│ │ ├── import_data_success.html
│ │ ├── magic_link.html
│ │ ├── page_mention_notification.html
│ │ ├── recovery.html
│ │ └── workspace_invitation.html
│ └── confirmation.html
├── deny.toml
├── deploy.env
├── dev.env
├── doc/
│ ├── AUTHENTICATION.md
│ ├── CONTRIBUTING.md
│ ├── DEPLOYMENT.md
│ ├── EC2_SELF_HOST_GUIDE.md
│ ├── GUIDE.md
│ ├── LOCAL_BUILD.md
│ ├── OKTA_SAML.md
│ └── README.md
├── docker/
│ ├── gotrue/
│ │ ├── Dockerfile
│ │ └── start.sh
│ ├── pgadmin/
│ │ └── servers.json
│ └── web/
│ ├── Dockerfile
│ └── nginx.conf
├── docker-compose-ci.yml
├── docker-compose-dev.yml
├── docker-compose-extras.yml
├── docker-compose.yml
├── email_template/
│ ├── .editorconfig
│ ├── .gitignore
│ ├── .npmrc
│ ├── LICENSE
│ ├── README.md
│ ├── config.js
│ ├── config.production.js
│ ├── package.json
│ ├── src/
│ │ ├── components/
│ │ │ ├── button.html
│ │ │ ├── divider.html
│ │ │ ├── footer.html
│ │ │ ├── spacer.html
│ │ │ ├── v-fill.html
│ │ │ └── v-image.html
│ │ ├── css/
│ │ │ ├── resets.css
│ │ │ ├── tailwind.css
│ │ │ └── utilities.css
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── templates/
│ │ ├── access_request.html
│ │ ├── access_request_approved_notification.html
│ │ ├── confirmation.html
│ │ ├── import_data_fail.html
│ │ ├── import_data_success.html
│ │ ├── magic_link.html
│ │ ├── page_mention_notification.html
│ │ ├── recovery.html
│ │ └── workspace_invitation.html
│ └── tailwind.config.js
├── env.deploy.secret.example
├── env.dev.secret.example
├── external_proxy_config/
│ └── nginx/
│ └── appflowy.site.conf
├── libs/
│ ├── access-control/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── act.rs
│ │ ├── casbin/
│ │ │ ├── access.rs
│ │ │ ├── adapter.rs
│ │ │ ├── collab.rs
│ │ │ ├── enforcer.rs
│ │ │ ├── enforcer_v2.rs
│ │ │ ├── mod.rs
│ │ │ ├── performance_comparison_tests.rs
│ │ │ ├── redis_cache.rs
│ │ │ ├── util.rs
│ │ │ └── workspace.rs
│ │ ├── collab.rs
│ │ ├── entity.rs
│ │ ├── lib.rs
│ │ ├── metrics.rs
│ │ ├── noops/
│ │ │ ├── collab.rs
│ │ │ ├── mod.rs
│ │ │ └── workspace.rs
│ │ ├── request.rs
│ │ └── workspace.rs
│ ├── app-error/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── gotrue.rs
│ │ └── lib.rs
│ ├── appflowy-ai-client/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── client.rs
│ │ │ ├── dto.rs
│ │ │ ├── error.rs
│ │ │ └── lib.rs
│ │ └── tests/
│ │ ├── chat_test/
│ │ │ ├── completion_test.rs
│ │ │ ├── context_test.rs
│ │ │ ├── mod.rs
│ │ │ ├── model_config_test.rs
│ │ │ └── qa_test.rs
│ │ ├── index_test/
│ │ │ ├── index_search_test.rs
│ │ │ └── mod.rs
│ │ ├── main.rs
│ │ └── row_test/
│ │ ├── mod.rs
│ │ ├── summarize_test.rs
│ │ └── translate_test.rs
│ ├── appflowy-proto/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── proto/
│ │ │ ├── collab.proto
│ │ │ ├── messages.proto
│ │ │ └── notification.proto
│ │ └── src/
│ │ ├── client_message.rs
│ │ ├── lib.rs
│ │ ├── pb/
│ │ │ ├── collab.rs
│ │ │ ├── messages.rs
│ │ │ ├── mod.rs
│ │ │ └── notification.rs
│ │ ├── server_message.rs
│ │ └── shared.rs
│ ├── client-api/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── collab_sync/
│ │ │ ├── collab_sink.rs
│ │ │ ├── collab_stream.rs
│ │ │ ├── error.rs
│ │ │ ├── mod.rs
│ │ │ ├── plugin.rs
│ │ │ └── sync_control.rs
│ │ ├── http.rs
│ │ ├── http_access_request.rs
│ │ ├── http_ai.rs
│ │ ├── http_billing.rs
│ │ ├── http_blob.rs
│ │ ├── http_chat.rs
│ │ ├── http_collab.rs
│ │ ├── http_file.rs
│ │ ├── http_guest.rs
│ │ ├── http_member.rs
│ │ ├── http_person.rs
│ │ ├── http_publish.rs
│ │ ├── http_quick_note.rs
│ │ ├── http_search.rs
│ │ ├── http_settings.rs
│ │ ├── http_template.rs
│ │ ├── http_view.rs
│ │ ├── lib.rs
│ │ ├── log.rs
│ │ ├── notify.rs
│ │ ├── ping.rs
│ │ ├── retry.rs
│ │ ├── v2/
│ │ │ ├── PROTOCOL.md
│ │ │ ├── actor.rs
│ │ │ ├── compactor.rs
│ │ │ ├── conn_retry.rs
│ │ │ ├── controller.rs
│ │ │ ├── db.rs
│ │ │ └── mod.rs
│ │ └── ws/
│ │ ├── client.rs
│ │ ├── error.rs
│ │ ├── handler.rs
│ │ ├── mod.rs
│ │ ├── msg_queue.rs
│ │ └── state.rs
│ ├── client-api-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── id.rs
│ │ └── lib.rs
│ ├── client-api-test/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── assertion_utils.rs
│ │ ├── async_utils.rs
│ │ ├── client.rs
│ │ ├── database_util.rs
│ │ ├── lib.rs
│ │ ├── log.rs
│ │ ├── test_client.rs
│ │ ├── test_client_config.rs
│ │ ├── test_client_v2.rs
│ │ ├── user.rs
│ │ └── workspace_ops.rs
│ ├── client-websocket/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── error.rs
│ │ ├── lib.rs
│ │ ├── message.rs
│ │ ├── native.rs
│ │ └── web.rs
│ ├── collab-rt-entity/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── migration/
│ │ │ ├── 0147/
│ │ │ │ ├── client_init
│ │ │ │ └── collab_update
│ │ │ └── 0149/
│ │ │ ├── client_collab_v1
│ │ │ ├── client_init
│ │ │ └── collab_update
│ │ ├── proto/
│ │ │ ├── collab.proto
│ │ │ └── realtime.proto
│ │ ├── src/
│ │ │ ├── client_message.rs
│ │ │ ├── collab_proto.rs
│ │ │ ├── lib.rs
│ │ │ ├── message.rs
│ │ │ ├── realtime_proto.rs
│ │ │ ├── server_message.rs
│ │ │ └── user.rs
│ │ └── tests/
│ │ ├── main.rs
│ │ └── serde_test.rs
│ ├── collab-rt-protocol/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── data_validation.rs
│ │ ├── lib.rs
│ │ ├── message.rs
│ │ └── protocol.rs
│ ├── collab-stream/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── awareness_gossip.rs
│ │ ├── client.rs
│ │ ├── collab_update_sink.rs
│ │ ├── error.rs
│ │ ├── lease.rs
│ │ ├── lib.rs
│ │ ├── metrics.rs
│ │ ├── model.rs
│ │ └── stream_router.rs
│ ├── database/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── access_request.rs
│ │ ├── chat/
│ │ │ ├── chat_ops.rs
│ │ │ └── mod.rs
│ │ ├── collab/
│ │ │ ├── collab_db_ops.rs
│ │ │ ├── collab_storage.rs
│ │ │ └── mod.rs
│ │ ├── file/
│ │ │ ├── file_storage.rs
│ │ │ ├── mod.rs
│ │ │ ├── s3_client_impl.rs
│ │ │ └── utils.rs
│ │ ├── history/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── index/
│ │ │ ├── collab_embeddings_ops.rs
│ │ │ ├── mod.rs
│ │ │ └── search_ops.rs
│ │ ├── lib.rs
│ │ ├── listener.rs
│ │ ├── notification.rs
│ │ ├── pg_row.rs
│ │ ├── publish.rs
│ │ ├── quick_note.rs
│ │ ├── resource_usage.rs
│ │ ├── template.rs
│ │ ├── user.rs
│ │ └── workspace.rs
│ ├── database-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── dto.rs
│ │ ├── error.rs
│ │ ├── file_dto.rs
│ │ └── lib.rs
│ ├── gotrue/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── api.rs
│ │ ├── grant.rs
│ │ ├── lib.rs
│ │ └── params.rs
│ ├── gotrue-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── dto.rs
│ │ ├── gotrue_jwt.rs
│ │ ├── lib.rs
│ │ └── sso.rs
│ ├── indexer/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── collab_indexer/
│ │ │ ├── document_indexer.rs
│ │ │ ├── mod.rs
│ │ │ └── provider.rs
│ │ ├── entity.rs
│ │ ├── error.rs
│ │ ├── lib.rs
│ │ ├── metrics.rs
│ │ ├── queue.rs
│ │ ├── scheduler.rs
│ │ ├── unindexed_workspace.rs
│ │ └── vector/
│ │ ├── embedder.rs
│ │ ├── mod.rs
│ │ └── open_ai.rs
│ ├── infra/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── env_util.rs
│ │ ├── file_util.rs
│ │ ├── lib.rs
│ │ ├── reqwest.rs
│ │ ├── thread_pool.rs
│ │ ├── tokio_runtime.rs
│ │ └── validate.rs
│ ├── llm-client/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── chat.rs
│ │ └── lib.rs
│ ├── mailer/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── config.rs
│ │ ├── lib.rs
│ │ └── sender.rs
│ ├── shared-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── dto/
│ │ │ ├── access_request_dto.rs
│ │ │ ├── ai_dto.rs
│ │ │ ├── auth_dto.rs
│ │ │ ├── billing_dto.rs
│ │ │ ├── chat_dto.rs
│ │ │ ├── file_dto.rs
│ │ │ ├── guest_dto.rs
│ │ │ ├── history_dto.rs
│ │ │ ├── import_dto.rs
│ │ │ ├── mod.rs
│ │ │ ├── publish_dto.rs
│ │ │ ├── search_dto.rs
│ │ │ ├── server_info_dto.rs
│ │ │ └── workspace_dto.rs
│ │ ├── lib.rs
│ │ ├── request.rs
│ │ ├── response.rs
│ │ ├── response_actix.rs
│ │ └── response_stream.rs
│ ├── snowflake/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── lib.rs
│ ├── tonic-proto/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── proto/
│ │ │ └── history.proto
│ │ └── src/
│ │ └── lib.rs
│ └── workspace-template/
│ ├── Cargo.toml
│ ├── assets/
│ │ ├── default_space.json
│ │ ├── desktop_guide.json
│ │ ├── getting_started.json
│ │ ├── inbox.json
│ │ ├── initial_document.json
│ │ ├── mobile_guide.json
│ │ ├── to-dos.json
│ │ ├── vault_get_started.json
│ │ └── web_guide.json
│ └── src/
│ ├── database/
│ │ ├── database_collab.rs
│ │ └── mod.rs
│ ├── document/
│ │ ├── getting_started.rs
│ │ ├── mod.rs
│ │ ├── parser.rs
│ │ ├── util.rs
│ │ └── vault_template.rs
│ ├── hierarchy_builder.rs
│ ├── lib.rs
│ └── tests/
│ ├── getting_started_tests.rs
│ └── mod.rs
├── migrations/
│ ├── 20230312043024_user.sql
│ ├── 20230906101032_permission.sql
│ ├── 20230906101223_workspace.sql
│ ├── 20230906101555_user_profile.sql
│ ├── 20230906102652_collab.sql
│ ├── 20230926145155_blob_storage.sql
│ ├── 20231113074418_user_change.sql
│ ├── 20231130150001_user_id_foreign_key.sql
│ ├── 20240123140707_workspace_owner_trigger.sql
│ ├── 20240227000000_workspace_icon.sql
│ ├── 20240303003711_collab_member_timestamp.sql
│ ├── 20240304173938_workspace_invitation.sql
│ ├── 20240306110000_workspace_invitation_2.sql
│ ├── 20240412083446_history_init.sql
│ ├── 20240510024506_chat_message.sql
│ ├── 20240529054858_workspace_add_token_usage.sql
│ ├── 20240531031836_chat_message_meta.sql
│ ├── 20240604090043_add_workspace_settings.sql
│ ├── 20240613112820_publish_collab.sql
│ ├── 20240614171931_collab_embeddings.sql
│ ├── 20240617135926_af_workspace_foreign_key_indices.sql
│ ├── 20240618035048_af_workspace_ai_usage.sql
│ ├── 20240618173348_publish_collab_2.sql
│ ├── 20240621105148_publish_collab_3.sql
│ ├── 20240626184736_publish_collab_4.sql
│ ├── 20240627525836_publish_collab_5.sql
│ ├── 20240629035230_publish_collab_6.sql
│ ├── 20240630010030_workspace_member_foreign_key.sql
│ ├── 20240723090305_publish_view_comment.sql
│ ├── 20240725065111_publish_view_reaction.sql
│ ├── 20240729065107_publish_view_reaction_2.sql
│ ├── 20240806054557_template_category.sql
│ ├── 20240806103039_template_creator.sql
│ ├── 20240813040905_template.sql
│ ├── 20240910100000_af_collab_embeddings_indices.sql
│ ├── 20240924045045_access_request.sql
│ ├── 20240930135712_import_data.sql
│ ├── 20241014153023_default_published_view.sql
│ ├── 20241025135939_import_task_add_uid_column.sql
│ ├── 20241031094508_af_uuid_indexes.sql
│ ├── 20241101063559_af_workspace_namespace.sql
│ ├── 20241108155841_unpublished_collab.sql
│ ├── 20241124212630_af_collab_updated_at.sql
│ ├── 20241126175909_af_collab_stored_procedures.sql
│ ├── 20241211034455_stop_writing_to_collab_member.sql
│ ├── 20241216080018_quick_notes.sql
│ ├── 20241218090459_collab_embedding_add_metadata.sql
│ ├── 20241222152427_collab_add_indexed_at.sql
│ ├── 20241230064618_collab_embedding_add_fragment_index.sql
│ ├── 20250109142738_blob_metadata_add_file_status.sql
│ ├── 20250113091708_publish_options.sql
│ ├── 20250217080054_drop_collab_member_trigger.sql
│ ├── 20250226091933_blob_metadata_add_file_source.sql
│ ├── 20250305082546_workspace_delete_trigger.sql
│ ├── 20250318120849_departition_af_collab.sql
│ ├── 20250403021559_workspace_invite_code.sql
│ ├── 20250405092732_af_collab_embeddings_upsert.sql
│ ├── 20250414074846_drop_af_collab_set_updated_at_trigger.sql
│ ├── 20250703030740_workspace_member_profile.sql
│ ├── 20250714060306_page_mention.sql
│ ├── 20250718033221_page_mention_notification.sql
│ ├── 20250721084910_page_mention_view_name.sql
│ ├── 20250723024109_workspace_profile_custom_image_url.sql
│ └── 20250723072011_page_mention_notification_status.sql
├── nginx/
│ ├── nginx.conf
│ └── ssl/
│ ├── certificate.crt
│ └── private_key.key
├── rust-toolchain.toml
├── rustfmt.toml
├── script/
│ ├── client_api_deps_check.sh
│ ├── code_gen.sh
│ ├── diagnose_appflowy.sh
│ ├── generate_env.sh
│ ├── lib/
│ │ ├── README.md
│ │ ├── check_config.sh
│ │ ├── check_containers.sh
│ │ ├── check_functional.sh
│ │ ├── check_health.sh
│ │ ├── check_logs.sh
│ │ ├── report.sh
│ │ └── utils.sh
│ ├── redis/
│ │ ├── remove_redis_stream_range.sh
│ │ └── show_redis_stream_values.sh
│ ├── reset-password-interactive.sh
│ ├── run_ci_server.sh
│ └── run_local_server.sh
├── services/
│ ├── appflowy-collaborate/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── actix_ws/
│ │ │ │ ├── client/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── rt_client.rs
│ │ │ │ ├── entities.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── server/
│ │ │ │ ├── mod.rs
│ │ │ │ └── rt_actor.rs
│ │ │ ├── client/
│ │ │ │ ├── client_msg_router.rs
│ │ │ │ └── mod.rs
│ │ │ ├── collab/
│ │ │ │ ├── cache/
│ │ │ │ │ ├── collab_cache.rs
│ │ │ │ │ ├── disk_cache.rs
│ │ │ │ │ ├── mem_cache.rs
│ │ │ │ │ └── mod.rs
│ │ │ │ ├── collab_manager.rs
│ │ │ │ ├── collab_store.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── snapshot_scheduler.rs
│ │ │ ├── compression.rs
│ │ │ ├── config.rs
│ │ │ ├── connect_state.rs
│ │ │ ├── error.rs
│ │ │ ├── group/
│ │ │ │ ├── cmd.rs
│ │ │ │ ├── group_init.rs
│ │ │ │ ├── manager.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── null_sender.rs
│ │ │ │ └── state.rs
│ │ │ ├── lib.rs
│ │ │ ├── metrics.rs
│ │ │ ├── permission.rs
│ │ │ ├── rt_server.rs
│ │ │ ├── snapshot/
│ │ │ │ ├── mod.rs
│ │ │ │ └── snapshot_control.rs
│ │ │ ├── util/
│ │ │ │ ├── channel_ext.rs
│ │ │ │ └── mod.rs
│ │ │ └── ws2/
│ │ │ ├── actors/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── server.rs
│ │ │ │ ├── session.rs
│ │ │ │ └── workspace.rs
│ │ │ └── mod.rs
│ │ └── tests/
│ │ ├── indexer_test.rs
│ │ └── main.rs
│ └── appflowy-worker/
│ ├── Cargo.toml
│ ├── Dockerfile
│ ├── README.md
│ ├── deploy.env
│ ├── src/
│ │ ├── application.rs
│ │ ├── config.rs
│ │ ├── error.rs
│ │ ├── import_worker/
│ │ │ ├── email_notifier.rs
│ │ │ ├── mod.rs
│ │ │ ├── report.rs
│ │ │ └── worker.rs
│ │ ├── indexer_worker/
│ │ │ ├── mod.rs
│ │ │ └── worker.rs
│ │ ├── lib.rs
│ │ ├── mailer.rs
│ │ ├── main.rs
│ │ ├── metric.rs
│ │ └── s3_client.rs
│ └── tests/
│ ├── import_test.rs
│ └── main.rs
├── src/
│ ├── api/
│ │ ├── access_request.rs
│ │ ├── ai.rs
│ │ ├── chat.rs
│ │ ├── data_import.rs
│ │ ├── file_storage.rs
│ │ ├── guest.rs
│ │ ├── invite_code.rs
│ │ ├── metrics.rs
│ │ ├── mod.rs
│ │ ├── search.rs
│ │ ├── server_info.rs
│ │ ├── template.rs
│ │ ├── user.rs
│ │ ├── util.rs
│ │ ├── workspace.rs
│ │ └── ws.rs
│ ├── application.rs
│ ├── biz/
│ │ ├── access_request/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── authentication/
│ │ │ ├── jwt.rs
│ │ │ └── mod.rs
│ │ ├── chat/
│ │ │ ├── metrics.rs
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── collab/
│ │ │ ├── database.rs
│ │ │ ├── folder_view.rs
│ │ │ ├── mod.rs
│ │ │ ├── ops.rs
│ │ │ ├── publish_outline.rs
│ │ │ └── utils.rs
│ │ ├── data_import/
│ │ │ └── mod.rs
│ │ ├── mod.rs
│ │ ├── notification/
│ │ │ ├── email.rs
│ │ │ └── mod.rs
│ │ ├── pg_listener.rs
│ │ ├── search/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── template/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── user/
│ │ │ ├── image_asset.rs
│ │ │ ├── mod.rs
│ │ │ ├── user_delete.rs
│ │ │ ├── user_info.rs
│ │ │ ├── user_init.rs
│ │ │ └── user_verify.rs
│ │ └── workspace/
│ │ ├── duplicate.rs
│ │ ├── invite.rs
│ │ ├── mod.rs
│ │ ├── ops.rs
│ │ ├── page_view.rs
│ │ ├── publish.rs
│ │ ├── publish_dup.rs
│ │ └── quick_note.rs
│ ├── config/
│ │ ├── config.rs
│ │ └── mod.rs
│ ├── domain/
│ │ ├── compression.rs
│ │ └── mod.rs
│ ├── lib.rs
│ ├── mailer.rs
│ ├── main.rs
│ ├── middleware/
│ │ ├── metrics_mw.rs
│ │ ├── mod.rs
│ │ └── request_id.rs
│ ├── state.rs
│ └── telemetry.rs
├── tests/
│ ├── ai_test/
│ │ ├── asset/
│ │ │ └── my_profile.txt
│ │ ├── chat_test.rs
│ │ ├── chat_with_selected_doc_test.rs
│ │ ├── completion_test.rs
│ │ ├── mod.rs
│ │ ├── summarize_row.rs
│ │ ├── summary_search_test.rs
│ │ └── util.rs
│ ├── collab/
│ │ ├── awareness_test.rs
│ │ ├── collab_curd_test.rs
│ │ ├── collab_embedding_test.rs
│ │ ├── database_crud.rs
│ │ ├── missing_update_test.rs
│ │ ├── mod.rs
│ │ ├── multi_devices_edit.rs
│ │ ├── permission_test.rs
│ │ ├── single_device_edit.rs
│ │ ├── storage_test.rs
│ │ ├── stress_test.rs
│ │ ├── util.rs
│ │ └── web_edit.rs
│ ├── collab_history/
│ │ ├── document_history.rs
│ │ └── mod.rs
│ ├── file_test/
│ │ ├── delete_dir_test.rs
│ │ ├── mod.rs
│ │ ├── multiple_part_test.rs
│ │ ├── put_and_get.rs
│ │ └── usage.rs
│ ├── gotrue/
│ │ ├── admin.rs
│ │ ├── health.rs
│ │ ├── mod.rs
│ │ └── settings.rs
│ ├── main.rs
│ ├── search/
│ │ ├── asset/
│ │ │ ├── appflowy_values.md
│ │ │ ├── kathryn_tennis_story.md
│ │ │ └── the_five_dysfunctions_of_a_team.md
│ │ ├── document_search.rs
│ │ └── mod.rs
│ ├── server_info/
│ │ ├── info.rs
│ │ └── mod.rs
│ ├── sql_test/
│ │ ├── chat_test.rs
│ │ ├── collab_embed_test.rs
│ │ ├── history_test.rs
│ │ ├── mod.rs
│ │ ├── util.rs
│ │ └── workspace_test.rs
│ ├── user/
│ │ ├── delete.rs
│ │ ├── image.rs
│ │ ├── mod.rs
│ │ ├── refresh.rs
│ │ ├── sign_in.rs
│ │ ├── sign_out.rs
│ │ ├── sign_up.rs
│ │ ├── update.rs
│ │ └── user_awareness_test.rs
│ ├── websocket/
│ │ ├── actor_test.rs
│ │ ├── conn_test.rs
│ │ └── mod.rs
│ ├── workspace/
│ │ ├── access_request.rs
│ │ ├── asset/
│ │ │ └── read_me.json
│ │ ├── default_user_workspace.rs
│ │ ├── edit_workspace.rs
│ │ ├── import_test.rs
│ │ ├── invitation_crud.rs
│ │ ├── join_workspace.rs
│ │ ├── member_crud.rs
│ │ ├── mod.rs
│ │ ├── page_view.rs
│ │ ├── person.rs
│ │ ├── publish.rs
│ │ ├── published_data.rs
│ │ ├── quick_note.rs
│ │ ├── template.rs
│ │ ├── workspace_crud.rs
│ │ ├── workspace_folder.rs
│ │ └── workspace_settings.rs
│ └── yrs_version/
│ ├── README.md
│ ├── document_test.rs
│ ├── files/
│ │ ├── folder_encode_collab_0172
│ │ └── get_started_encode_collab_0172
│ ├── folder_test.rs
│ ├── mod.rs
│ └── util.rs
└── xtask/
├── Cargo.toml
└── src/
└── main.rs
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
.env
.dockerignore
spec.yaml
**/target
target/
deploy/
tests/
docker/Dockerfile
scripts/
================================================
FILE: .github/FUNDING.yml
================================================
ko_fi: appflowy
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[Bug] Untitled Bug Issue"
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Additional context**
- Environment [e.g. flutter doctor -v or rustup show]
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: "[FR] Untitled Feature Request"
labels: ''
assignees: ''
---
**1~3 main use cases of the proposed feature**
Ex: As a ... , I want to set a reminder for a checkbox item so that I can be reminded by the system at a specific time.
**what types of users can benefit from using your proposed feature**
Ex: busy students who tend to forget their paper deadlines
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/workflows/audit.yml
================================================
name: Security audit
on:
schedule:
- cron: '0 0 * * *'
push:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
jobs:
security_audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: taiki-e/install-action@cargo-deny
- name: Scan for vulnerabilities
run:
cargo deny check advisories
================================================
FILE: .github/workflows/build_test_docker_image.yaml
================================================
name: Manually Build Selected Docker Images
on:
workflow_dispatch:
inputs:
branch:
description: "Branch to build from"
required: true
default: "main"
debug_version:
description: "Enter the release version tag (e.g. 0.9.30). The built image will be tagged as xxx:0.9.30-amd64."
required: true
archs:
description: "Target architectures (comma separated), e.g. linux/amd64,linux/arm64"
required: false
default: "linux/amd64"
build_gotrue:
description: "Build GoTrue image"
type: boolean
required: false
default: false
build_appflowy_cloud:
description: "Build AppFlowy Cloud image"
type: boolean
required: false
default: true
build_admin_frontend:
description: "Build Admin Frontend image"
type: boolean
required: false
default: false
build_appflowy_worker:
description: "Build AppFlowy Worker image"
type: boolean
required: false
default: true
jobs:
setup:
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Set up architecture matrix
id: set-matrix
run: |
# Convert comma-separated archs to JSON array and extract arch names
archs="${{ github.event.inputs.archs }}"
# Replace linux/ prefix and convert to JSON array
matrix_archs=$(echo "$archs" | sed 's/linux\///g' | sed 's/,/","/g' | sed 's/^/["/' | sed 's/$/"]/')
echo "matrix={\"arch\":$matrix_archs}" >> $GITHUB_OUTPUT
echo "Generated matrix: {\"arch\":$matrix_archs}"
gotrue:
runs-on: ubuntu-22.04
needs: setup
if: ${{ github.event.inputs.build_gotrue == 'true' }}
strategy:
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.branch }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push GoTrue image
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/gotrue/Dockerfile
platforms: linux/${{ matrix.arch }}
push: true
tags: |
appflowyinc/gotrue:${{ github.event.inputs.debug_version }}-${{ matrix.arch }}-internal
- name: Logout from Docker Hub
if: always()
run: docker logout
appflowy_cloud:
runs-on: ubuntu-22.04
needs: setup
if: ${{ github.event.inputs.build_appflowy_cloud == 'true' }}
strategy:
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.branch }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push AppFlowy Cloud image
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/${{ matrix.arch }}
push: true
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_cloud:${{ github.event.inputs.debug_version }}-${{ matrix.arch }}-internal
provenance: false
build-args: |
PROFILE=release
- name: Logout from Docker Hub
if: always()
run: docker logout
admin_frontend:
runs-on: ubuntu-22.04
needs: setup
if: ${{ github.event.inputs.build_admin_frontend == 'true' }}
strategy:
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.branch }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push Admin Frontend image
uses: docker/build-push-action@v5
with:
context: .
file: ./admin_frontend/Dockerfile
platforms: linux/${{ matrix.arch }}
push: true
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/admin_frontend:${{ github.event.inputs.debug_version }}-${{ matrix.arch }}-internal
provenance: false
build-args: |
PROFILE=release
- name: Logout from Docker Hub
if: always()
run: docker logout
appflowy_worker:
runs-on: ubuntu-22.04
needs: setup
if: ${{ github.event.inputs.build_appflowy_worker == 'true' }}
strategy:
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.branch }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push AppFlowy Worker image
uses: docker/build-push-action@v5
with:
context: .
file: ./services/appflowy-worker/Dockerfile
platforms: linux/${{ matrix.arch }}
push: true
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_worker:${{ github.event.inputs.debug_version }}-${{ matrix.arch }}-internal
provenance: false
build-args: |
PROFILE=release
- name: Logout from Docker Hub
if: always()
run: docker logout
================================================
FILE: .github/workflows/client_api_check.yml
================================================
name: ClientAPI Check
on:
push:
branches: [ main ]
pull_request:
types: [ opened, synchronize, reopened ]
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
AppFlowy-Cloud
- name: Install cargo-tree
run: cargo install cargo-tree
- name: Install wasm-pack
run: cargo install wasm-pack
- name: install prerequisites
run: |
sudo apt-get update
sudo apt-get install protobuf-compiler
- name: Build ClientAPI
working-directory: ./libs/client-api
run: cargo build --features "enable_brotli"
- name: Check ClientAPI Dependencies
working-directory: ./libs/client-api
run: bash ../../script/client_api_deps_check.sh
================================================
FILE: .github/workflows/commitlint.yml
================================================
name: Lint Commit Messages
on: [pull_request, push]
jobs:
commitlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: wagoid/commitlint-github-action@v4
================================================
FILE: .github/workflows/integration_test.yml
================================================
name: AppFlowy-Cloud Integrations
on:
push:
branches: [ main ]
paths:
- 'src/**'
- 'libs/**'
- 'services/**'
- 'admin_frontend/**'
pull_request:
branches: [ main ]
paths:
- 'src/**'
- 'libs/**'
- 'services/**'
- 'admin_frontend/**'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
LOCALHOST_URL: http://localhost
LOCALHOST_WS: ws://localhost/ws/v1
LOCALHOST_WS_V2: ws://localhost/ws/v2
APPFLOWY_REDIS_URI: redis://redis:6379
APPFLOWY_AI_REDIS_URL: redis://redis:6379
LOCALHOST_GOTRUE: http://localhost/gotrue
POSTGRES_PASSWORD: password
DATABASE_URL: postgres://postgres:password@localhost:5432/postgres
SQLX_OFFLINE: true
RUST_TOOLCHAIN: "1.86.0"
APPFLOWY_AI_VERSION: "0.9.38-amd64"
jobs:
setup:
name: Setup Environment and Build Images
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install prerequisites
run: |
sudo apt-get update
sudo apt-get install protobuf-compiler
sudo update-ca-certificates
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host
- name: Build Docker Images
run: |
export DOCKER_DEFAULT_PLATFORM=linux/amd64
cp deploy.env .env
docker compose build \
--parallel \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--build-arg PROFILE=debug \
appflowy_cloud appflowy_worker admin_frontend
- name: Save Docker Images
run: |
docker save appflowyinc/appflowy_cloud:latest | gzip > appflowy_cloud.tar.gz
docker save appflowyinc/appflowy_worker:latest | gzip > appflowy_worker.tar.gz
docker save appflowyinc/admin_frontend:latest | gzip > admin_frontend.tar.gz
- name: Upload Docker Images as Artifacts
uses: actions/upload-artifact@v4
with:
name: docker-images
path: |
appflowy_cloud.tar.gz
appflowy_worker.tar.gz
admin_frontend.tar.gz
retention-days: 1
test:
name: Integration Tests
runs-on: ubuntu-latest
needs: setup
timeout-minutes: 60
strategy:
matrix:
include:
- test_service: "appflowy_cloud"
test_cmd: "--workspace --exclude appflowy-ai-client --features ai-test-enabled"
- test_service: "appflowy_cloud_new_sync"
test_cmd: "--features sync-v2 --test main collab"
- test_service: "appflowy_worker"
test_cmd: "-p appflowy-worker"
- test_service: "admin_frontend"
test_cmd: "-p admin_frontend"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
workspaces: "AppFlowy-Cloud"
- name: Download Docker Images
uses: actions/download-artifact@v4
with:
name: docker-images
- name: Load Docker Images
run: |
docker load < appflowy_cloud.tar.gz
docker load < appflowy_worker.tar.gz
docker load < admin_frontend.tar.gz
- name: Copy and rename deploy.env to .env
run: cp deploy.env .env
- name: Replace values in .env
run: |
# log level
sed -i 's|RUST_LOG=.*|RUST_LOG='appflowy_cloud=trace,appflowy_worker=trace,database=trace,indexer=trace'|' .env
sed -i 's|GOTRUE_SMTP_USER=.*|GOTRUE_SMTP_USER=${{ secrets.CI_GOTRUE_SMTP_USER }}|' .env
sed -i 's|GOTRUE_SMTP_PASS=.*|GOTRUE_SMTP_PASS=${{ secrets.CI_GOTRUE_SMTP_PASS }}|' .env
sed -i 's|GOTRUE_SMTP_ADMIN_EMAIL=.*|GOTRUE_SMTP_ADMIN_EMAIL=${{ secrets.CI_GOTRUE_SMTP_ADMIN_EMAIL }}|' .env
sed -i 's|GOTRUE_EXTERNAL_GOOGLE_ENABLED=.*|GOTRUE_EXTERNAL_GOOGLE_ENABLED=true|' .env
sed -i 's|GOTRUE_MAILER_AUTOCONFIRM=.*|GOTRUE_MAILER_AUTOCONFIRM=false|' .env
sed -i 's|API_EXTERNAL_URL=http://your-host/gotrue|API_EXTERNAL_URL=http://localhost/gotrue|' .env
sed -i 's|GOTRUE_RATE_LIMIT_EMAIL_SENT=100|GOTRUE_RATE_LIMIT_EMAIL_SENT=1000|' .env
sed -i 's|APPFLOWY_MAILER_SMTP_USERNAME=.*|APPFLOWY_MAILER_SMTP_USERNAME=${{ secrets.CI_GOTRUE_SMTP_USER }}|' .env
sed -i 's|APPFLOWY_MAILER_SMTP_PASSWORD=.*|APPFLOWY_MAILER_SMTP_PASSWORD=${{ secrets.CI_GOTRUE_SMTP_PASS }}|' .env
sed -i 's|AI_OPENAI_API_KEY=.*|AI_OPENAI_API_KEY=${{ secrets.CI_OPENAI_API_KEY }}|' .env
sed -i 's|AI_OPENAI_API_SUMMARY_MODEL=.*|AI_OPENAI_API_SUMMARY_MODEL="gpt-4o-mini"|' .env
sed -i 's|APPFLOWY_EMBEDDING_CHUNK_SIZE=.*|APPFLOWY_EMBEDDING_CHUNK_SIZE=500|' .env
sed -i 's|APPFLOWY_EMBEDDING_CHUNK_OVERLAP=.*|APPFLOWY_EMBEDDING_CHUNK_OVERLAP=50|' .env
sed -i 's|AI_ANTHROPIC_API_KEY=.*|AI_ANTHROPIC_API_KEY=${{ secrets.CI_AI_ANTHROPIC_API_KEY }}|' .env
sed -i 's|AI_APPFLOWY_HOST=.*|AI_APPFLOWY_HOST=http://localhost|' .env
sed -i 's|APPFLOWY_WEB_URL=.*|APPFLOWY_WEB_URL=http://localhost:3000|' .env
sed -i 's|.*APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=.*|APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=http://localhost/minio-api|' .env
shell: bash
- name: Update Nginx Configuration
# the wasm-pack headless tests will run on random ports, so we need to allow all origins
run: sed -i 's/http:\/\/127\.0\.0\.1:8000/http:\/\/127.0.0.1/g' nginx/nginx.conf
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Run Docker-Compose
run: |
export APPFLOWY_WORKER_VERSION=latest
export APPFLOWY_CLOUD_VERSION=latest
export APPFLOWY_ADMIN_FRONTEND_VERSION=latest
export APPFLOWY_AI_VERSION=${{ env.APPFLOWY_AI_VERSION }}
docker compose -f docker-compose-ci.yml up -d
docker ps -a
- name: Wait for services to be ready
run: |
echo "Waiting for services to be ready..."
timeout 300 bash -c 'until curl -f http://localhost/health 2>/dev/null; do sleep 5; done' || echo "Health check timeout - proceeding anyway"
- name: Install prerequisites
run: |
sudo apt-get update
sudo apt-get install -y protobuf-compiler
- name: Run Tests
run: |
echo "Running tests for ${{ matrix.test_service }} with flags: ${{ matrix.test_cmd }}"
RUST_LOG="info" DISABLE_CI_TEST_LOG="true" cargo test ${{ matrix.test_cmd }} -- --skip stress_test
- name: Server Logs
if: failure()
run: |
docker ps -a
docker compose -f docker-compose-ci.yml logs
- name: AI Logs
if: failure()
run: |
docker logs appflowy-cloud-ai-1
================================================
FILE: .github/workflows/push_latest_docker.yml
================================================
name: DockerHub Build and Push
#`DOCKER_HUB_USERNAME` is the username you use to log in to Docker Hub at https://hub.docker.com/. It's your Docker Hub
# account username.
#`DOCKER_HUB_ACCESS_TOKEN` is a security token that you should create in your Docker Hub account settings, specifically
# under "account settings / security." This token should be generated with read and write access permissions to Docker
# Hub repositories. It allows you to authenticate and interact with Docker Hub programmatically, such as pushing and pulling Docker images or making API requests.
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*' # Trigger for tags like v1.2.3
- '[0-9]+.[0-9]+.[0-9]+*' # Trigger for tags like 1.2.3 or 1.2.3-alpha
env:
CARGO_TERM_COLOR: always
LATEST_TAG: latest
jobs:
gotrue_image:
runs-on: ubuntu-22.04
steps:
- name: Check out the repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and Push GoTrue
run: |
export TAG=${GITHUB_REF#refs/*/}
docker buildx build --platform linux/amd64,linux/arm64 -t appflowyinc/gotrue:${TAG} -t appflowyinc/gotrue:latest -f docker/gotrue/Dockerfile --push docker/gotrue
appflowy_cloud_image:
runs-on: ${{ matrix.job.os }}
env:
IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_cloud
strategy:
fail-fast: false
matrix:
job:
- { os: "ubuntu-22.04", name: "amd64", docker_platform: "linux/amd64" }
- { os: "ubuntu-22.04-arm", name: "arm64v8", docker_platform: "linux/arm64" }
steps:
- name: Check out the repository
uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Get git tag
id: vars
run: |
T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF
echo "GIT_TAG=$T" >> $GITHUB_ENV
- name: Extract metadata
id: meta
uses: docker/metadata-action@v4
with:
images: registry.hub.docker.com/${{ env.IMAGE_NAME }}
- name: Build and push ${{ matrix.job.image_name }}:${{ env.GIT_TAG }}
uses: docker/build-push-action@v5
with:
platforms: ${{ matrix.job.docker_platform }}
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }}
${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}-${{ matrix.job.name }}
labels: ${{ steps.meta.outputs.labels }}
provenance: false
build-args: |
PROFILE=release
FEATURES=
- name: Logout from Docker Hub
if: always()
run: docker logout
appflowy_cloud_docker_manifest:
runs-on: ubuntu-22.04
needs: [ appflowy_cloud_image ]
strategy:
fail-fast: false
matrix:
job:
- { image_name: "appflowy_cloud" }
steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Get git tag
id: vars
run: |
T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF
echo "GIT_TAG=$T" >> $GITHUB_ENV
- name: Create and push manifest for ${{ matrix.job.image_name }}:version
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}
images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-arm64v8
push: true
- name: Create and push manifest for ${{ matrix.job.image_name }}:latest
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}
images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-arm64v8
push: true
- name: Logout from Docker Hub
if: always()
run: docker logout
admin_frontend_image:
runs-on: ${{ matrix.job.os }}
env:
IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/admin_frontend
strategy:
fail-fast: false
matrix:
job:
- { os: "ubuntu-22.04", name: "amd64", docker_platform: "linux/amd64" }
- { os: "ubuntu-22.04-arm", name: "arm64v8", docker_platform: "linux/arm64" }
steps:
- name: Check out the repository
uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Get git tag
id: vars
run: |
T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF
echo "GIT_TAG=$T" >> $GITHUB_ENV
- name: Extract metadata
id: meta
uses: docker/metadata-action@v4
with:
images: registry.hub.docker.com/${{ env.IMAGE_NAME }}
- name: Build and push ${{ matrix.job.image_name }}:${{ env.GIT_TAG }}
uses: docker/build-push-action@v5
with:
platforms: ${{ matrix.job.docker_platform }}
file: ./admin_frontend/Dockerfile
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }}
${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}-${{ matrix.job.name }}
labels: ${{ steps.meta.outputs.labels }}
provenance: false
build-args: |
PROFILE=release
- name: Logout from Docker Hub
if: always()
run: docker logout
admin_frontend_docker_manifest:
runs-on: ubuntu-22.04
needs: [ admin_frontend_image ]
strategy:
fail-fast: false
matrix:
job:
- { image_name: "admin_frontend" }
steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Get git tag
id: vars
run: |
T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF
echo "GIT_TAG=$T" >> $GITHUB_ENV
- name: Create and push manifest for ${{ matrix.job.image_name }}:version
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}
images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-arm64v8
push: true
- name: Create and push manifest for ${{ matrix.job.image_name }}:latest
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}
images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-arm64v8
push: true
- name: Logout from Docker Hub
if: always()
run: docker logout
appflowy_worker_image:
runs-on: ${{ matrix.job.os }}
env:
IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_worker
strategy:
fail-fast: false
matrix:
job:
- { os: "ubuntu-22.04", name: "amd64", docker_platform: "linux/amd64" }
- { os: "ubuntu-22.04-arm", name: "arm64v8", docker_platform: "linux/arm64" }
steps:
- name: Check out the repository
uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Get git tag
id: vars
run: |
T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF
echo "GIT_TAG=$T" >> $GITHUB_ENV
- name: Extract metadata
id: meta
uses: docker/metadata-action@v4
with:
images: registry.hub.docker.com/${{ env.IMAGE_NAME }}
- name: Build and push ${{ matrix.job.image_name }}:${{ env.GIT_TAG }}
uses: docker/build-push-action@v5
with:
platforms: ${{ matrix.job.docker_platform }}
file: ./services/appflowy-worker/Dockerfile
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }}
${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}-${{ matrix.job.name }}
labels: ${{ steps.meta.outputs.labels }}
provenance: false
- name: Logout from Docker Hub
if: always()
run: docker logout
appflowy_worker_manifest:
runs-on: ubuntu-22.04
needs: [ appflowy_worker_image ]
strategy:
fail-fast: false
matrix:
job:
- { image_name: "appflowy_worker" }
steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Get git tag
id: vars
run: |
T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF
echo "GIT_TAG=$T" >> $GITHUB_ENV
- name: Create and push manifest for ${{ matrix.job.image_name }}:version
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}
images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-arm64v8
push: true
- name: Create and push manifest for ${{ matrix.job.image_name }}:latest
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}
images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-arm64v8
push: true
- name: Logout from Docker Hub
if: always()
run: docker logout
================================================
FILE: .github/workflows/rustlint.yml
================================================
name: Lint
on:
push:
branches: [ main ]
pull_request:
types: [ opened, synchronize, reopened ]
branches: [ main ]
env:
SQLX_VERSION: 0.7.1
SQLX_FEATURES: "rustls,postgres"
SQLX_OFFLINE: true
RUST_TOOLCHAIN: "1.86.0"
jobs:
test:
name: fmt & clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
override: true
components: rustfmt, clippy
profile: minimal
- name: install prerequisites
run: |
sudo apt-get update
sudo apt-get install protobuf-compiler
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
AppFlowy-Cloud
key: ${{ runner.os }}-cargo-clippy-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-clippy-
- name: Copy and rename dev.env to .env
run: cp dev.env .env
- name: Code Gen
working-directory: ./script
run: ./code_gen.sh
- name: Rustfmt
run: |
cargo fmt --check
- name: Clippy
run: cargo clippy --all-targets --all-features --tests -- -D warnings
================================================
FILE: .github/workflows/stress_test.yml
================================================
name: AppFlowy-Cloud Stress Test
on: [ pull_request ]
concurrency:
group: stress-test-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
SQLX_OFFLINE: true
RUST_TOOLCHAIN: "1.86.0"
POSTGRES_HOST: localhost
REDIS_HOST: localhost
LOCALHOST_GOTRUE: http://localhost/gotrue
DATABASE_URL: postgres://postgres:password@localhost:5432/postgres
jobs:
test:
name: Collab Stress Tests
runs-on: self-hosted-appflowy3
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Copy and Rename dev.env to .env
run: cp dev.env .env
- name: Install Prerequisites
run: |
brew update
if ! brew list libpq &>/dev/null; then
echo "Installing libpq..."
brew install libpq
else
echo "libpq is already installed."
fi
if ! brew list sqlx-cli &>/dev/null; then
echo "Installing sqlx-cli..."
brew install sqlx-cli
else
echo "sqlx-cli is already installed."
fi
if ! brew list protobuf &>/dev/null; then
echo "Installing protobuf..."
brew install protobuf
else
echo "protobuf is already installed."
fi
- name: Replace Values in .env
run: |
sed -i '' 's|RUST_LOG=.*|RUST_LOG=debug|' .env
sed -i '' 's|API_EXTERNAL_URL=.*|API_EXTERNAL_URL=http://localhost:9999|' .env
sed -i '' 's|APPFLOWY_INDEXER_ENABLED=.*|APPFLOWY_INDEXER_ENABLED=false|' .env
sed -i '' 's|APPFLOWY_GOTRUE_BASE_URL=.*|APPFLOWY_GOTRUE_BASE_URL=http://localhost:9999|' .env
sed -i '' 's|GOTRUE_MAILER_AUTOCONFIRM=.*|GOTRUE_MAILER_AUTOCONFIRM=false|' .env
sed -i '' 's|APPFLOWY_DATABASE_URL=.*|APPFLOWY_DATABASE_URL=postgres://postgres:password@localhost:5432/postgres|' .env
cat .env
shell: bash
- name: Start Docker Compose Services
run: |
docker compose -f docker-compose-dev.yml down
docker compose -f docker-compose-dev.yml up -d
./script/code_gen.sh
cargo sqlx database create && cargo sqlx migrate run
- name: Run Server and Test
run: |
cargo run --package xtask -- --stress-test
================================================
FILE: .github/workflows/wasm_publish.yml
================================================
name: Manual NPM Package Publish
on:
workflow_dispatch:
inputs:
working_directory:
description: 'Working directory (e.g., libs/client-api-wasm)'
required: true
default: 'libs/client-api-wasm'
package_name:
description: 'Which package to publish'
required: true
default: '@appflowyinc/client-api-wasm'
type: choice
options:
- '@appflowyinc/client-api-wasm'
package_version:
description: 'Package version'
required: true
env:
NODE_VERSION: '20.12.0'
RUST_TOOLCHAIN: "1.86.0"
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ env.NODE_VERSION }}
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
AppFlowy-Cloud
- name: Install wasm-pack
run: cargo install wasm-pack
- name: Build with wasm-pack
run: wasm-pack build --release
working-directory: ${{ github.event.inputs.working_directory }}
- name: Update name
working-directory: ${{ github.event.inputs.working_directory }}/pkg
run: |
jq '.name = "${{ github.event.inputs.package_name }}"' package.json > package.json.tmp
mv package.json.tmp package.json
- name: Update version
working-directory: ${{ github.event.inputs.working_directory }}/pkg
run: |
npm version ${{ github.event.inputs.package_version }}
- name: Configure npm for wasm-pack
run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ${{ github.event.inputs.working_directory }}/pkg/.npmrc
- name: Publish package
run: |
npm config set access public
wasm-pack publish
working-directory: ${{ github.event.inputs.working_directory }}/pkg
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
================================================
FILE: .github/workflows/web_docker.yml
================================================
name: AppFlowy Web image build and push
on:
workflow_dispatch:
inputs:
version:
description: 'AppFlowy Web version'
required: true
env:
IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_web
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-24.04
platform: linux/amd64
- os: ubuntu-24.04-arm
platform: linux/arm64
steps:
- name: Prepare
run: |
PLATFORM=${{ matrix.platform }}
VERSION=${{ github.event.inputs.version }}
IMAGE_TAG=${VERSION#v}
echo "PLATFORM_PAIR=${PLATFORM//\//-}" >> $GITHUB_ENV
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
- name: Check out the repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
id: build
uses: docker/build-push-action@v6
with:
platforms: ${{ matrix.platform }}
tags: |
${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-${{ env.PLATFORM_PAIR }}
${{ env.IMAGE_NAME }}:latest-${{ env.PLATFORM_PAIR }}
build-args: VERSION=${{ github.event.inputs.version }}
context: docker/web
provenance: false
push: true
merge:
runs-on: ubuntu-24.04
needs:
- build
steps:
- name: Prepare
run: |
VERSION=${{ github.event.inputs.version }}
IMAGE_TAG=${VERSION#v}
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Create and push manifest
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
images: ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-linux-amd64,${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-linux-arm64
push: true
- name: Create and push manifest
uses: Noelware/docker-manifest-action@0.4.3
with:
inputs: ${{ env.IMAGE_NAME }}:latest
images: ${{ env.IMAGE_NAME }}:latest-linux-amd64,${{ env.IMAGE_NAME }}:latest-linux-arm64
push: true
================================================
FILE: .gitignore
================================================
# Generated by Cargo
# will have compiled files and executables
**/target/
# These are backup files generated by rustfmt
**/*.rs.bk
.idea/
**/temp/**
package-lock.json
yarn.lock
node_modules
**/libs/AppFlowy-Collab/
data/
.env
.logs
flake.nix
flake.lock
.envrc
.direnv/
.claude
**/.DS_Store
**/.env.*
docker-compose.override.yml
.serena
================================================
FILE: .sqlx/query-0389af6b225125d09c5a75b443561dba4d97b786d040e5b8d5a76de36716beb2.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid\n FROM af_collab\n WHERE workspace_id = $1\n AND partition_key = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": [
false
]
},
"hash": "0389af6b225125d09c5a75b443561dba4d97b786d040e5b8d5a76de36716beb2"
}
================================================
FILE: .sqlx/query-05e89f62ff993fa2e4b0002c0022bba9706359e402b07b15ccdeb67492625064.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT updated_at, blob\n FROM af_collab\n WHERE oid = $1 AND partition_key = $2 AND deleted_at IS NULL;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "updated_at",
"type_info": "Timestamptz"
},
{
"ordinal": 1,
"name": "blob",
"type_info": "Bytea"
}
],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": [
false,
false
]
},
"hash": "05e89f62ff993fa2e4b0002c0022bba9706359e402b07b15ccdeb67492625064"
}
================================================
FILE: .sqlx/query-06096ba1131e78d3da5df25a4b0a1193f11c9782abaf91faf263a116f90e51af.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_collab (oid, blob, len, partition_key, owner_uid, workspace_id, updated_at)\n SELECT * FROM UNNEST($1::uuid[], $2::bytea[], $3::int[], $4::int[], $5::bigint[], $6::uuid[], $7::timestamp with time zone[])\n ON CONFLICT (oid)\n DO UPDATE SET blob = excluded.blob, len = excluded.len, updated_at = excluded.updated_at where af_collab.workspace_id = excluded.workspace_id\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"UuidArray",
"ByteaArray",
"Int4Array",
"Int4Array",
"Int8Array",
"UuidArray",
"TimestamptzArray"
]
},
"nullable": []
},
"hash": "06096ba1131e78d3da5df25a4b0a1193f11c9782abaf91faf263a116f90e51af"
}
================================================
FILE: .sqlx/query-075b89cfe2572d28e7adfc29bbe52fef4afdd5013686f7294efd966739886f0d.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT email FROM af_user WHERE uid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "email",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": [
false
]
},
"hash": "075b89cfe2572d28e7adfc29bbe52fef4afdd5013686f7294efd966739886f0d"
}
================================================
FILE: .sqlx/query-0781735c56d22370302beec06863dccbbb9e664b212de93e5073508a82b91609.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_workspace\n SET default_published_view_id = $1\n WHERE workspace_id = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid"
]
},
"nullable": []
},
"hash": "0781735c56d22370302beec06863dccbbb9e664b212de93e5073508a82b91609"
}
================================================
FILE: .sqlx/query-081abcd7f80664e8acd205833b0f9ca43bc1ccc03d992e7b1c45c3e401a6007a.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n database_storage_id\n FROM public.af_workspace\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "database_storage_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "081abcd7f80664e8acd205833b0f9ca43bc1ccc03d992e7b1c45c3e401a6007a"
}
================================================
FILE: .sqlx/query-084655c4e26f78c9c0924ea39a099dc9c00ee73dc6ade2dcff27c03042ebe8c3.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_workspace_invite_code (workspace_id, invite_code, expires_at)\n VALUES ($1, $2, $3)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text",
"Timestamp"
]
},
"nullable": []
},
"hash": "084655c4e26f78c9c0924ea39a099dc9c00ee73dc6ade2dcff27c03042ebe8c3"
}
================================================
FILE: .sqlx/query-09cf032adce81ba99362b3df50ba104f4e1eb2d538350c65cf615ea13f1c37f0.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_template_view\n WHERE view_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "09cf032adce81ba99362b3df50ba104f4e1eb2d538350c65cf615ea13f1c37f0"
}
================================================
FILE: .sqlx/query-09ff850490eab213cfa0ad88ece9ce7baa39beabee19754fd993268d29552eb9.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_chat_messages (chat_id, author, content, meta_data)\n VALUES ($1, $2, $3, $4)\n RETURNING message_id, created_at\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "message_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Jsonb",
"Text",
"Jsonb"
]
},
"nullable": [
false,
false
]
},
"hash": "09ff850490eab213cfa0ad88ece9ce7baa39beabee19754fd993268d29552eb9"
}
================================================
FILE: .sqlx/query-0affbd65859d6299c6ba736797f970b86552b83d95316ec3f54f93501e00b522.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id\n FROM af_workspace\n WHERE owner_uid = (SELECT uid FROM public.af_user WHERE uuid = $1)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "0affbd65859d6299c6ba736797f970b86552b83d95316ec3f54f93501e00b522"
}
================================================
FILE: .sqlx/query-0d9c62acb33b96bb81536d1ad3121174403bcd40b777eb8d384fe8e81e1db3c4.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT invite_code\n FROM af_workspace_invite_code\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "invite_code",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "0d9c62acb33b96bb81536d1ad3121174403bcd40b777eb8d384fe8e81e1db3c4"
}
================================================
FILE: .sqlx/query-0eeb2af3c6974c7e6d1c20bb4b08965eae9b0a291c7cef6451208b7740b9804c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH last_mentioned AS (\n SELECT\n person_id,\n MAX(mentioned_at) AS last_mentioned_at\n FROM af_page_mention\n WHERE workspace_id = $1\n GROUP BY person_id\n )\n\n SELECT\n au.uuid,\n COALESCE(awmp.name, au.name) AS \"name!\",\n au.email,\n awm.role_id AS \"role!\",\n COALESCE(awmp.avatar_url, au.metadata ->> 'icon_url') AS \"avatar_url\",\n awmp.cover_image_url,\n awmp.custom_image_url,\n awmp.description,\n lm.last_mentioned_at\n FROM af_workspace_member awm\n JOIN af_user au ON awm.uid = au.uid\n LEFT JOIN af_workspace_member_profile awmp ON (awm.uid = awmp.uid AND awm.workspace_id = awmp.workspace_id)\n LEFT JOIN last_mentioned lm ON au.uuid = lm.person_id\n WHERE awm.workspace_id = $1\n ORDER BY lm.last_mentioned_at DESC NULLS LAST\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name!",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "role!",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "cover_image_url",
"type_info": "Text"
},
{
"ordinal": 6,
"name": "custom_image_url",
"type_info": "Text"
},
{
"ordinal": 7,
"name": "description",
"type_info": "Text"
},
{
"ordinal": 8,
"name": "last_mentioned_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
null,
false,
false,
null,
true,
true,
true,
null
]
},
"hash": "0eeb2af3c6974c7e6d1c20bb4b08965eae9b0a291c7cef6451208b7740b9804c"
}
================================================
FILE: .sqlx/query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id, namespace, is_original\n FROM af_workspace_namespace\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "namespace",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "is_original",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false
]
},
"hash": "12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8"
}
================================================
FILE: .sqlx/query-1545a42d784a1a5fa8e9ed6128814608b9230b64ce23dcd85de444a7aa01bf9e.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n au.uuid,\n COALESCE(awmp.name, au.name) AS \"name!\",\n au.email,\n awm.role_id AS \"role!\",\n COALESCE(awmp.avatar_url, au.metadata ->> 'icon_url') AS \"avatar_url\",\n awmp.cover_image_url,\n awmp.custom_image_url,\n awmp.description\n FROM af_workspace_member awm\n JOIN af_user au ON awm.uid = au.uid\n LEFT JOIN af_workspace_member_profile awmp ON (awm.uid = awmp.uid AND awm.workspace_id = awmp.workspace_id)\n WHERE awm.workspace_id = $1\n AND au.uuid = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name!",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "role!",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "cover_image_url",
"type_info": "Text"
},
{
"ordinal": 6,
"name": "custom_image_url",
"type_info": "Text"
},
{
"ordinal": 7,
"name": "description",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid",
"Uuid"
]
},
"nullable": [
false,
null,
false,
false,
null,
true,
true,
true
]
},
"hash": "1545a42d784a1a5fa8e9ed6128814608b9230b64ce23dcd85de444a7aa01bf9e"
}
================================================
FILE: .sqlx/query-15613595695e2e722c45712931ce0eb8d2a3deb1bb665d1f091f354a3ad96b92.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_published_collab\n WHERE workspace_id = $1\n AND publish_name = $2\n AND unpublished_at IS NULL\n )\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
null
]
},
"hash": "15613595695e2e722c45712931ce0eb8d2a3deb1bb665d1f091f354a3ad96b92"
}
================================================
FILE: .sqlx/query-16208887bc2f2ca6b5f3df8062a12b482908f9f113c0474eeae75f6784b5e0fc.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_published_view_reaction (comment_id, view_id, created_by, reaction_type)\n VALUES ($1, $2, (SELECT uid FROM af_user WHERE uuid = $3), $4)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Uuid",
"Text"
]
},
"nullable": []
},
"hash": "16208887bc2f2ca6b5f3df8062a12b482908f9f113c0474eeae75f6784b5e0fc"
}
================================================
FILE: .sqlx/query-18207c125d5f974894576ee1dcfe406b221e9119f570403ec7a41ae1359b3f6c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n workspace_id,\n inviter AS inviter_uid,\n (SELECT uid FROM public.af_user WHERE LOWER(email) = LOWER(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": "18207c125d5f974894576ee1dcfe406b221e9119f570403ec7a41ae1359b3f6c"
}
================================================
FILE: .sqlx/query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT af.uuid\n FROM af_published_collab apc\n JOIN af_user af ON af.uid = apc.published_by\n WHERE view_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8"
}
================================================
FILE: .sqlx/query-1b1ff4352abb6dad982279ee99c8dccb3621b55a838998c1b9803982ae10f622.json
================================================
{
"db_name": "PostgreSQL",
"query": " SELECT uid, uuid FROM af_user",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "uuid",
"type_info": "Uuid"
}
],
"parameters": {
"Left": []
},
"nullable": [
false,
false
]
},
"hash": "1b1ff4352abb6dad982279ee99c8dccb3621b55a838998c1b9803982ae10f622"
}
================================================
FILE: .sqlx/query-1bd79541a2b351b11ae94fe8a7aad408f9b563fd123099aa701a1e07ce797d2f.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n af_user.uuid\n FROM public.af_workspace_member\n JOIN public.af_user ON af_workspace_member.uid = af_user.uid\n WHERE af_workspace_member.workspace_id = $1\n AND role_id != $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": [
false
]
},
"hash": "1bd79541a2b351b11ae94fe8a7aad408f9b563fd123099aa701a1e07ce797d2f"
}
================================================
FILE: .sqlx/query-1c8f022ff5add11376dbbc17efd874dd31fd908c4f17be1bded18dbc689e3b36.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE public.af_workspace\n SET is_initialized = $2\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Bool"
]
},
"nullable": []
},
"hash": "1c8f022ff5add11376dbbc17efd874dd31fd908c4f17be1bded18dbc689e3b36"
}
================================================
FILE: .sqlx/query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_workspace\n SET settings = $1\n WHERE workspace_id = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Jsonb",
"Uuid"
]
},
"nullable": []
},
"hash": "1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047"
}
================================================
FILE: .sqlx/query-21195760ea7ed2dc4eda1dc2bd0eed9afcc63651ba6e67e7db675307e3b87821.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE public.af_workspace\n SET workspace_name = $1\n WHERE workspace_id = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Uuid"
]
},
"nullable": []
},
"hash": "21195760ea7ed2dc4eda1dc2bd0eed9afcc63651ba6e67e7db675307e3b87821"
}
================================================
FILE: .sqlx/query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT default_published_view_id\n FROM af_workspace\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "default_published_view_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
true
]
},
"hash": "2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6"
}
================================================
FILE: .sqlx/query-21f66ca39be3377f8c5e4b218123e266fe8e03260ecd1891c644820892dda2b2.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT * FROM af_collab_snapshot\n WHERE sid = $1 AND oid = $2 AND workspace_id = $3 AND deleted_at IS NULL;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "sid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "oid",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "blob",
"type_info": "Bytea"
},
{
"ordinal": 3,
"name": "len",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "encrypt",
"type_info": "Int4"
},
{
"ordinal": 5,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 7,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Int8",
"Text",
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
true,
true,
false,
false
]
},
"hash": "21f66ca39be3377f8c5e4b218123e266fe8e03260ecd1891c644820892dda2b2"
}
================================================
FILE: .sqlx/query-223e530f8605f6d00789344565666f57705151e3c2318519e877b22f8ffc871b.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n apc.view_id,\n apc.publish_name,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp,\n apc.comments_enabled,\n apc.duplicate_enabled\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n WHERE workspace_id = $1\n AND unpublished_at IS NULL\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "view_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "publish_name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "publisher_email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "publish_timestamp",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "comments_enabled",
"type_info": "Bool"
},
{
"ordinal": 5,
"name": "duplicate_enabled",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
false
]
},
"hash": "223e530f8605f6d00789344565666f57705151e3c2318519e877b22f8ffc871b"
}
================================================
FILE: .sqlx/query-229a99b7a3a2f136babd5499c2a1047fe840903acf0d06e57fb78ca9b03e7008.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid, snapshot, snapshot_version, created_at\n FROM af_snapshot_meta\n WHERE oid = $1 AND partition_key = $2\n ORDER BY created_at DESC\n LIMIT 1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "snapshot",
"type_info": "Bytea"
},
{
"ordinal": 2,
"name": "snapshot_version",
"type_info": "Int4"
},
{
"ordinal": 3,
"name": "created_at",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Text",
"Int4"
]
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "229a99b7a3a2f136babd5499c2a1047fe840903acf0d06e57fb78ca9b03e7008"
}
================================================
FILE: .sqlx/query-2394226650959b34ae80b1948b7a111720b3ea5da48934d8d7e395ecc84e6985.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_template_view SET\n updated_at = NOW(),\n name = $2,\n description = $3,\n about = $4,\n view_url = $5,\n creator_id = $6,\n is_new_template = $7,\n is_featured = $8\n WHERE view_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text",
"Text",
"Text",
"Text",
"Uuid",
"Bool",
"Bool"
]
},
"nullable": []
},
"hash": "2394226650959b34ae80b1948b7a111720b3ea5da48934d8d7e395ecc84e6985"
}
================================================
FILE: .sqlx/query-24c5fb37a4391d590e83d2710e9a2ee7f4d06efcdd6034df1f67bb0d9db45716.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT name, email FROM af_user WHERE uuid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "email",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false
]
},
"hash": "24c5fb37a4391d590e83d2710e9a2ee7f4d06efcdd6034df1f67bb0d9db45716"
}
================================================
FILE: .sqlx/query-2593b975fcf2dcf0129a1390fd8e2888d440e07c904d7eb3ca14957be8bc6069.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT * FROM public.af_permissions WHERE id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "access_level",
"type_info": "Int4"
},
{
"ordinal": 3,
"name": "description",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false,
false,
false,
true
]
},
"hash": "2593b975fcf2dcf0129a1390fd8e2888d440e07c904d7eb3ca14957be8bc6069"
}
================================================
FILE: .sqlx/query-2902fd3a9faa9481754d38b29abb543640c0b5564dca8f0141c7de2b8aab9551.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid,workspace_id,owner_uid,deleted_at,created_at,updated_at\n FROM af_collab\n WHERE oid = $1 AND partition_key = $2 AND deleted_at IS NULL;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "owner_uid",
"type_info": "Int8"
},
{
"ordinal": 3,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "updated_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": [
false,
false,
false,
true,
true,
false
]
},
"hash": "2902fd3a9faa9481754d38b29abb543640c0b5564dca8f0141c7de2b8aab9551"
}
================================================
FILE: .sqlx/query-291f0916b7868f3598b50f659689b9c77d34112c2a2fff9fc04775da9f97e46d.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_workspace\n WHERE workspace_id = $1\n ) AS user_exists;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "user_exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "291f0916b7868f3598b50f659689b9c77d34112c2a2fff9fc04775da9f97e46d"
}
================================================
FILE: .sqlx/query-29279a0a97beb08aea84d588374c7534c28bd9c4da24b1ee20245109f5c33880.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_workspace_member\n SET updated_at = $3\n WHERE uid = $1\n AND workspace_id = $2;\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Int8",
"Uuid",
"Timestamptz"
]
},
"nullable": []
},
"hash": "29279a0a97beb08aea84d588374c7534c28bd9c4da24b1ee20245109f5c33880"
}
================================================
FILE: .sqlx/query-2b0754f55889a20c294d2a77ba8d3fa34c8174856abfdede34797851183a177a.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS (\n SELECT 1\n FROM public.af_workspace\n WHERE\n workspace_id = $1\n AND owner_uid = (\n SELECT uid FROM public.af_user WHERE email = $2\n )\n ) AS \"is_owner\";\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "is_owner",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
null
]
},
"hash": "2b0754f55889a20c294d2a77ba8d3fa34c8174856abfdede34797851183a177a"
}
================================================
FILE: .sqlx/query-2c0a776a787bc748857873b682d2fa3c549ffeaf767aa8ee05b09b3857505ded.json
================================================
{
"db_name": "PostgreSQL",
"query": "\nSELECT\n w.settings['disable_search_indexing']::boolean as disable_search_indexing,\n CASE\n WHEN w.settings['disable_search_indexing']::boolean THEN\n FALSE\n ELSE\n EXISTS (SELECT 1 FROM af_collab_embeddings m WHERE m.oid = $2::uuid)\n END as has_index\nFROM af_workspace w\nWHERE w.workspace_id = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "disable_search_indexing",
"type_info": "Bool"
},
{
"ordinal": 1,
"name": "has_index",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Uuid"
]
},
"nullable": [
null,
null
]
},
"hash": "2c0a776a787bc748857873b682d2fa3c549ffeaf767aa8ee05b09b3857505ded"
}
================================================
FILE: .sqlx/query-2c496e29533dd27117fbb688ba2324f04d7cc306181fcf3f82079d5639f632c4.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_chat\n SET deleted_at = now()\n WHERE chat_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "2c496e29533dd27117fbb688ba2324f04d7cc306181fcf3f82079d5639f632c4"
}
================================================
FILE: .sqlx/query-2d6d00669ea7d598d69d848d143f33e8c144d35b3d4c5293f98344b2c62fe6c8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT namespace\n FROM af_workspace_namespace\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND is_original = FALSE\n ORDER BY created_at DESC\n LIMIT 1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "namespace",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false
]
},
"hash": "2d6d00669ea7d598d69d848d143f33e8c144d35b3d4c5293f98344b2c62fe6c8"
}
================================================
FILE: .sqlx/query-2dda0bc4d9486a49c0af00d8ee4408c970a2ba3533217c130281e7db5a4e3d6b.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id, metadata\n FROM af_published_collab\n WHERE view_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "metadata",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false
]
},
"hash": "2dda0bc4d9486a49c0af00d8ee4408c970a2ba3533217c130281e7db5a4e3d6b"
}
================================================
FILE: .sqlx/query-30a592588fe20bb1444178b7ee9e73e37d1d55572f936988528178bfa10158e5.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS(\n SELECT true\n FROM af_published_collab\n WHERE view_id = $1\n AND published_by = (SELECT uid FROM af_user WHERE uuid = $2)\n UNION ALL\n SELECT true\n FROM af_published_view_comment\n WHERE view_id = $1\n AND comment_id = $3\n AND created_by = (SELECT uid FROM af_user WHERE uuid = $2)\n ) AS \"exists\";\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "30a592588fe20bb1444178b7ee9e73e37d1d55572f936988528178bfa10158e5"
}
================================================
FILE: .sqlx/query-315840e0657ea0b8d162635b4cc21ce84a09fd7ea14ea07980869a80ee06900c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_page_mention (workspace_id, view_id, view_name, person_id, block_id, mentioned_by, mentioned_at, require_notification)\n VALUES ($1, $2, $3, $4, $5, $6, current_timestamp, $7)\n ON CONFLICT (workspace_id, view_id, person_id) DO UPDATE\n SET mentioned_by = EXCLUDED.mentioned_by,\n mentioned_at = EXCLUDED.mentioned_at,\n block_id = EXCLUDED.block_id,\n require_notification = EXCLUDED.require_notification,\n notified = false\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Text",
"Uuid",
"Text",
"Int8",
"Bool"
]
},
"nullable": []
},
"hash": "315840e0657ea0b8d162635b4cc21ce84a09fd7ea14ea07980869a80ee06900c"
}
================================================
FILE: .sqlx/query-32fd3dcd1a3e02c32ddedb232b6af2e7f9ea160354528f3299cca62367af10f7.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_workspace_member (workspace_id, uid, role_id)\n VALUES ($1, $2, $3)\n ON CONFLICT (workspace_id, uid) DO NOTHING\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Int8",
"Int4"
]
},
"nullable": []
},
"hash": "32fd3dcd1a3e02c32ddedb232b6af2e7f9ea160354528f3299cca62367af10f7"
}
================================================
FILE: .sqlx/query-340b8cef5a7676541b86505cdf103fcb5b54c40a9d6e599dc1d9dc0a95e1e862.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH creator_number_of_templates AS (\n SELECT\n creator_id,\n COUNT(1)::int AS number_of_templates\n FROM af_template_view\n WHERE name ILIKE $1\n GROUP BY creator_id\n )\n\n SELECT\n creator.creator_id AS \"id!\",\n name AS \"name!\",\n avatar_url AS \"avatar_url!\",\n ARRAY_AGG((link_type, url)) FILTER (WHERE link_type IS NOT NULL) AS \"account_links: Vec<AccountLinkColumn>\",\n COALESCE(number_of_templates, 0) AS \"number_of_templates!\"\n FROM af_template_creator creator\n LEFT OUTER JOIN af_template_creator_account_link account_link\n USING (creator_id)\n LEFT OUTER JOIN creator_number_of_templates\n USING (creator_id)\n WHERE name ILIKE $1\n GROUP BY (creator.creator_id, name, avatar_url, number_of_templates)\n ORDER BY created_at ASC\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id!",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name!",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "avatar_url!",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "account_links: Vec<AccountLinkColumn>",
"type_info": "RecordArray"
},
{
"ordinal": 4,
"name": "number_of_templates!",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false,
false,
null,
null
]
},
"hash": "340b8cef5a7676541b86505cdf103fcb5b54c40a9d6e599dc1d9dc0a95e1e862"
}
================================================
FILE: .sqlx/query-354166a6fa147dc6e17bfc14cb68d3a72a2e7c3aa2d115686deb12086786e034.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT role_id FROM af_workspace_member\n WHERE workspace_id = $1 AND uid = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "role_id",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8"
]
},
"nullable": [
false
]
},
"hash": "354166a6fa147dc6e17bfc14cb68d3a72a2e7c3aa2d115686deb12086786e034"
}
================================================
FILE: .sqlx/query-35622d4ebede28dd28b613edcf3970ad258286f176ce86e88bd662a602e4ad58.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_quick_note (workspace_id, uid, data) VALUES ($1, $2, $3)\n RETURNING quick_note_id AS id, data, created_at AS \"created_at!\", updated_at AS \"last_updated_at!\"\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "data",
"type_info": "Jsonb"
},
{
"ordinal": 2,
"name": "created_at!",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "last_updated_at!",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8",
"Jsonb"
]
},
"nullable": [
false,
false,
true,
true
]
},
"hash": "35622d4ebede28dd28b613edcf3970ad258286f176ce86e88bd662a602e4ad58"
}
================================================
FILE: .sqlx/query-36733444fc8fac851fb540105ea6c9dca785455ae44ae518b98d8b57082e11d8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS(\n SELECT 1\n FROM public.af_workspace_member\n JOIN af_roles ON af_workspace_member.role_id = af_roles.id\n WHERE workspace_id = $1\n AND af_workspace_member.uid = (\n SELECT uid FROM public.af_user WHERE uuid = $2\n )\n AND af_roles.name = 'Owner'\n ) AS \"exists\";\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "36733444fc8fac851fb540105ea6c9dca785455ae44ae518b98d8b57082e11d8"
}
================================================
FILE: .sqlx/query-3865d921d76ac0d0eb16065738cddf82cb71945504116b0a04da759209b9c250.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid, indexed_at\n FROM af_collab\n WHERE oid = ANY (SELECT UNNEST($1::uuid[]))\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "indexed_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"UuidArray"
]
},
"nullable": [
false,
true
]
},
"hash": "3865d921d76ac0d0eb16065738cddf82cb71945504116b0a04da759209b9c250"
}
================================================
FILE: .sqlx/query-3b2daf263b4022e69c819edb55d412da8ad3fe4377155d8485fbaf186069f389.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n uuid,\n email,\n name,\n metadata ->> 'icon_url' AS avatar_url\n FROM af_user\n WHERE uid = $1;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "avatar_url",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": [
false,
false,
false,
null
]
},
"hash": "3b2daf263b4022e69c819edb55d412da8ad3fe4377155d8485fbaf186069f389"
}
================================================
FILE: .sqlx/query-3bb5b82d46c55bbfd51319310a3cd065c4b796462a1ddf3c17617ee65ce9961a.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_chat (chat_id, name, workspace_id, rag_ids)\n VALUES ($1, $2, $3, $4)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text",
"Uuid",
"Jsonb"
]
},
"nullable": []
},
"hash": "3bb5b82d46c55bbfd51319310a3cd065c4b796462a1ddf3c17617ee65ce9961a"
}
================================================
FILE: .sqlx/query-3c2c94b9ac0a329b92847d7176a7435f894c5ef3b3b11e3e2ae03a8ec454a6d8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH af_user_row AS (\n SELECT * FROM af_user WHERE uuid = $1\n )\n SELECT\n af_user_row.uid,\n af_user_row.uuid,\n af_user_row.email,\n af_user_row.password,\n af_user_row.name,\n af_user_row.metadata,\n af_user_row.encryption_sign,\n af_user_row.deleted_at,\n af_user_row.updated_at,\n af_user_row.created_at,\n (\n SELECT af_workspace_member.workspace_id\n FROM af_workspace_member\n JOIN af_workspace\n ON af_workspace_member.workspace_id = af_workspace.workspace_id\n WHERE af_workspace_member.uid = af_user_row.uid\n AND COALESCE(af_workspace.is_initialized, true) = true\n ORDER BY af_workspace_member.updated_at DESC\n LIMIT 1\n ) AS latest_workspace_id\n FROM af_user_row\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "uuid",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "password",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "metadata",
"type_info": "Jsonb"
},
{
"ordinal": 6,
"name": "encryption_sign",
"type_info": "Text"
},
{
"ordinal": 7,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 8,
"name": "updated_at",
"type_info": "Timestamptz"
},
{
"ordinal": 9,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 10,
"name": "latest_workspace_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
true,
true,
true,
true,
null
]
},
"hash": "3c2c94b9ac0a329b92847d7176a7435f894c5ef3b3b11e3e2ae03a8ec454a6d8"
}
================================================
FILE: .sqlx/query-3ca587826f0598e7786c765dcb2fcd6ae08d8aa404f02920307547c769a3f91b.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH\n updated_creator AS (\n UPDATE af_template_creator\n SET name = $2, avatar_url = $3, updated_at = NOW()\n WHERE creator_id = $1\n RETURNING creator_id, name, avatar_url\n ),\n account_links AS (\n INSERT INTO af_template_creator_account_link (creator_id, link_type, url)\n SELECT updated_creator.creator_id as creator_id, link_type, url FROM\n UNNEST($4::text[], $5::text[]) AS t(link_type, url)\n CROSS JOIN updated_creator\n RETURNING\n creator_id,\n link_type,\n url\n ),\n creator_number_of_templates AS (\n SELECT\n creator_id,\n COUNT(1)::int AS number_of_templates\n FROM af_template_view\n WHERE creator_id = $1\n GROUP BY creator_id\n )\n SELECT\n updated_creator.creator_id AS id,\n name,\n avatar_url,\n ARRAY_AGG((link_type, url)) FILTER (WHERE link_type IS NOT NULL) AS \"account_links: Vec<AccountLinkColumn>\",\n COALESCE(number_of_templates, 0) AS \"number_of_templates!\"\n FROM updated_creator\n LEFT OUTER JOIN account_links\n USING (creator_id)\n LEFT OUTER JOIN creator_number_of_templates\n USING (creator_id)\n GROUP BY (id, name, avatar_url, number_of_templates)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "account_links: Vec<AccountLinkColumn>",
"type_info": "RecordArray"
},
{
"ordinal": 4,
"name": "number_of_templates!",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid",
"Text",
"Text",
"TextArray",
"TextArray"
]
},
"nullable": [
false,
false,
false,
null,
null
]
},
"hash": "3ca587826f0598e7786c765dcb2fcd6ae08d8aa404f02920307547c769a3f91b"
}
================================================
FILE: .sqlx/query-3cfb0a6d9a798f29422bc4bf4a52d3c86c3aae98c173b83c60eb57504a3d2c7c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_snapshot_meta (oid, workspace_id, snapshot, snapshot_version, partition_key, created_at)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT DO NOTHING\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Uuid",
"Bytea",
"Int4",
"Int4",
"Int8"
]
},
"nullable": []
},
"hash": "3cfb0a6d9a798f29422bc4bf4a52d3c86c3aae98c173b83c60eb57504a3d2c7c"
}
================================================
FILE: .sqlx/query-3d3309a4ae7a88b3f7c9608dd78a1c1dc9b237a37e29722bcd2910bd23f9d873.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_related_template_view\n WHERE view_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "3d3309a4ae7a88b3f7c9608dd78a1c1dc9b237a37e29722bcd2910bd23f9d873"
}
================================================
FILE: .sqlx/query-3fdd28c263edf5c91ab8b770e6106d4890ec4bae2ff3c20f80c40cb4042d9e03.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT SUM(len) FROM af_collab WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "sum",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "3fdd28c263edf5c91ab8b770e6106d4890ec4bae2ff3c20f80c40cb4042d9e03"
}
================================================
FILE: .sqlx/query-40db0a61665bdb9f7e9d1ce2a6c0eb05703e36e83c87802a72630388588de8cd.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id, COUNT(*) AS member_count\n FROM af_workspace_member\n WHERE workspace_id = ANY($1) AND role_id != $2\n GROUP BY workspace_id\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "member_count",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"UuidArray",
"Int4"
]
},
"nullable": [
false,
null
]
},
"hash": "40db0a61665bdb9f7e9d1ce2a6c0eb05703e36e83c87802a72630388588de8cd"
}
================================================
FILE: .sqlx/query-4123fa8796e8b56225155f79c2ee4c4dacda5ef51e858ce7dcb9877c7d55bd53.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH invited_workspace_member AS (\n SELECT\n invite_code,\n COUNT(*) AS member_count,\n COUNT(CASE WHEN uid = $2 THEN uid END) > 0 AS is_member\n FROM af_workspace_invite_code\n JOIN af_workspace_member USING (workspace_id)\n WHERE invite_code = $1\n AND (expires_at IS NULL OR expires_at > NOW())\n GROUP BY invite_code\n )\n SELECT\n workspace_id,\n owner_profile.name AS \"owner_name!\",\n owner_profile.metadata ->> 'icon_url' AS owner_avatar,\n af_workspace.workspace_name AS \"workspace_name!\",\n af_workspace.icon AS workspace_icon_url,\n invited_workspace_member.member_count AS \"member_count!\",\n invited_workspace_member.is_member AS \"is_member!\"\n FROM af_workspace_invite_code\n JOIN af_workspace USING (workspace_id)\n JOIN af_user AS owner_profile ON af_workspace.owner_uid = owner_profile.uid\n JOIN invited_workspace_member USING (invite_code)\n WHERE invite_code = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "owner_name!",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "owner_avatar",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "workspace_name!",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "workspace_icon_url",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "member_count!",
"type_info": "Int8"
},
{
"ordinal": 6,
"name": "is_member!",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Text",
"Int8"
]
},
"nullable": [
false,
false,
null,
true,
false,
null,
null
]
},
"hash": "4123fa8796e8b56225155f79c2ee4c4dacda5ef51e858ce7dcb9877c7d55bd53"
}
================================================
FILE: .sqlx/query-425b0b5ffbe3f1b80aedf15b8df1640c879d8d45883eee8b1e2fbd64eaf283d6.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_template_category\n WHERE category_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "425b0b5ffbe3f1b80aedf15b8df1640c879d8d45883eee8b1e2fbd64eaf283d6"
}
================================================
FILE: .sqlx/query-441316f35ca8c24bf78167f9fec48e28c05969bbbbe3d0e3d9e1569a375de476.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT * FROM af_blob_metadata\n WHERE workspace_id = $1 AND file_id = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "file_id",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "file_type",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "file_size",
"type_info": "Int8"
},
{
"ordinal": 4,
"name": "modified_at",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "status",
"type_info": "Int2"
},
{
"ordinal": 6,
"name": "source",
"type_info": "Int2"
},
{
"ordinal": 7,
"name": "source_metadata",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true
]
},
"hash": "441316f35ca8c24bf78167f9fec48e28c05969bbbbe3d0e3d9e1569a375de476"
}
================================================
FILE: .sqlx/query-4476f271f4ea8c83428b4178c43ee2894e380a7c3ae3cbc782f438fabc45de8b.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_access_request\n WHERE request_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "4476f271f4ea8c83428b4178c43ee2894e380a7c3ae3cbc782f438fabc45de8b"
}
================================================
FILE: .sqlx/query-44e4be501db0375fbd8ad8ed923bef887e361fe466ab46bdd6663f6cf97413a8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH new_workspace AS (\n INSERT INTO public.af_workspace (owner_uid, workspace_name, icon, is_initialized)\n VALUES ((SELECT uid FROM public.af_user WHERE uuid = $1), $2, $3, $4)\n RETURNING *\n )\n SELECT\n workspace_id,\n database_storage_id,\n owner_uid,\n owner_profile.name AS owner_name,\n owner_profile.email AS owner_email,\n new_workspace.created_at,\n workspace_type,\n new_workspace.deleted_at,\n workspace_name,\n icon\n FROM new_workspace\n JOIN public.af_user AS owner_profile ON new_workspace.owner_uid = owner_profile.uid;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "database_storage_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "owner_uid",
"type_info": "Int8"
},
{
"ordinal": 3,
"name": "owner_name",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "owner_email",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_type",
"type_info": "Int4"
},
{
"ordinal": 7,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 8,
"name": "workspace_name",
"type_info": "Text"
},
{
"ordinal": 9,
"name": "icon",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid",
"Text",
"Text",
"Bool"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
false,
true,
true,
false
]
},
"hash": "44e4be501db0375fbd8ad8ed923bef887e361fe466ab46bdd6663f6cf97413a8"
}
================================================
FILE: .sqlx/query-4f5951e61713d04963524b84648c9ff8c7be05f0089f6fd26fc6e0e0afeae579.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT reply_message_id\n FROM af_chat_messages\n WHERE message_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "reply_message_id",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": [
true
]
},
"hash": "4f5951e61713d04963524b84648c9ff8c7be05f0089f6fd26fc6e0e0afeae579"
}
================================================
FILE: .sqlx/query-4fc0611c846f86be652d42eb8ae21a5da0353fe810856aaabe91d7963329d098.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n ac.oid as object_id,\n ace.partition_key,\n ac.indexed_at,\n ace.updated_at\n FROM af_collab_embeddings ac\n JOIN af_collab ace ON ac.oid = ace.oid\n WHERE ac.oid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "object_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "partition_key",
"type_info": "Int4"
},
{
"ordinal": 2,
"name": "indexed_at",
"type_info": "Timestamp"
},
{
"ordinal": 3,
"name": "updated_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "4fc0611c846f86be652d42eb8ae21a5da0353fe810856aaabe91d7963329d098"
}
================================================
FILE: .sqlx/query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT metadata\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND unpublished_at IS NULL\n AND publish_name = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "metadata",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Text",
"Text"
]
},
"nullable": [
false
]
},
"hash": "51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395"
}
================================================
FILE: .sqlx/query-523087b0101a35abfc70a561272acec7a357491a86901f7927b8242173b5c8c8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH\n new_creator AS (\n INSERT INTO af_template_creator (name, avatar_url)\n VALUES ($1, $2)\n RETURNING creator_id, name, avatar_url\n ),\n account_links AS (\n INSERT INTO af_template_creator_account_link (creator_id, link_type, url)\n SELECT new_creator.creator_id as creator_id, link_type, url FROM\n UNNEST($3::text[], $4::text[]) AS t(link_type, url)\n CROSS JOIN new_creator\n RETURNING\n creator_id,\n link_type,\n url\n )\n SELECT\n new_creator.creator_id AS id,\n name,\n avatar_url,\n ARRAY_AGG((link_type, url)) FILTER (WHERE link_type IS NOT NULL) AS \"account_links: Vec<AccountLinkColumn>\",\n 0 AS \"number_of_templates!\"\n FROM new_creator\n LEFT OUTER JOIN account_links\n USING (creator_id)\n GROUP BY (id, name, avatar_url)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "account_links: Vec<AccountLinkColumn>",
"type_info": "RecordArray"
},
{
"ordinal": 4,
"name": "number_of_templates!",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Text",
"Text",
"TextArray",
"TextArray"
]
},
"nullable": [
false,
false,
false,
null,
null
]
},
"hash": "523087b0101a35abfc70a561272acec7a357491a86901f7927b8242173b5c8c8"
}
================================================
FILE: .sqlx/query-52b936c6adf43ec5c7e777ad9379dec30b750fefad73684e552481f709006d04.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO public.af_workspace_invitation (\n id,\n workspace_id,\n inviter,\n invitee_email,\n role_id\n )\n VALUES (\n $1,\n $2,\n (SELECT uid FROM public.af_user WHERE uuid = $3),\n $4,\n $5\n )\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Uuid",
"Text",
"Int4"
]
},
"nullable": []
},
"hash": "52b936c6adf43ec5c7e777ad9379dec30b750fefad73684e552481f709006d04"
}
================================================
FILE: .sqlx/query-53d87db17bb9c1d002adc82ba9f2c07ff33ea987a1157d7f6fd2344091b98deb.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n avr.comment_id,\n avr.reaction_type,\n ARRAY_AGG((au.uuid, au.name, au.email, au.metadata ->> 'icon_url')) AS \"react_users!: Vec<AFWebUserWithEmailColumn>\"\n FROM af_published_view_reaction avr\n INNER JOIN af_user au ON avr.created_by = au.uid\n WHERE view_id = $1\n GROUP BY comment_id, reaction_type\n ORDER BY MIN(avr.created_at)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "comment_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "reaction_type",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "react_users!: Vec<AFWebUserWithEmailColumn>",
"type_info": "RecordArray"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
null
]
},
"hash": "53d87db17bb9c1d002adc82ba9f2c07ff33ea987a1157d7f6fd2344091b98deb"
}
================================================
FILE: .sqlx/query-594af4041e0778476a699536316007f0a264f7d3db9de6326ef8082a2a898995.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT id, invitee_email\n FROM public.af_workspace_invitation\n WHERE workspace_id = $1\n AND status = 0\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "invitee_email",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false
]
},
"hash": "594af4041e0778476a699536316007f0a264f7d3db9de6326ef8082a2a898995"
}
================================================
FILE: .sqlx/query-598e731078fc6417039cc16772eb5bc6c74d24c1a8018a981d2175a483dc699c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_access_request (\n workspace_id,\n view_id,\n uid,\n status\n )\n VALUES ($1, $2, $3, $4)\n RETURNING request_id\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "request_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Int8",
"Int4"
]
},
"nullable": [
false
]
},
"hash": "598e731078fc6417039cc16772eb5bc6c74d24c1a8018a981d2175a483dc699c"
}
================================================
FILE: .sqlx/query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id, view_id\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND publish_name = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "view_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Text",
"Text"
]
},
"nullable": [
false,
false
]
},
"hash": "59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f"
}
================================================
FILE: .sqlx/query-5c2d58bfdedbb1be71337a97d5ed5a2921f83dd549507b2834a4d2582d2c361b.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_collab_embeddings e\n USING af_collab c\n WHERE e.oid = c.oid\n AND c.workspace_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "5c2d58bfdedbb1be71337a97d5ed5a2921f83dd549507b2834a4d2582d2c361b"
}
================================================
FILE: .sqlx/query-5cce5f82c0fb9237f724478e2167243bc772c092910f07b8226431a6dd70a7da.json
================================================
{
"db_name": "PostgreSQL",
"query": "DELETE FROM af_quick_note WHERE quick_note_id = $1",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "5cce5f82c0fb9237f724478e2167243bc772c092910f07b8226431a6dd70a7da"
}
================================================
FILE: .sqlx/query-5d408d36790ade4da1ceeb68b4a183aa7d9abc27b0ec42c2a3c5af26ad80f128.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT uid FROM af_user WHERE uuid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "5d408d36790ade4da1ceeb68b4a183aa7d9abc27b0ec42c2a3c5af26ad80f128"
}
================================================
FILE: .sqlx/query-5d51aef40f7e0716338b406263240dbc5e4a64cec6f1be10a3676e4f86ce4557.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_template_creator_account_link\n WHERE creator_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "5d51aef40f7e0716338b406263240dbc5e4a64cec6f1be10a3676e4f86ce4557"
}
================================================
FILE: .sqlx/query-5e0d58f612425e1cf36dfc7f56691cfb8f6def1a3d29645922cb437d11ce62ef.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT COUNT(*)\n FROM public.af_chat_messages\n WHERE chat_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "count",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "5e0d58f612425e1cf36dfc7f56691cfb8f6def1a3d29645922cb437d11ce62ef"
}
================================================
FILE: .sqlx/query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_workspace_namespace\n WHERE namespace = $1\n )\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
null
]
},
"hash": "620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd"
}
================================================
FILE: .sqlx/query-62ed61bcf92fc0c3756f57d0fe05cdd12e70072f5646fe48790ad189a6e96b12.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH template_with_creator_account_link AS (\n SELECT\n template.view_id,\n template.creator_id,\n COALESCE(\n ARRAY_AGG((link_type, url)::account_link_type) FILTER (WHERE link_type IS NOT NULL),\n '{}'\n ) AS account_links\n FROM af_template_view template\n JOIN af_published_collab\n USING (view_id)\n JOIN af_template_creator creator\n USING (creator_id)\n LEFT OUTER JOIN af_template_creator_account_link account_link\n USING (creator_id)\n WHERE view_id = $1\n GROUP BY (view_id, template.creator_id)\n ),\n related_template_with_category AS (\n SELECT\n template.related_view_id,\n ARRAY_AGG(\n (\n template_category.category_id,\n template_category.name,\n template_category.icon,\n template_category.bg_color\n )::template_category_minimal_type\n ) AS categories\n FROM af_related_template_view template\n JOIN af_template_view_template_category template_template_category\n ON template.related_view_id = template_template_category.view_id\n JOIN af_template_category template_category\n USING (category_id)\n WHERE template.view_id = $1\n GROUP BY template.related_view_id\n ),\n template_with_related_template AS (\n SELECT\n template.view_id,\n ARRAY_AGG(\n (\n template.related_view_id,\n related_template.created_at,\n related_template.updated_at,\n related_template.name,\n related_template.description,\n related_template.view_url,\n (\n creator.creator_id,\n creator.name,\n creator.avatar_url\n )::template_creator_minimal_type,\n related_template_with_category.categories,\n related_template.is_new_template,\n related_template.is_featured\n )::template_minimal_type\n ) AS related_templates\n FROM af_related_template_view template\n JOIN af_template_view related_template\n ON template.related_view_id = related_template.view_id\n JOIN af_template_creator creator\n ON related_template.creator_id = creator.creator_id\n JOIN related_template_with_category\n ON template.related_view_id = related_template_with_category.related_view_id\n WHERE template.view_id = $1\n GROUP BY template.view_id\n ),\n template_with_category AS (\n SELECT\n view_id,\n COALESCE(\n ARRAY_AGG((\n vtc.category_id,\n name,\n icon,\n bg_color,\n description,\n category_type,\n priority\n )) FILTER (WHERE vtc.category_id IS NOT NULL),\n '{}'\n ) AS categories\n FROM af_template_view_template_category vtc\n JOIN af_template_category tc\n ON vtc.category_id = tc.category_id\n WHERE view_id = $1\n GROUP BY view_id\n ),\n creator_number_of_templates AS (\n SELECT\n creator_id,\n COUNT(*) AS number_of_templates\n FROM af_template_view\n GROUP BY creator_id\n )\n\n SELECT\n template.view_id,\n template.created_at,\n template.updated_at,\n template.name,\n template.description,\n template.about,\n template.view_url,\n (\n creator.creator_id,\n creator.name,\n creator.avatar_url,\n template_with_creator_account_link.account_links,\n creator_number_of_templates.number_of_templates\n )::template_creator_type AS \"creator!: AFTemplateCreatorRow\",\n template_with_category.categories AS \"categories!: Vec<AFTemplateCategoryRow>\",\n COALESCE(template_with_related_template.related_templates, '{}') AS \"related_templates!: Vec<AFTemplateMinimalRow>\",\n template.is_new_template,\n template.is_featured\n FROM af_template_view template\n JOIN af_template_creator creator\n USING (creator_id)\n JOIN template_with_creator_account_link\n ON template.view_id = template_with_creator_account_link.view_id\n LEFT OUTER JOIN template_with_related_template\n ON template.view_id = template_with_related_template.view_id\n JOIN template_with_category\n ON template.view_id = template_with_category.view_id\n LEFT OUTER JOIN creator_number_of_templates\n ON template.creator_id = creator_number_of_templates.creator_id\n WHERE template.view_id = $1\n\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "view_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 2,
"name": "updated_at",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "description",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "about",
"type_info": "Text"
},
{
"ordinal": 6,
"name": "view_url",
"type_info": "Text"
},
{
"ordinal": 7,
"name": "creator!: AFTemplateCreatorRow",
"type_info": {
"Custom": {
"name": "template_creator_type",
"kind": {
"Composite": [
[
"creator_id",
"Uuid"
],
[
"name",
"Text"
],
[
"avatar_url",
"Text"
],
[
"account_links",
{
"Custom": {
"name": "account_link_type[]",
"kind": {
"Array": {
"Custom": {
"name": "account_link_type",
"kind": {
"Composite": [
[
"link_type",
"Text"
],
[
"url",
"Text"
]
]
}
}
}
}
}
}
],
[
"number_of_templates",
"Int4"
]
]
}
}
}
},
{
"ordinal": 8,
"name": "categories!: Vec<AFTemplateCategoryRow>",
"type_info": "RecordArray"
},
{
"ordinal": 9,
"name": "related_templates!: Vec<AFTemplateMinimalRow>",
"type_info": {
"Custom": {
"name": "template_minimal_type[]",
"kind": {
"Array": {
"Custom": {
"name": "template_minimal_type",
"kind": {
"Composite": [
[
"view_id",
"Uuid"
],
[
"created_at",
"Timestamptz"
],
[
"updated_at",
"Timestamptz"
],
[
"name",
"Text"
],
[
"description",
"Text"
],
[
"view_url",
"Text"
],
[
"creator",
{
"Custom": {
"name": "template_creator_minimal_type",
"kind": {
"Composite": [
[
"creator_id",
"Uuid"
],
[
"name",
"Text"
],
[
"avatar_url",
"Text"
]
]
}
}
}
],
[
"categories",
{
"Custom": {
"name": "template_category_minimal_type[]",
"kind": {
"Array": {
"Custom": {
"name": "template_category_minimal_type",
"kind": {
"Composite": [
[
"category_id",
"Uuid"
],
[
"name",
"Text"
],
[
"icon",
"Text"
],
[
"bg_color",
"Text"
]
]
}
}
}
}
}
}
],
[
"is_new_template",
"Bool"
],
[
"is_featured",
"Bool"
]
]
}
}
}
}
}
}
},
{
"ordinal": 10,
"name": "is_new_template",
"type_info": "Bool"
},
{
"ordinal": 11,
"name": "is_featured",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
null,
null,
null,
false,
false
]
},
"hash": "62ed61bcf92fc0c3756f57d0fe05cdd12e70072f5646fe48790ad189a6e96b12"
}
================================================
FILE: .sqlx/query-6380f5a6ded2dab8f18de42541c9d77c2f3af512e3f66e1b731ca7c00c9ea8f8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO public.af_workspace_member (workspace_id, uid, role_id)\n SELECT $1, af_user.uid, $3\n FROM public.af_user\n WHERE\n af_user.email = $2\n ON CONFLICT (workspace_id, uid)\n DO NOTHING;\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text",
"Int4"
]
},
"nullable": []
},
"hash": "6380f5a6ded2dab8f18de42541c9d77c2f3af512e3f66e1b731ca7c00c9ea8f8"
}
================================================
FILE: .sqlx/query-63f0871525ed70bd980223de574d241c0b738cfb7b0ea1fc808f02c0e05b9a2f.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n avr.reaction_type,\n ARRAY_AGG((au.uuid, au.name, au.email, au.metadata ->> 'icon_url')) AS \"react_users!: Vec<AFWebUserWithEmailColumn>\",\n avr.comment_id\n FROM af_published_view_reaction avr\n INNER JOIN af_user au ON avr.created_by = au.uid\n WHERE comment_id = $1\n GROUP BY comment_id, reaction_type\n ORDER BY MIN(avr.created_at)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "reaction_type",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "react_users!: Vec<AFWebUserWithEmailColumn>",
"type_info": "RecordArray"
},
{
"ordinal": 2,
"name": "comment_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
null,
false
]
},
"hash": "63f0871525ed70bd980223de574d241c0b738cfb7b0ea1fc808f02c0e05b9a2f"
}
================================================
FILE: .sqlx/query-66218110851919b05b95b008a17547547d23f6baeeff8a5521b2b246126adc34.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT name, meta_data, rag_ids\n FROM af_chat\n WHERE chat_id = $1 AND deleted_at IS NULL\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "meta_data",
"type_info": "Jsonb"
},
{
"ordinal": 2,
"name": "rag_ids",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false
]
},
"hash": "66218110851919b05b95b008a17547547d23f6baeeff8a5521b2b246126adc34"
}
================================================
FILE: .sqlx/query-6716ec4787f7155af97a4890730f4b3fe564ead8d99f8355ac249f9b39316238.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH workspace_member_count AS (\n SELECT\n workspace_id,\n COUNT(*) AS member_count\n FROM af_workspace_member\n WHERE workspace_id = $1 AND role_id != $3\n GROUP BY workspace_id\n )\n\n SELECT\n af_workspace.workspace_id,\n database_storage_id,\n owner_uid,\n owner_profile.name as owner_name,\n owner_profile.email as owner_email,\n af_workspace.created_at,\n workspace_type,\n af_workspace.deleted_at,\n workspace_name,\n icon,\n workspace_member_count.member_count AS \"member_count!\",\n role_id AS \"role!\"\n FROM public.af_workspace\n JOIN public.af_user owner_profile ON af_workspace.owner_uid = owner_profile.uid\n JOIN af_workspace_member ON (af_workspace.workspace_id = af_workspace_member.workspace_id\n AND af_workspace_member.uid = $2)\n JOIN workspace_member_count ON af_workspace.workspace_id = workspace_member_count.workspace_id\n WHERE af_workspace.workspace_id = $1\n AND COALESCE(af_workspace.is_initialized, true) = true;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "database_storage_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "owner_uid",
"type_info": "Int8"
},
{
"ordinal": 3,
"name": "owner_name",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "owner_email",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_type",
"type_info": "Int4"
},
{
"ordinal": 7,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 8,
"name": "workspace_name",
"type_info": "Text"
},
{
"ordinal": 9,
"name": "icon",
"type_info": "Text"
},
{
"ordinal": 10,
"name": "member_count!",
"type_info": "Int8"
},
{
"ordinal": 11,
"name": "role!",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8",
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
false,
true,
true,
false,
null,
false
]
},
"hash": "6716ec4787f7155af97a4890730f4b3fe564ead8d99f8355ac249f9b39316238"
}
================================================
FILE: .sqlx/query-67b381fdcd20f8cfe782d939e56bf94f105cdb23a59fefb846afe8105d91d129.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH request_id_workspace_member_count AS (\n SELECT\n request_id,\n COUNT(*) AS member_count\n FROM af_access_request\n JOIN af_workspace_member USING (workspace_id)\n WHERE request_id = $1\n GROUP BY request_id\n )\n SELECT\n request_id,\n view_id,\n (\n workspace_id,\n af_workspace.database_storage_id,\n af_workspace.owner_uid,\n owner_profile.name,\n owner_profile.email,\n af_workspace.created_at,\n af_workspace.workspace_type,\n af_workspace.deleted_at,\n af_workspace.workspace_name,\n af_workspace.icon,\n request_id_workspace_member_count.member_count\n ) AS \"workspace!: AFWorkspaceWithMemberCountRow\",\n (\n af_user.uid,\n af_user.uuid,\n af_user.name,\n af_user.email,\n af_user.metadata ->> 'icon_url'\n ) AS \"requester!: AFAccessRequesterColumn\",\n status AS \"status: AFAccessRequestStatusColumn\",\n af_access_request.created_at AS created_at\n FROM af_access_request\n JOIN af_user USING (uid)\n JOIN af_workspace USING (workspace_id)\n JOIN af_user AS owner_profile ON af_workspace.owner_uid = owner_profile.uid\n JOIN request_id_workspace_member_count USING (request_id)\n WHERE request_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "request_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "view_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "workspace!: AFWorkspaceWithMemberCountRow",
"type_info": "Record"
},
{
"ordinal": 3,
"name": "requester!: AFAccessRequesterColumn",
"type_info": "Record"
},
{
"ordinal": 4,
"name": "status: AFAccessRequestStatusColumn",
"type_info": "Int4"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
null,
null,
false,
false
]
},
"hash": "67b381fdcd20f8cfe782d939e56bf94f105cdb23a59fefb846afe8105d91d129"
}
================================================
FILE: .sqlx/query-6821f1e02da2c71cdf0566a163c85ff185bf0ba89c770254c9c15880ba76a553.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_name\n FROM public.af_workspace\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_name",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
true
]
},
"hash": "6821f1e02da2c71cdf0566a163c85ff185bf0ba89c770254c9c15880ba76a553"
}
================================================
FILE: .sqlx/query-6935572cb23700243fbbd3dc382cdbf56edaadc4aab7855c237bce68e29414c0.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid, blob\n FROM af_collab\n WHERE oid = ANY($1) AND deleted_at IS NULL;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "blob",
"type_info": "Bytea"
}
],
"parameters": {
"Left": [
"UuidArray"
]
},
"nullable": [
false,
false
]
},
"hash": "6935572cb23700243fbbd3dc382cdbf56edaadc4aab7855c237bce68e29414c0"
}
================================================
FILE: .sqlx/query-6aca3fde126cb1761c0a5ce1fbfa793bdbac4aed137cdf60eb3f277f36d7bf7a.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n category_id AS id,\n name,\n description,\n icon,\n bg_color,\n category_type AS \"category_type: AFTemplateCategoryTypeColumn\",\n priority\n FROM af_template_category\n WHERE category_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "description",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "icon",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "bg_color",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "category_type: AFTemplateCategoryTypeColumn",
"type_info": "Int4"
},
{
"ordinal": 6,
"name": "priority",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "6aca3fde126cb1761c0a5ce1fbfa793bdbac4aed137cdf60eb3f277f36d7bf7a"
}
================================================
FILE: .sqlx/query-6ca2a2fa10d5334183d98176998d41f36948fe5624e290a32d0b50bc9fb256bf.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n updated_at as updated_at,\n oid as row_id\n FROM af_collab\n WHERE workspace_id = $1\n AND oid = ANY($2)\n AND updated_at > $3\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "updated_at",
"type_info": "Timestamptz"
},
{
"ordinal": 1,
"name": "row_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid",
"UuidArray",
"Timestamptz"
]
},
"nullable": [
false,
false
]
},
"hash": "6ca2a2fa10d5334183d98176998d41f36948fe5624e290a32d0b50bc9fb256bf"
}
================================================
FILE: .sqlx/query-6cc4a7da11a37413c9951983ee3f30de933cc6357a66c8e10366fde27acaefea.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_blob_metadata\n (workspace_id, file_id, file_type, file_size)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (workspace_id, file_id) DO UPDATE SET\n file_type = $3,\n file_size = $4\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Varchar",
"Varchar",
"Int8"
]
},
"nullable": []
},
"hash": "6cc4a7da11a37413c9951983ee3f30de933cc6357a66c8e10366fde27acaefea"
}
================================================
FILE: .sqlx/query-6f5d6d79587d7f7a52c920acccfe338a8c001ea30b722d3a6a1a60259d47913c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT content,meta_data\n FROM af_chat_messages\n WHERE message_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "content",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "meta_data",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": [
false,
false
]
},
"hash": "6f5d6d79587d7f7a52c920acccfe338a8c001ea30b722d3a6a1a60259d47913c"
}
================================================
FILE: .sqlx/query-6fbcd1c32c638530461c74f8c8195a5b1e1e6f7a389a6a60d889c88c5f47302a.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT EXISTS (\n SELECT 1 FROM af_collab\n WHERE oid = $1 AND deleted_at IS NULL\n )\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "6fbcd1c32c638530461c74f8c8195a5b1e1e6f7a389a6a60d889c88c5f47302a"
}
================================================
FILE: .sqlx/query-71c15686124c05a4fdef066738eadd0ab17d6af1bfeffc480c8fe52a4e6edab8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT file_id FROM af_blob_metadata\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "file_id",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "71c15686124c05a4fdef066738eadd0ab17d6af1bfeffc480c8fe52a4e6edab8"
}
================================================
FILE: .sqlx/query-74de473589a405c3ab567e72a881869321095e2de497b2c1866c547f939c359c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT * FROM af_blob_metadata\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "file_id",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "file_type",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "file_size",
"type_info": "Int8"
},
{
"ordinal": 4,
"name": "modified_at",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "status",
"type_info": "Int2"
},
{
"ordinal": 6,
"name": "source",
"type_info": "Int2"
},
{
"ordinal": 7,
"name": "source_metadata",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true
]
},
"hash": "74de473589a405c3ab567e72a881869321095e2de497b2c1866c547f939c359c"
}
================================================
FILE: .sqlx/query-75dc8578510ae696bf4bcdd780f7cefc666b4436cf53edf30a98dd2ff7926799.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n au.uuid,\n COALESCE(awmp.name, au.name) AS \"name!\",\n au.email,\n awm.role_id AS \"role!\",\n COALESCE(awmp.avatar_url, au.metadata ->> 'icon_url') AS \"avatar_url\",\n awmp.cover_image_url,\n awmp.custom_image_url,\n awmp.description\n FROM af_workspace_member awm\n JOIN af_user au ON awm.uid = au.uid\n LEFT JOIN af_workspace_member_profile awmp ON (awm.uid = awmp.uid AND awm.workspace_id = awmp.workspace_id)\n WHERE awm.workspace_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name!",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "role!",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "cover_image_url",
"type_info": "Text"
},
{
"ordinal": 6,
"name": "custom_image_url",
"type_info": "Text"
},
{
"ordinal": 7,
"name": "description",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
null,
false,
false,
null,
true,
true,
true
]
},
"hash": "75dc8578510ae696bf4bcdd780f7cefc666b4436cf53edf30a98dd2ff7926799"
}
================================================
FILE: .sqlx/query-770a4979e137ca08c5ea625259221f9d397a56defb8e498eb92da7b3a8af612b.json
================================================
{
"db_name": "PostgreSQL",
"query": "UPDATE af_quick_note SET data = $1, updated_at = NOW() WHERE quick_note_id = $2",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Jsonb",
"Uuid"
]
},
"nullable": []
},
"hash": "770a4979e137ca08c5ea625259221f9d397a56defb8e498eb92da7b3a8af612b"
}
================================================
FILE: .sqlx/query-786a59b28265397658aecf0318beeedece2a7f5bea80b9189f3989721035c593.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH user_workspace_id AS (\n SELECT workspace_id\n FROM af_workspace_member\n JOIN af_user ON af_workspace_member.uid = af_user.uid\n WHERE af_user.uuid = $1\n ),\n workspace_member_count AS (\n SELECT\n workspace_id,\n COUNT(*) AS member_count\n FROM af_workspace_member\n JOIN user_workspace_id USING (workspace_id)\n WHERE role_id != $2\n GROUP BY workspace_id\n )\n\n SELECT\n w.workspace_id,\n w.database_storage_id,\n w.owner_uid,\n u.name AS owner_name,\n u.email AS owner_email,\n w.created_at,\n w.workspace_type,\n w.deleted_at,\n w.workspace_name,\n w.icon,\n wmc.member_count AS \"member_count!\",\n wm.role_id AS \"role!\"\n FROM af_workspace w\n JOIN af_workspace_member wm ON w.workspace_id = wm.workspace_id\n JOIN public.af_user u ON w.owner_uid = u.uid\n JOIN workspace_member_count wmc ON w.workspace_id = wmc.workspace_id\n WHERE wm.uid = (\n SELECT uid FROM public.af_user WHERE uuid = $1\n )\n AND COALESCE(w.is_initialized, true) = true;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "database_storage_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "owner_uid",
"type_info": "Int8"
},
{
"ordinal": 3,
"name": "owner_name",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "owner_email",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_type",
"type_info": "Int4"
},
{
"ordinal": 7,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 8,
"name": "workspace_name",
"type_info": "Text"
},
{
"ordinal": 9,
"name": "icon",
"type_info": "Text"
},
{
"ordinal": 10,
"name": "member_count!",
"type_info": "Int8"
},
{
"ordinal": 11,
"name": "role!",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
false,
true,
true,
false,
null,
false
]
},
"hash": "786a59b28265397658aecf0318beeedece2a7f5bea80b9189f3989721035c593"
}
================================================
FILE: .sqlx/query-78a191e21a7e7a07eee88ed02c7fbf7035f908b8e4057f7ace1b3b5d433424fe.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_collab\n SET deleted_at = $2\n WHERE oid = $1;\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Timestamptz"
]
},
"nullable": []
},
"hash": "78a191e21a7e7a07eee88ed02c7fbf7035f908b8e4057f7ace1b3b5d433424fe"
}
================================================
FILE: .sqlx/query-794c4ced16801b3e98a62eb44c18c14137dd09b11be73442a7f46b2f938b8445.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT message_id, content, created_at, author, meta_data, reply_message_id\n FROM af_chat_messages\n WHERE chat_id = $1\n AND reply_message_id = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "message_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "content",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "author",
"type_info": "Jsonb"
},
{
"ordinal": 4,
"name": "meta_data",
"type_info": "Jsonb"
},
{
"ordinal": 5,
"name": "reply_message_id",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8"
]
},
"nullable": [
false,
false,
false,
false,
false,
true
]
},
"hash": "794c4ced16801b3e98a62eb44c18c14137dd09b11be73442a7f46b2f938b8445"
}
================================================
FILE: .sqlx/query-7a4c7da16e99ff3875bdd7e0d189e26c3c1ab49672bace41992aecc446061850.json
================================================
{
"db_name": "PostgreSQL",
"query": "SElECT settings FROM af_workspace WHERE workspace_id = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "settings",
"type_info": "Jsonb"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
true
]
},
"hash": "7a4c7da16e99ff3875bdd7e0d189e26c3c1ab49672bace41992aecc446061850"
}
================================================
FILE: .sqlx/query-7a86f93afe6e77d4481920b08ed38926446f6473107d68dfcd82ffecddcee890.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n awn.namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp,\n apc.unpublished_at AS unpublished_timestamp,\n apc.comments_enabled,\n apc.duplicate_enabled\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n JOIN af_workspace_namespace awn ON aw.workspace_id = awn.workspace_id AND awn.is_original = TRUE\n WHERE apc.view_id = ANY($1);\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "namespace",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "publish_name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "view_id",
"type_info": "Uuid"
},
{
"ordinal": 3,
"name": "publisher_email",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "publish_timestamp",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "unpublished_timestamp",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "comments_enabled",
"type_info": "Bool"
},
{
"ordinal": 7,
"name": "duplicate_enabled",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"UuidArray"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
false,
false
]
},
"hash": "7a86f93afe6e77d4481920b08ed38926446f6473107d68dfcd82ffecddcee890"
}
================================================
FILE: .sqlx/query-7aa6e41c80f0b2906d46e73ae05e8e70e133b7edd450b102715b8a487d6055ac.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT metadata, blob\n FROM af_published_collab\n WHERE view_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "metadata",
"type_info": "Jsonb"
},
{
"ordinal": 1,
"name": "blob",
"type_info": "Bytea"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false
]
},
"hash": "7aa6e41c80f0b2906d46e73ae05e8e70e133b7edd450b102715b8a487d6055ac"
}
================================================
FILE: .sqlx/query-7f6b1db5fd7b4e235f1e04d9d990fa2d47edfed23e692fbab778d387b2861a22.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT name FROM af_user WHERE uuid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "name",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "7f6b1db5fd7b4e235f1e04d9d990fa2d47edfed23e692fbab778d387b2861a22"
}
================================================
FILE: .sqlx/query-811b6b01de4fdb06ad58185a5c49dfaa31aef8ea30ab3421d4afc13822fc0a9c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT c.oid, c.partition_key, c.updated_at, c.blob\n FROM af_collab c\n WHERE c.workspace_id = $1\n AND c.deleted_at IS NULL\n AND c.created_at > $2\n ORDER BY updated_at\n LIMIT $3\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "partition_key",
"type_info": "Int4"
},
{
"ordinal": 2,
"name": "updated_at",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "blob",
"type_info": "Bytea"
}
],
"parameters": {
"Left": [
"Uuid",
"Timestamptz",
"Int8"
]
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "811b6b01de4fdb06ad58185a5c49dfaa31aef8ea30ab3421d4afc13822fc0a9c"
}
================================================
FILE: .sqlx/query-816a026ca4c25329b2fb24d59efde9ab71798ff8b31ce7320e02344d4e8b3e42.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_published_view_reaction\n WHERE comment_id = $1 AND created_by = (SELECT uid FROM af_user WHERE uuid = $2) AND reaction_type = $3\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Text"
]
},
"nullable": []
},
"hash": "816a026ca4c25329b2fb24d59efde9ab71798ff8b31ce7320e02344d4e8b3e42"
}
================================================
FILE: .sqlx/query-834638eb3c38eb2c220aa23ac928874d87606b47ef3bb80540614ce2f8453936.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_snapshot_state (oid, workspace_id, doc_state, doc_state_version, deps_snapshot_id, partition_key, created_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Uuid",
"Bytea",
"Int4",
"Uuid",
"Int4",
"Int8"
]
},
"nullable": []
},
"hash": "834638eb3c38eb2c220aa23ac928874d87606b47ef3bb80540614ce2f8453936"
}
================================================
FILE: .sqlx/query-842243ea6ca59135ae539060ff37b80791e76aa268a44642ede515f315e80c01.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_chat_messages\n WHERE message_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": []
},
"hash": "842243ea6ca59135ae539060ff37b80791e76aa268a44642ede515f315e80c01"
}
================================================
FILE: .sqlx/query-84c224af99f654e2e0ba11a411376794855483eedb0c30b1873ed660ca8d10cd.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n uuid,\n name,\n metadata ->> 'icon_url' AS avatar_url\n FROM af_user\n WHERE uid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uuid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "avatar_url",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": [
false,
false,
null
]
},
"hash": "84c224af99f654e2e0ba11a411376794855483eedb0c30b1873ed660ca8d10cd"
}
================================================
FILE: .sqlx/query-84e600f13d61c56a45133e7458d5152e68dec72030e5789bf4149a333b6ebdf5.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_template_view_template_category\n WHERE view_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "84e600f13d61c56a45133e7458d5152e68dec72030e5789bf4149a333b6ebdf5"
}
================================================
FILE: .sqlx/query-852c729791d5b5eb2dde5772ccbcd24579486e43886d95a11481991fdf28efa8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_collab (oid, blob, len, partition_key, owner_uid, workspace_id, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6, COALESCE($7, NOW())) ON CONFLICT (oid)\n DO UPDATE SET blob = $2, len = $3, owner_uid = $5, updated_at = COALESCE($7, NOW()) WHERE excluded.workspace_id = af_collab.workspace_id;\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Bytea",
"Int4",
"Int4",
"Int8",
"Uuid",
"Timestamptz"
]
},
"nullable": []
},
"hash": "852c729791d5b5eb2dde5772ccbcd24579486e43886d95a11481991fdf28efa8"
}
================================================
FILE: .sqlx/query-85e9688218913dee85480932273ff6cf75d29af45638b195e73d73b6048806bf.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_workspace_member_profile (workspace_id, uid, name, avatar_url, cover_image_url, custom_image_url, description)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n ON CONFLICT (workspace_id, uid) DO UPDATE\n SET name = EXCLUDED.name,\n avatar_url = EXCLUDED.avatar_url,\n cover_image_url = EXCLUDED.cover_image_url,\n custom_image_url = EXCLUDED.custom_image_url,\n description = EXCLUDED.description\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Int8",
"Text",
"Text",
"Text",
"Text",
"Text"
]
},
"nullable": []
},
"hash": "85e9688218913dee85480932273ff6cf75d29af45638b195e73d73b6048806bf"
}
================================================
FILE: .sqlx/query-865fe86df6d04f8abb6d477af13f8a2392a742f4027d99c290f0f156df48be07.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n fragment_id,\n content_type,\n content,\n embedding as \"embedding!: Option<Vector>\",\n metadata,\n fragment_index,\n embedder_type\n FROM af_collab_embeddings\n WHERE oid = $1\n ORDER BY fragment_index\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "fragment_id",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "content_type",
"type_info": "Int4"
},
{
"ordinal": 2,
"name": "content",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "embedding!: Option<Vector>",
"type_info": {
"Custom": {
"name": "vector",
"kind": "Simple"
}
}
},
{
"ordinal": 4,
"name": "metadata",
"type_info": "Jsonb"
},
{
"ordinal": 5,
"name": "fragment_index",
"type_info": "Int4"
},
{
"ordinal": 6,
"name": "embedder_type",
"type_info": "Int2"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "865fe86df6d04f8abb6d477af13f8a2392a742f4027d99c290f0f156df48be07"
}
================================================
FILE: .sqlx/query-87628d6739441a22229d08832d09cbf4598c36204a6885b2e279c848cedcfa75.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT COUNT(*)\n FROM af_published_collab\n WHERE workspace_id = $1\n AND view_id = ANY($2)\n AND published_by = (SELECT uid FROM af_user WHERE uuid = $3)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "count",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid",
"UuidArray",
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "87628d6739441a22229d08832d09cbf4598c36204a6885b2e279c848cedcfa75"
}
================================================
FILE: .sqlx/query-88516b9a2a424bc7697337d6f16b0d6e94b919597d709f930467423c5b4c0ec2.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT * FROM af_collab_snapshot\n WHERE workspace_id = $1 AND oid = $2 AND deleted_at IS NULL\n ORDER BY created_at DESC\n LIMIT 1;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "sid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "oid",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "blob",
"type_info": "Bytea"
},
{
"ordinal": 3,
"name": "len",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "encrypt",
"type_info": "Int4"
},
{
"ordinal": 5,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 7,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
false,
false,
false,
false,
true,
true,
false,
false
]
},
"hash": "88516b9a2a424bc7697337d6f16b0d6e94b919597d709f930467423c5b4c0ec2"
}
================================================
FILE: .sqlx/query-8cd79c307813a509119230c7673f86471463a06ad9a84764da8d5bb1e6168e1c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n af_user.uid,\n af_user.name,\n af_user.email,\n af_user.metadata ->> 'icon_url' AS avatar_url,\n af_workspace_member.role_id AS role,\n af_workspace_member.created_at\n FROM public.af_workspace_member\n JOIN public.af_user ON af_workspace_member.uid = af_user.uid\n WHERE af_workspace_member.workspace_id = $1\n AND role_id != $2\n ORDER BY af_workspace_member.created_at ASC;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "role",
"type_info": "Int4"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": [
false,
false,
false,
null,
false,
true
]
},
"hash": "8cd79c307813a509119230c7673f86471463a06ad9a84764da8d5bb1e6168e1c"
}
================================================
FILE: .sqlx/query-90a302af791eeb5c5f60c3f95145e0e73c2a1652c5b547e4118bac1d005300de.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id\n FROM af_workspace_invite_code\n WHERE invite_code = $1\n AND (expires_at IS NULL OR expires_at > NOW())\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false
]
},
"hash": "90a302af791eeb5c5f60c3f95145e0e73c2a1652c5b547e4118bac1d005300de"
}
================================================
FILE: .sqlx/query-90afca9cc8b6d4ca31e8ddf1ce466411b5034639df91b739f5cbe2af0ffb6811.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid, fragment_id\n FROM af_collab_embeddings\n WHERE oid = ANY($1::uuid[])\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "fragment_id",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"UuidArray"
]
},
"nullable": [
false,
false
]
},
"hash": "90afca9cc8b6d4ca31e8ddf1ce466411b5034639df91b739f5cbe2af0ffb6811"
}
================================================
FILE: .sqlx/query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_published_collab\n SET\n blob = E''::bytea,\n unpublished_at = NOW()\n WHERE workspace_id = $1\n AND view_id = ANY($2)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"UuidArray"
]
},
"nullable": []
},
"hash": "92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1"
}
================================================
FILE: .sqlx/query-936faba4e3c8fc3685d68f561a2c2d4f386c77cffde6f25702c19758a12669ce.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_workspace_member\n SET\n role_id = $1\n WHERE workspace_id = $2 AND uid = (\n SELECT uid FROM af_user WHERE email = $3\n )\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Int4",
"Uuid",
"Text"
]
},
"nullable": []
},
"hash": "936faba4e3c8fc3685d68f561a2c2d4f386c77cffde6f25702c19758a12669ce"
}
================================================
FILE: .sqlx/query-93f6a59171d7cd08d321c777f24255621280fbcf6a2c009afd601eac16c9ba3a.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT view_id\n FROM af_published_collab\n WHERE workspace_id = $1\n AND unpublished_at IS NULL\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "view_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "93f6a59171d7cd08d321c777f24255621280fbcf6a2c009afd601eac16c9ba3a"
}
================================================
FILE: .sqlx/query-94555a25b986992bd3cfb67bd36ff015d39bdd78ac20d56570306616bf10faf3.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_published_collab (workspace_id, view_id, publish_name, published_by, metadata, blob, comments_enabled, duplicate_enabled)\n SELECT * FROM UNNEST(\n (SELECT array_agg((SELECT $1::uuid)) FROM generate_series(1, $9))::uuid[],\n $2::uuid[],\n $3::text[],\n (SELECT array_agg((SELECT uid FROM af_user WHERE uuid = $4)) FROM generate_series(1, $9))::bigint[],\n $5::jsonb[],\n $6::bytea[],\n $7::boolean[],\n $8::boolean[]\n )\n ON CONFLICT (workspace_id, view_id) DO UPDATE\n SET metadata = EXCLUDED.metadata,\n blob = EXCLUDED.blob,\n published_by = EXCLUDED.published_by,\n publish_name = EXCLUDED.publish_name\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"UuidArray",
"TextArray",
"Uuid",
"JsonbArray",
"ByteaArray",
"BoolArray",
"BoolArray",
"Int4"
]
},
"nullable": []
},
"hash": "94555a25b986992bd3cfb67bd36ff015d39bdd78ac20d56570306616bf10faf3"
}
================================================
FILE: .sqlx/query-95b1b405028c45c074121110d046f42f8229f150c2384671802ee7c1ef9e376d.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_access_request\n SET status = $2\n WHERE request_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Int4"
]
},
"nullable": []
},
"hash": "95b1b405028c45c074121110d046f42f8229f150c2384671802ee7c1ef9e376d"
}
================================================
FILE: .sqlx/query-95b4d7508569cac38c78d21a0a471772d3703e5678ee7ca0cd32d60f5343be91.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_chat_messages (chat_id, author, content)\n VALUES ($1, $2, $3)\n RETURNING message_id, created_at\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "message_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Jsonb",
"Text"
]
},
"nullable": [
false,
false
]
},
"hash": "95b4d7508569cac38c78d21a0a471772d3703e5678ee7ca0cd32d60f5343be91"
}
================================================
FILE: .sqlx/query-95c00cd1ce7cdb8f5c8f45d5262d371b1b3c3f903f4eab9c0070d9916e3f8c12.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n avc.comment_id,\n avc.created_at,\n avc.updated_at AS last_updated_at,\n avc.content,\n avc.reply_comment_id,\n avc.is_deleted,\n (au.uuid, au.name, au.email, au.metadata ->> 'icon_url') AS \"user: AFWebUserWithEmailColumn\",\n (NOT avc.is_deleted AND ($2 OR au.uuid = $3)) AS \"can_be_deleted!\"\n FROM af_published_view_comment avc\n LEFT OUTER JOIN af_user au ON avc.created_by = au.uid\n WHERE view_id = $1\n ORDER BY avc.created_at DESC\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "comment_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 2,
"name": "last_updated_at",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "content",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "reply_comment_id",
"type_info": "Uuid"
},
{
"ordinal": 5,
"name": "is_deleted",
"type_info": "Bool"
},
{
"ordinal": 6,
"name": "user: AFWebUserWithEmailColumn",
"type_info": "Record"
},
{
"ordinal": 7,
"name": "can_be_deleted!",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Bool",
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
true,
false,
null,
null
]
},
"hash": "95c00cd1ce7cdb8f5c8f45d5262d371b1b3c3f903f4eab9c0070d9916e3f8c12"
}
================================================
FILE: .sqlx/query-9ab1ff2abc6d51bc5a48a1dc6c294bbfdbe0d5f11a5e2ffc8c1973217b80307b.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_published_view_comment (view_id, created_by, content, reply_comment_id)\n VALUES ($1, (SELECT uid FROM af_user WHERE uuid = $2), $3, $4)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Text",
"Uuid"
]
},
"nullable": []
},
"hash": "9ab1ff2abc6d51bc5a48a1dc6c294bbfdbe0d5f11a5e2ffc8c1973217b80307b"
}
================================================
FILE: .sqlx/query-9b2a8297fa991418b255fc5cb6ad70d695c4dceed20bdc557bfedfc820511126.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_template_category\n SET\n name = $2,\n description = $3,\n icon = $4,\n bg_color = $5,\n category_type = $6,\n priority = $7,\n updated_at = NOW()\n WHERE category_id = $1\n RETURNING\n category_id AS id,\n name,\n description,\n icon,\n bg_color,\n category_type AS \"category_type: AFTemplateCategoryTypeColumn\",\n priority\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "description",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "icon",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "bg_color",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "category_type: AFTemplateCategoryTypeColumn",
"type_info": "Int4"
},
{
"ordinal": 6,
"name": "priority",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid",
"Text",
"Text",
"Text",
"Text",
"Int4",
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "9b2a8297fa991418b255fc5cb6ad70d695c4dceed20bdc557bfedfc820511126"
}
================================================
FILE: .sqlx/query-a18d0c9536dba734715903c8e8f0b7be30d3e7a477c4ddd03533b781df2fb2c7.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n awn.namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp,\n apc.unpublished_at AS unpublished_timestamp,\n apc.comments_enabled,\n apc.duplicate_enabled\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n JOIN af_workspace_namespace awn ON aw.workspace_id = awn.workspace_id AND awn.is_original = TRUE\n WHERE apc.workspace_id = $1 AND apc.unpublished_at IS NULL;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "namespace",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "publish_name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "view_id",
"type_info": "Uuid"
},
{
"ordinal": 3,
"name": "publisher_email",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "publish_timestamp",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "unpublished_timestamp",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "comments_enabled",
"type_info": "Bool"
},
{
"ordinal": 7,
"name": "duplicate_enabled",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
false,
false
]
},
"hash": "a18d0c9536dba734715903c8e8f0b7be30d3e7a477c4ddd03533b781df2fb2c7"
}
================================================
FILE: .sqlx/query-a3ab30d48e4a10aff1fbfa9dbc5d275a06598610bc471893c8c0febfc36c4737.json
================================================
{
"db_name": "PostgreSQL",
"query": "SELECT EXISTS(SELECT 1 FROM af_chat_messages WHERE chat_id = $1 AND message_id > $2)",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8"
]
},
"nullable": [
null
]
},
"hash": "a3ab30d48e4a10aff1fbfa9dbc5d275a06598610bc471893c8c0febfc36c4737"
}
================================================
FILE: .sqlx/query-a3c235bd5df50f80ec93c3d9f6da8db7e17e89788f30c5b6432c582992b6a009.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_published_collab\n WHERE workspace_id = $1\n AND publish_name = ANY($2::text[])\n RETURNING publish_name\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "publish_name",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid",
"TextArray"
]
},
"nullable": [
false
]
},
"hash": "a3c235bd5df50f80ec93c3d9f6da8db7e17e89788f30c5b6432c582992b6a009"
}
================================================
FILE: .sqlx/query-a527a90fcb69c58a5e711555b6ee56e7b92ceabe746279eccd7ae3e9fa918e96.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n af_user.uid,\n af_user.name,\n af_user.email,\n af_user.metadata ->> 'icon_url' AS avatar_url,\n af_workspace_member.role_id AS role,\n af_workspace_member.created_at\n FROM public.af_workspace_member\n JOIN public.af_user ON af_workspace_member.uid = af_user.uid\n WHERE af_workspace_member.workspace_id = $1\n AND af_workspace_member.uid = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "email",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "avatar_url",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "role",
"type_info": "Int4"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8"
]
},
"nullable": [
false,
false,
false,
null,
false,
true
]
},
"hash": "a527a90fcb69c58a5e711555b6ee56e7b92ceabe746279eccd7ae3e9fa918e96"
}
================================================
FILE: .sqlx/query-a75bf8b11d832d154716d4618595b117da583a31b51baaf7b84e9ee0d0e3109c.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n person_id\n FROM af_page_mention\n WHERE workspace_id = $1\n AND mentioned_by = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "person_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8"
]
},
"nullable": [
false
]
},
"hash": "a75bf8b11d832d154716d4618595b117da583a31b51baaf7b84e9ee0d0e3109c"
}
================================================
FILE: .sqlx/query-a7c03becdf9954611ac7ad96e1f5bb5e8364f095f1cc4dc23719b218eb032973.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT deleted_at IS NOT NULL AS is_deleted\n FROM af_collab\n WHERE oid = $1;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "is_deleted",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
null
]
},
"hash": "a7c03becdf9954611ac7ad96e1f5bb5e8364f095f1cc4dc23719b218eb032973"
}
================================================
FILE: .sqlx/query-aa75996ca6aa12f0bcaa5fb092ac279f8a94aadcc29d0e2b652dc420506835e7.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id, role_id\n FROM af_workspace_member\n WHERE workspace_id = ANY($1)\n AND uid = (SELECT uid FROM public.af_user WHERE uuid = $2)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "role_id",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"UuidArray",
"Uuid"
]
},
"nullable": [
false,
false
]
},
"hash": "aa75996ca6aa12f0bcaa5fb092ac279f8a94aadcc29d0e2b652dc420506835e7"
}
================================================
FILE: .sqlx/query-b16f38d563d4d0b35f06978a8b2c76dc5121b0e59f8b5992c9dad05dd101c8ad.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n i.id AS invite_id,\n i.workspace_id,\n w.workspace_name,\n u_inviter.email AS inviter_email,\n u_inviter.name AS inviter_name,\n i.status,\n i.updated_at,\n u_inviter.metadata->>'icon_url' AS inviter_icon,\n w.icon AS workspace_icon,\n (SELECT COUNT(*) FROM public.af_workspace_member m WHERE m.workspace_id = i.workspace_id) AS member_count\n FROM\n public.af_workspace_invitation i\n JOIN public.af_workspace w ON i.workspace_id = w.workspace_id\n JOIN public.af_user u_inviter ON i.inviter = u_inviter.uid\n JOIN public.af_user u_invitee ON u_invitee.uuid = $1\n WHERE\n LOWER(i.invitee_email) = LOWER(u_invitee.email)\n AND ($2::SMALLINT IS NULL OR i.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"
},
{
"ordinal": 7,
"name": "inviter_icon",
"type_info": "Text"
},
{
"ordinal": 8,
"name": "workspace_icon",
"type_info": "Text"
},
{
"ordinal": 9,
"name": "member_count",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid",
"Int2"
]
},
"nullable": [
false,
false,
true,
false,
false,
false,
false,
null,
false,
null
]
},
"hash": "b16f38d563d4d0b35f06978a8b2c76dc5121b0e59f8b5992c9dad05dd101c8ad"
}
================================================
FILE: .sqlx/query-b5024138772e13557df973c1c021daf74aab97b5874d7366c478c18ae2e89e58.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT uid FROM af_user WHERE email = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false
]
},
"hash": "b5024138772e13557df973c1c021daf74aab97b5874d7366c478c18ae2e89e58"
}
================================================
FILE: .sqlx/query-b509712055858af398fd12ddd1a8c3da54280cf55f0c53f340bddbf4bf09b3e0.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_related_template_view (view_id, related_view_id)\n SELECT $1 AS view_id, related_view_id\n FROM UNNEST($2::uuid[]) AS t(related_view_id)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"UuidArray"
]
},
"nullable": []
},
"hash": "b509712055858af398fd12ddd1a8c3da54280cf55f0c53f340bddbf4bf09b3e0"
}
================================================
FILE: .sqlx/query-ba815f67aab3f302a2982225b72c6113bbd9bc87326e4f0a3b44dadbb5f47920.json
================================================
{
"db_name": "PostgreSQL",
"query": "SELECT uid, role_id as role, workspace_id FROM af_workspace_member",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "uid",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "role",
"type_info": "Int4"
},
{
"ordinal": 2,
"name": "workspace_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": []
},
"nullable": [
false,
false,
false
]
},
"hash": "ba815f67aab3f302a2982225b72c6113bbd9bc87326e4f0a3b44dadbb5f47920"
}
================================================
FILE: .sqlx/query-bbb3c31ea7e9c0a3bdabbc23b2730ee0254f38a7c1457f917c8f37f1e1aefa12.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_chat_messages\n SET reply_message_id = $2\n WHERE message_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Int8",
"Int8"
]
},
"nullable": []
},
"hash": "bbb3c31ea7e9c0a3bdabbc23b2730ee0254f38a7c1457f917c8f37f1e1aefa12"
}
================================================
FILE: .sqlx/query-bd34e351ea1adc0d12d4f1cce5a855089b7f39a431dea2903c3e0b9a220640b8.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n WITH creator_number_of_templates AS (\n SELECT\n creator_id,\n COUNT(1)::int AS number_of_templates\n FROM af_template_view\n WHERE creator_id = $1\n GROUP BY creator_id\n )\n SELECT\n creator.creator_id AS \"id!\",\n name AS \"name!\",\n avatar_url AS \"avatar_url!\",\n ARRAY_AGG((link_type, url)) FILTER (WHERE link_type IS NOT NULL) AS \"account_links: Vec<AccountLinkColumn>\",\n COALESCE(number_of_templates, 0) AS \"number_of_templates!\"\n FROM af_template_creator creator\n LEFT OUTER JOIN af_template_creator_account_link account_link\n USING (creator_id)\n LEFT OUTER JOIN creator_number_of_templates\n USING (creator_id)\n WHERE creator.creator_id = $1\n GROUP BY (creator.creator_id, name, avatar_url, number_of_templates)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id!",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name!",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "avatar_url!",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "account_links: Vec<AccountLinkColumn>",
"type_info": "RecordArray"
},
{
"ordinal": 4,
"name": "number_of_templates!",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
null,
null
]
},
"hash": "bd34e351ea1adc0d12d4f1cce5a855089b7f39a431dea2903c3e0b9a220640b8"
}
================================================
FILE: .sqlx/query-bde2b88ffb1b59362c7ae82369892c79131c175924f95e5d48d75931fb846f41.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT email FROM af_user WHERE uuid = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "email",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false
]
},
"hash": "bde2b88ffb1b59362c7ae82369892c79131c175924f95e5d48d75931fb846f41"
}
================================================
FILE: .sqlx/query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT workspace_id, namespace, is_original\n FROM af_workspace_namespace\n WHERE workspace_id = $1\n AND namespace = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "namespace",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "is_original",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
false,
false,
false
]
},
"hash": "bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d"
}
================================================
FILE: .sqlx/query-c335b73ad499b67100e4ce3131a526ddf1745488597c3392ae05e4b398a8715e.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_template_creator\n WHERE creator_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "c335b73ad499b67100e4ce3131a526ddf1745488597c3392ae05e4b398a8715e"
}
================================================
FILE: .sqlx/query-c360ec37792d567535ccd2a5011d92c7a201f516e92e204db855167f381c58b1.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n workspace_id,\n database_storage_id,\n owner_uid,\n owner_profile.name as owner_name,\n owner_profile.email as owner_email,\n af_workspace.created_at,\n workspace_type,\n af_workspace.deleted_at,\n workspace_name,\n icon\n FROM public.af_workspace\n JOIN public.af_user owner_profile ON af_workspace.owner_uid = owner_profile.uid\n WHERE af_workspace.workspace_id = $1\n AND COALESCE(af_workspace.is_initialized, true) = true;\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "database_storage_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "owner_uid",
"type_info": "Int8"
},
{
"ordinal": 3,
"name": "owner_name",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "owner_email",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_type",
"type_info": "Int4"
},
{
"ordinal": 7,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 8,
"name": "workspace_name",
"type_info": "Text"
},
{
"ordinal": 9,
"name": "icon",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
true,
false,
true,
true,
false
]
},
"hash": "c360ec37792d567535ccd2a5011d92c7a201f516e92e204db855167f381c58b1"
}
================================================
FILE: .sqlx/query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_workspace_namespace\n SET namespace = $1\n WHERE workspace_id = $2\n AND namespace = $3\n AND is_original = FALSE\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Uuid",
"Text"
]
},
"nullable": []
},
"hash": "c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94"
}
================================================
FILE: .sqlx/query-c81848346ed2ff85f1d5fb8041fba648137a927762b385b97054552c00793a50.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_workspace_invite_code\n WHERE workspace_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "c81848346ed2ff85f1d5fb8041fba648137a927762b385b97054552c00793a50"
}
================================================
FILE: .sqlx/query-c843fb8517b1e364016b85a9e94927673bf8311bfbf723b610d59ecfef3fafce.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM public.af_workspace_member\n WHERE\n workspace_id = $1\n AND uid = (\n SELECT uid FROM public.af_user WHERE email = $2\n )\n -- Ensure the user to be deleted is not the original owner.\n -- 1. TODO(nathan): User must transfer ownership to another user first.\n -- 2. User must have at least one workspace\n AND uid <> (\n SELECT owner_uid FROM public.af_workspace WHERE workspace_id = $1\n );\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": []
},
"hash": "c843fb8517b1e364016b85a9e94927673bf8311bfbf723b610d59ecfef3fafce"
}
================================================
FILE: .sqlx/query-c8b1f57c5ddce8006a8e137be07f13b455f59657f5fcef67d69905ecec4cb063.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n w.workspace_name AS \"workspace_name!\",\n pm.workspace_id,\n pm.view_id,\n pm.view_name,\n mentioner.name AS \"mentioner_name!\",\n mentioner.metadata ->> 'icon_url' AS \"mentioner_avatar_url\",\n pm.person_id AS \"mentioned_person_id\",\n mentioned_person.name AS \"mentioned_person_name!\",\n mentioned_person.email AS \"mentioned_person_email!\",\n pm.mentioned_at AS \"mentioned_at!\",\n pm.block_id\n FROM af_page_mention AS pm\n JOIN af_workspace AS w ON pm.workspace_id = w.workspace_id\n JOIN af_user AS mentioned_person\n ON pm.person_id = mentioned_person.uuid\n JOIN af_user AS mentioner\n ON pm.mentioned_by = mentioner.uid\n WHERE pm.mentioned_at > NOW() - $1::INTERVAL\n AND require_notification\n AND NOT notified\n FOR UPDATE SKIP LOCKED\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_name!",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "view_id",
"type_info": "Uuid"
},
{
"ordinal": 3,
"name": "view_name",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "mentioner_name!",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "mentioner_avatar_url",
"type_info": "Text"
},
{
"ordinal": 6,
"name": "mentioned_person_id",
"type_info": "Uuid"
},
{
"ordinal": 7,
"name": "mentioned_person_name!",
"type_info": "Text"
},
{
"ordinal": 8,
"name": "mentioned_person_email!",
"type_info": "Text"
},
{
"ordinal": 9,
"name": "mentioned_at!",
"type_info": "Timestamptz"
},
{
"ordinal": 10,
"name": "block_id",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Interval"
]
},
"nullable": [
true,
false,
false,
false,
false,
null,
false,
false,
false,
true,
true
]
},
"hash": "c8b1f57c5ddce8006a8e137be07f13b455f59657f5fcef67d69905ecec4cb063"
}
================================================
FILE: .sqlx/query-ca2a21db67716e3f12b9f9240c1dba1b7cbe0bec1f59ef132fed53942ebad317.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_template_view (\n view_id,\n name,\n description,\n about,\n view_url,\n creator_id,\n is_new_template,\n is_featured\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text",
"Text",
"Text",
"Text",
"Uuid",
"Bool",
"Bool"
]
},
"nullable": []
},
"hash": "ca2a21db67716e3f12b9f9240c1dba1b7cbe0bec1f59ef132fed53942ebad317"
}
================================================
FILE: .sqlx/query-cb2375ad0094baefed417645b781f40dcabfbfe4a4738c99bb4efff649e6a0e6.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO af_template_category (name, description, icon, bg_color, category_type, priority)\n VALUES ($1, $2, $3, $4, $5, $6)\n RETURNING\n category_id AS id,\n name,\n description,\n icon,\n bg_color,\n category_type AS \"category_type: AFTemplateCategoryTypeColumn\",\n priority\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "name",
"type_info": "Text"
},
{
"ordinal": 2,
"name": "description",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "icon",
"type_info": "Text"
},
{
"ordinal": 4,
"name": "bg_color",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "category_type: AFTemplateCategoryTypeColumn",
"type_info": "Int4"
},
{
"ordinal": 6,
"name": "priority",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Text",
"Text",
"Text",
"Text",
"Int4",
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "cb2375ad0094baefed417645b781f40dcabfbfe4a4738c99bb4efff649e6a0e6"
}
================================================
FILE: .sqlx/query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT view_id\n FROM af_published_collab\n WHERE workspace_id = $1\n AND unpublished_at IS NULL\n AND publish_name = $2\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "view_id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
false
]
},
"hash": "cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854"
}
================================================
FILE: .sqlx/query-cbf1d3d9fdeb672eacd4b008879787bc1f0b22a554fb249d4e12a665d9767cbd.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n ac.oid as object_id,\n ace.partition_key,\n ac.indexed_at,\n ace.updated_at\n FROM af_collab_embeddings ac\n JOIN af_collab ace ON ac.oid = ace.oid\n WHERE ac.oid = ANY($1)\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "object_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "partition_key",
"type_info": "Int4"
},
{
"ordinal": 2,
"name": "indexed_at",
"type_info": "Timestamp"
},
{
"ordinal": 3,
"name": "updated_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"UuidArray"
]
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "cbf1d3d9fdeb672eacd4b008879787bc1f0b22a554fb249d4e12a665d9767cbd"
}
================================================
FILE: .sqlx/query-cce2abeed3399ad0b8867901735c5883c8d35fa82d6e0596c56eaf02c36a7e4f.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT oid, deleted_at IS NOT NULL AS is_deleted\n FROM af_collab\n WHERE oid = ANY($1);\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "oid",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "is_deleted",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"UuidArray"
]
},
"nullable": [
false,
null
]
},
"hash": "cce2abeed3399ad0b8867901735c5883c8d35fa82d6e0596c56eaf02c36a7e4f"
}
================================================
FILE: .sqlx/query-d0a24b554fe420d7ebf856ae7f1525aff3695fc97e2f43041dc54a4e62a88746.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM af_blob_metadata\n WHERE workspace_id = $1 AND file_id = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": []
},
"hash": "d0a24b554fe420d7ebf856ae7f1525aff3695fc97e2f43041dc54a4e62a88746"
}
================================================
FILE: .sqlx/query-d0e5f5097b35a15f19e9e7faf2c62336d5f130e939331e84c7d834f6028ea673.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n UPDATE af_collab\n SET indexed_at = $1\n WHERE oid = $2 AND partition_key = $3\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Timestamptz",
"Uuid",
"Int4"
]
},
"nullable": []
},
"hash": "d0e5f5097b35a15f19e9e7faf2c62336d5f130e939331e84c7d834f6028ea673"
}
================================================
FILE: .sqlx/query-d1ab621e0b6e8bc24f8fa8cbb975ae3b7f9f366cac02d66b5291d7207295ca29.json
================================================
{
"db_name": "PostgreSQL",
"query": "\n SELECT message_id, content, created_at, author, meta_data, reply_messag
gitextract_v4_lgx2l/
├── .dockerignore
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── audit.yml
│ ├── build_test_docker_image.yaml
│ ├── client_api_check.yml
│ ├── commitlint.yml
│ ├── integration_test.yml
│ ├── push_latest_docker.yml
│ ├── rustlint.yml
│ ├── stress_test.yml
│ ├── wasm_publish.yml
│ └── web_docker.yml
├── .gitignore
├── .sqlx/
│ ├── query-0389af6b225125d09c5a75b443561dba4d97b786d040e5b8d5a76de36716beb2.json
│ ├── query-05e89f62ff993fa2e4b0002c0022bba9706359e402b07b15ccdeb67492625064.json
│ ├── query-06096ba1131e78d3da5df25a4b0a1193f11c9782abaf91faf263a116f90e51af.json
│ ├── query-075b89cfe2572d28e7adfc29bbe52fef4afdd5013686f7294efd966739886f0d.json
│ ├── query-0781735c56d22370302beec06863dccbbb9e664b212de93e5073508a82b91609.json
│ ├── query-081abcd7f80664e8acd205833b0f9ca43bc1ccc03d992e7b1c45c3e401a6007a.json
│ ├── query-084655c4e26f78c9c0924ea39a099dc9c00ee73dc6ade2dcff27c03042ebe8c3.json
│ ├── query-09cf032adce81ba99362b3df50ba104f4e1eb2d538350c65cf615ea13f1c37f0.json
│ ├── query-09ff850490eab213cfa0ad88ece9ce7baa39beabee19754fd993268d29552eb9.json
│ ├── query-0affbd65859d6299c6ba736797f970b86552b83d95316ec3f54f93501e00b522.json
│ ├── query-0d9c62acb33b96bb81536d1ad3121174403bcd40b777eb8d384fe8e81e1db3c4.json
│ ├── query-0eeb2af3c6974c7e6d1c20bb4b08965eae9b0a291c7cef6451208b7740b9804c.json
│ ├── query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json
│ ├── query-1545a42d784a1a5fa8e9ed6128814608b9230b64ce23dcd85de444a7aa01bf9e.json
│ ├── query-15613595695e2e722c45712931ce0eb8d2a3deb1bb665d1f091f354a3ad96b92.json
│ ├── query-16208887bc2f2ca6b5f3df8062a12b482908f9f113c0474eeae75f6784b5e0fc.json
│ ├── query-18207c125d5f974894576ee1dcfe406b221e9119f570403ec7a41ae1359b3f6c.json
│ ├── query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json
│ ├── query-1b1ff4352abb6dad982279ee99c8dccb3621b55a838998c1b9803982ae10f622.json
│ ├── query-1bd79541a2b351b11ae94fe8a7aad408f9b563fd123099aa701a1e07ce797d2f.json
│ ├── query-1c8f022ff5add11376dbbc17efd874dd31fd908c4f17be1bded18dbc689e3b36.json
│ ├── query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json
│ ├── query-21195760ea7ed2dc4eda1dc2bd0eed9afcc63651ba6e67e7db675307e3b87821.json
│ ├── query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json
│ ├── query-21f66ca39be3377f8c5e4b218123e266fe8e03260ecd1891c644820892dda2b2.json
│ ├── query-223e530f8605f6d00789344565666f57705151e3c2318519e877b22f8ffc871b.json
│ ├── query-229a99b7a3a2f136babd5499c2a1047fe840903acf0d06e57fb78ca9b03e7008.json
│ ├── query-2394226650959b34ae80b1948b7a111720b3ea5da48934d8d7e395ecc84e6985.json
│ ├── query-24c5fb37a4391d590e83d2710e9a2ee7f4d06efcdd6034df1f67bb0d9db45716.json
│ ├── query-2593b975fcf2dcf0129a1390fd8e2888d440e07c904d7eb3ca14957be8bc6069.json
│ ├── query-2902fd3a9faa9481754d38b29abb543640c0b5564dca8f0141c7de2b8aab9551.json
│ ├── query-291f0916b7868f3598b50f659689b9c77d34112c2a2fff9fc04775da9f97e46d.json
│ ├── query-29279a0a97beb08aea84d588374c7534c28bd9c4da24b1ee20245109f5c33880.json
│ ├── query-2b0754f55889a20c294d2a77ba8d3fa34c8174856abfdede34797851183a177a.json
│ ├── query-2c0a776a787bc748857873b682d2fa3c549ffeaf767aa8ee05b09b3857505ded.json
│ ├── query-2c496e29533dd27117fbb688ba2324f04d7cc306181fcf3f82079d5639f632c4.json
│ ├── query-2d6d00669ea7d598d69d848d143f33e8c144d35b3d4c5293f98344b2c62fe6c8.json
│ ├── query-2dda0bc4d9486a49c0af00d8ee4408c970a2ba3533217c130281e7db5a4e3d6b.json
│ ├── query-30a592588fe20bb1444178b7ee9e73e37d1d55572f936988528178bfa10158e5.json
│ ├── query-315840e0657ea0b8d162635b4cc21ce84a09fd7ea14ea07980869a80ee06900c.json
│ ├── query-32fd3dcd1a3e02c32ddedb232b6af2e7f9ea160354528f3299cca62367af10f7.json
│ ├── query-340b8cef5a7676541b86505cdf103fcb5b54c40a9d6e599dc1d9dc0a95e1e862.json
│ ├── query-354166a6fa147dc6e17bfc14cb68d3a72a2e7c3aa2d115686deb12086786e034.json
│ ├── query-35622d4ebede28dd28b613edcf3970ad258286f176ce86e88bd662a602e4ad58.json
│ ├── query-36733444fc8fac851fb540105ea6c9dca785455ae44ae518b98d8b57082e11d8.json
│ ├── query-3865d921d76ac0d0eb16065738cddf82cb71945504116b0a04da759209b9c250.json
│ ├── query-3b2daf263b4022e69c819edb55d412da8ad3fe4377155d8485fbaf186069f389.json
│ ├── query-3bb5b82d46c55bbfd51319310a3cd065c4b796462a1ddf3c17617ee65ce9961a.json
│ ├── query-3c2c94b9ac0a329b92847d7176a7435f894c5ef3b3b11e3e2ae03a8ec454a6d8.json
│ ├── query-3ca587826f0598e7786c765dcb2fcd6ae08d8aa404f02920307547c769a3f91b.json
│ ├── query-3cfb0a6d9a798f29422bc4bf4a52d3c86c3aae98c173b83c60eb57504a3d2c7c.json
│ ├── query-3d3309a4ae7a88b3f7c9608dd78a1c1dc9b237a37e29722bcd2910bd23f9d873.json
│ ├── query-3fdd28c263edf5c91ab8b770e6106d4890ec4bae2ff3c20f80c40cb4042d9e03.json
│ ├── query-40db0a61665bdb9f7e9d1ce2a6c0eb05703e36e83c87802a72630388588de8cd.json
│ ├── query-4123fa8796e8b56225155f79c2ee4c4dacda5ef51e858ce7dcb9877c7d55bd53.json
│ ├── query-425b0b5ffbe3f1b80aedf15b8df1640c879d8d45883eee8b1e2fbd64eaf283d6.json
│ ├── query-441316f35ca8c24bf78167f9fec48e28c05969bbbbe3d0e3d9e1569a375de476.json
│ ├── query-4476f271f4ea8c83428b4178c43ee2894e380a7c3ae3cbc782f438fabc45de8b.json
│ ├── query-44e4be501db0375fbd8ad8ed923bef887e361fe466ab46bdd6663f6cf97413a8.json
│ ├── query-4f5951e61713d04963524b84648c9ff8c7be05f0089f6fd26fc6e0e0afeae579.json
│ ├── query-4fc0611c846f86be652d42eb8ae21a5da0353fe810856aaabe91d7963329d098.json
│ ├── query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.json
│ ├── query-523087b0101a35abfc70a561272acec7a357491a86901f7927b8242173b5c8c8.json
│ ├── query-52b936c6adf43ec5c7e777ad9379dec30b750fefad73684e552481f709006d04.json
│ ├── query-53d87db17bb9c1d002adc82ba9f2c07ff33ea987a1157d7f6fd2344091b98deb.json
│ ├── query-594af4041e0778476a699536316007f0a264f7d3db9de6326ef8082a2a898995.json
│ ├── query-598e731078fc6417039cc16772eb5bc6c74d24c1a8018a981d2175a483dc699c.json
│ ├── query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json
│ ├── query-5c2d58bfdedbb1be71337a97d5ed5a2921f83dd549507b2834a4d2582d2c361b.json
│ ├── query-5cce5f82c0fb9237f724478e2167243bc772c092910f07b8226431a6dd70a7da.json
│ ├── query-5d408d36790ade4da1ceeb68b4a183aa7d9abc27b0ec42c2a3c5af26ad80f128.json
│ ├── query-5d51aef40f7e0716338b406263240dbc5e4a64cec6f1be10a3676e4f86ce4557.json
│ ├── query-5e0d58f612425e1cf36dfc7f56691cfb8f6def1a3d29645922cb437d11ce62ef.json
│ ├── query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json
│ ├── query-62ed61bcf92fc0c3756f57d0fe05cdd12e70072f5646fe48790ad189a6e96b12.json
│ ├── query-6380f5a6ded2dab8f18de42541c9d77c2f3af512e3f66e1b731ca7c00c9ea8f8.json
│ ├── query-63f0871525ed70bd980223de574d241c0b738cfb7b0ea1fc808f02c0e05b9a2f.json
│ ├── query-66218110851919b05b95b008a17547547d23f6baeeff8a5521b2b246126adc34.json
│ ├── query-6716ec4787f7155af97a4890730f4b3fe564ead8d99f8355ac249f9b39316238.json
│ ├── query-67b381fdcd20f8cfe782d939e56bf94f105cdb23a59fefb846afe8105d91d129.json
│ ├── query-6821f1e02da2c71cdf0566a163c85ff185bf0ba89c770254c9c15880ba76a553.json
│ ├── query-6935572cb23700243fbbd3dc382cdbf56edaadc4aab7855c237bce68e29414c0.json
│ ├── query-6aca3fde126cb1761c0a5ce1fbfa793bdbac4aed137cdf60eb3f277f36d7bf7a.json
│ ├── query-6ca2a2fa10d5334183d98176998d41f36948fe5624e290a32d0b50bc9fb256bf.json
│ ├── query-6cc4a7da11a37413c9951983ee3f30de933cc6357a66c8e10366fde27acaefea.json
│ ├── query-6f5d6d79587d7f7a52c920acccfe338a8c001ea30b722d3a6a1a60259d47913c.json
│ ├── query-6fbcd1c32c638530461c74f8c8195a5b1e1e6f7a389a6a60d889c88c5f47302a.json
│ ├── query-71c15686124c05a4fdef066738eadd0ab17d6af1bfeffc480c8fe52a4e6edab8.json
│ ├── query-74de473589a405c3ab567e72a881869321095e2de497b2c1866c547f939c359c.json
│ ├── query-75dc8578510ae696bf4bcdd780f7cefc666b4436cf53edf30a98dd2ff7926799.json
│ ├── query-770a4979e137ca08c5ea625259221f9d397a56defb8e498eb92da7b3a8af612b.json
│ ├── query-786a59b28265397658aecf0318beeedece2a7f5bea80b9189f3989721035c593.json
│ ├── query-78a191e21a7e7a07eee88ed02c7fbf7035f908b8e4057f7ace1b3b5d433424fe.json
│ ├── query-794c4ced16801b3e98a62eb44c18c14137dd09b11be73442a7f46b2f938b8445.json
│ ├── query-7a4c7da16e99ff3875bdd7e0d189e26c3c1ab49672bace41992aecc446061850.json
│ ├── query-7a86f93afe6e77d4481920b08ed38926446f6473107d68dfcd82ffecddcee890.json
│ ├── query-7aa6e41c80f0b2906d46e73ae05e8e70e133b7edd450b102715b8a487d6055ac.json
│ ├── query-7f6b1db5fd7b4e235f1e04d9d990fa2d47edfed23e692fbab778d387b2861a22.json
│ ├── query-811b6b01de4fdb06ad58185a5c49dfaa31aef8ea30ab3421d4afc13822fc0a9c.json
│ ├── query-816a026ca4c25329b2fb24d59efde9ab71798ff8b31ce7320e02344d4e8b3e42.json
│ ├── query-834638eb3c38eb2c220aa23ac928874d87606b47ef3bb80540614ce2f8453936.json
│ ├── query-842243ea6ca59135ae539060ff37b80791e76aa268a44642ede515f315e80c01.json
│ ├── query-84c224af99f654e2e0ba11a411376794855483eedb0c30b1873ed660ca8d10cd.json
│ ├── query-84e600f13d61c56a45133e7458d5152e68dec72030e5789bf4149a333b6ebdf5.json
│ ├── query-852c729791d5b5eb2dde5772ccbcd24579486e43886d95a11481991fdf28efa8.json
│ ├── query-85e9688218913dee85480932273ff6cf75d29af45638b195e73d73b6048806bf.json
│ ├── query-865fe86df6d04f8abb6d477af13f8a2392a742f4027d99c290f0f156df48be07.json
│ ├── query-87628d6739441a22229d08832d09cbf4598c36204a6885b2e279c848cedcfa75.json
│ ├── query-88516b9a2a424bc7697337d6f16b0d6e94b919597d709f930467423c5b4c0ec2.json
│ ├── query-8cd79c307813a509119230c7673f86471463a06ad9a84764da8d5bb1e6168e1c.json
│ ├── query-90a302af791eeb5c5f60c3f95145e0e73c2a1652c5b547e4118bac1d005300de.json
│ ├── query-90afca9cc8b6d4ca31e8ddf1ce466411b5034639df91b739f5cbe2af0ffb6811.json
│ ├── query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json
│ ├── query-936faba4e3c8fc3685d68f561a2c2d4f386c77cffde6f25702c19758a12669ce.json
│ ├── query-93f6a59171d7cd08d321c777f24255621280fbcf6a2c009afd601eac16c9ba3a.json
│ ├── query-94555a25b986992bd3cfb67bd36ff015d39bdd78ac20d56570306616bf10faf3.json
│ ├── query-95b1b405028c45c074121110d046f42f8229f150c2384671802ee7c1ef9e376d.json
│ ├── query-95b4d7508569cac38c78d21a0a471772d3703e5678ee7ca0cd32d60f5343be91.json
│ ├── query-95c00cd1ce7cdb8f5c8f45d5262d371b1b3c3f903f4eab9c0070d9916e3f8c12.json
│ ├── query-9ab1ff2abc6d51bc5a48a1dc6c294bbfdbe0d5f11a5e2ffc8c1973217b80307b.json
│ ├── query-9b2a8297fa991418b255fc5cb6ad70d695c4dceed20bdc557bfedfc820511126.json
│ ├── query-a18d0c9536dba734715903c8e8f0b7be30d3e7a477c4ddd03533b781df2fb2c7.json
│ ├── query-a3ab30d48e4a10aff1fbfa9dbc5d275a06598610bc471893c8c0febfc36c4737.json
│ ├── query-a3c235bd5df50f80ec93c3d9f6da8db7e17e89788f30c5b6432c582992b6a009.json
│ ├── query-a527a90fcb69c58a5e711555b6ee56e7b92ceabe746279eccd7ae3e9fa918e96.json
│ ├── query-a75bf8b11d832d154716d4618595b117da583a31b51baaf7b84e9ee0d0e3109c.json
│ ├── query-a7c03becdf9954611ac7ad96e1f5bb5e8364f095f1cc4dc23719b218eb032973.json
│ ├── query-aa75996ca6aa12f0bcaa5fb092ac279f8a94aadcc29d0e2b652dc420506835e7.json
│ ├── query-b16f38d563d4d0b35f06978a8b2c76dc5121b0e59f8b5992c9dad05dd101c8ad.json
│ ├── query-b5024138772e13557df973c1c021daf74aab97b5874d7366c478c18ae2e89e58.json
│ ├── query-b509712055858af398fd12ddd1a8c3da54280cf55f0c53f340bddbf4bf09b3e0.json
│ ├── query-ba815f67aab3f302a2982225b72c6113bbd9bc87326e4f0a3b44dadbb5f47920.json
│ ├── query-bbb3c31ea7e9c0a3bdabbc23b2730ee0254f38a7c1457f917c8f37f1e1aefa12.json
│ ├── query-bd34e351ea1adc0d12d4f1cce5a855089b7f39a431dea2903c3e0b9a220640b8.json
│ ├── query-bde2b88ffb1b59362c7ae82369892c79131c175924f95e5d48d75931fb846f41.json
│ ├── query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json
│ ├── query-c335b73ad499b67100e4ce3131a526ddf1745488597c3392ae05e4b398a8715e.json
│ ├── query-c360ec37792d567535ccd2a5011d92c7a201f516e92e204db855167f381c58b1.json
│ ├── query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json
│ ├── query-c81848346ed2ff85f1d5fb8041fba648137a927762b385b97054552c00793a50.json
│ ├── query-c843fb8517b1e364016b85a9e94927673bf8311bfbf723b610d59ecfef3fafce.json
│ ├── query-c8b1f57c5ddce8006a8e137be07f13b455f59657f5fcef67d69905ecec4cb063.json
│ ├── query-ca2a21db67716e3f12b9f9240c1dba1b7cbe0bec1f59ef132fed53942ebad317.json
│ ├── query-cb2375ad0094baefed417645b781f40dcabfbfe4a4738c99bb4efff649e6a0e6.json
│ ├── query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json
│ ├── query-cbf1d3d9fdeb672eacd4b008879787bc1f0b22a554fb249d4e12a665d9767cbd.json
│ ├── query-cce2abeed3399ad0b8867901735c5883c8d35fa82d6e0596c56eaf02c36a7e4f.json
│ ├── query-d0a24b554fe420d7ebf856ae7f1525aff3695fc97e2f43041dc54a4e62a88746.json
│ ├── query-d0e5f5097b35a15f19e9e7faf2c62336d5f130e939331e84c7d834f6028ea673.json
│ ├── query-d1ab621e0b6e8bc24f8fa8cbb975ae3b7f9f366cac02d66b5291d7207295ca29.json
│ ├── query-d1f845717b19636e61d1d96d7a5629754f3ded9bda9116953bd1b40bd80551ae.json
│ ├── query-d2e87c077e5702cd57a88e23e1eabe4b0badd98ef99da1b185bffa8d5c9ed298.json
│ ├── query-d366aca6b187f086e5a8281081adec190bbb3cd5256c5a77ed321b99cd34bbbc.json
│ ├── query-d388782f755f0b164ef36c168af142baeb9bbd3cc2b8b7cd736b346580be8790.json
│ ├── query-d492c20dec54c7335744dcc139b95f30a80f06d9fd48de644630adf183e1ac34.json
│ ├── query-d4fa2c5f3c455be4694235009e82efdd99d366e3b0374f78efec8dd560f88d95.json
│ ├── query-d61523de25986b47a382d36a1f18e590420f1b1285d024f5554cc02c375d6476.json
│ ├── query-d756ec630d5b75dd0dc7df2339847e28bdf07a790e65fd40a64d7f9022f430bd.json
│ ├── query-d84ab58e78653688e7c392ffad00d6e039be5ccb9c5b99b7088cc41cfe981873.json
│ ├── query-d90e7efaca54b92de038b6eef20a7bd36be747dc38f7943fe299799c623038be.json
│ ├── query-d921f52e4bc3fef72c810e19455a2fa4fbd52f5a1f3a1838b146d001eadabd47.json
│ ├── query-da1434fe116cbb48bc5aac0b6905dd748f096bf78d3cdcfea3a576b4aaeba5fc.json
│ ├── query-dbc31936b3e79632f9c8bae449182274d9d75766bd9a5c383b96bd60e9c5c866.json
│ ├── query-dc600fc160b55be22fb77e285fd7e5e646ef359fdbca9b62c6aefede5ebff606.json
│ ├── query-e219696c80f1d4c38260ebeb50ec78e344975eef6760951dbf6201c01b8ceef0.json
│ ├── query-e2b4d66736962d1e3d0b9cf687ce5c5e653b465462f53433a28cf314e5c87d6c.json
│ ├── query-e38e66d89806471f358b317778de35a68da4b9e6ca6e4b6a7c437ca7493b858c.json
│ ├── query-e6159a03f1521b44de59858cd95c48e62cabefba6cac629c104eec75d2868bf3.json
│ ├── query-e6a0e771ffacfdec95ef8c36de769448384fda4350aa630becebd0e5add632f4.json
│ ├── query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json
│ ├── query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json
│ ├── query-ed9bce7f35c4dd8d41427bc56db67adf175044a8d31149b3745ceb8f9b3c82fa.json
│ ├── query-ef947984b00fdd32271e7e76d8b5d035cd4ca211b600787fda18d62a34b4c04b.json
│ ├── query-f05042dd22f862603e63f63d47b93e579545c79cabe15d32304a47ca7665a55f.json
│ ├── query-f18d6e075a522b0ce5935351dd57ab0dda4d8b4ed3881c2ad0bc09c07c43e6fe.json
│ ├── query-f409626142553d4496d15b5dfa7da8a5a238da86f56c930c09a261f2efa1f55c.json
│ ├── query-f54ced785b4fdd22c9236b566996d5d9d4a8c91902e4029fe8f8f30f3af39b39.json
│ ├── query-f58a2f05efbda0698d27d83be5c6816fc46e3de33f926c6343bcbfa90a387b07.json
│ ├── query-f68cc2042d6aa78feeb33640e9ef13f46c5e10ee269ea0bd965b0e57dee6cf94.json
│ ├── query-f78c2c56568dcee0b93e759ee517fb87d6d115a02856a756d481ea4c863c0327.json
│ ├── query-f9c28d0fa124ef543259c6869d7c517deabda3af9a67c6e59d8e15c0245c83a0.json
│ ├── query-fa92aff963d9a0c69fb203f76f54728c67d52a68eada59ba3bd445c4b8aeceef.json
│ ├── query-faf37892741717680e9a8d8e7d8decaba571d0dd129b57334aad7c63e2a2ef59.json
│ ├── query-fb21df2827de97055cdc1c493b079b29667f75b18169c909c4c8341697fd0105.json
│ ├── query-fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f.json
│ └── query-fffe6f01abf0e5d8649a49b5793ccb92a9f823f07c363341357ea74bf4f4a16d.json
├── Cargo.toml
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── SELF_HOST_LICENSE_AGREEMENT.md
├── admin_frontend/
│ ├── Cargo.toml
│ ├── Dockerfile
│ ├── README.md
│ ├── assets/
│ │ ├── README.md
│ │ ├── apple/
│ │ │ └── logo.html
│ │ ├── base.css
│ │ ├── discord/
│ │ │ ├── README.md
│ │ │ └── logo.html
│ │ ├── github/
│ │ │ ├── README.md
│ │ │ └── logo.html
│ │ ├── google/
│ │ │ ├── README.md
│ │ │ ├── logo.css
│ │ │ └── logo.html
│ │ ├── home.css
│ │ ├── login.css
│ │ ├── logo.html
│ │ ├── message.css
│ │ ├── minio/
│ │ │ └── logo.html
│ │ ├── navigate.css
│ │ ├── postgres/
│ │ │ └── logo.html
│ │ ├── sidebar.css
│ │ └── top_menu_bar.css
│ ├── dev.env
│ ├── src/
│ │ ├── askama_entities.rs
│ │ ├── config.rs
│ │ ├── error.rs
│ │ ├── ext/
│ │ │ ├── api.rs
│ │ │ ├── entities.rs
│ │ │ ├── error.rs
│ │ │ └── mod.rs
│ │ ├── lib.rs
│ │ ├── main.rs
│ │ ├── models.rs
│ │ ├── response.rs
│ │ ├── session.rs
│ │ ├── templates.rs
│ │ ├── web_api.rs
│ │ └── web_app.rs
│ ├── templates/
│ │ ├── components/
│ │ │ ├── admin_navigate.html
│ │ │ ├── admin_sidebar.html
│ │ │ ├── admin_sso_create.html
│ │ │ ├── admin_sso_detail.html
│ │ │ ├── admin_sso_list.html
│ │ │ ├── admin_top_menu_bar.html
│ │ │ ├── admin_user_details.html
│ │ │ ├── admin_users.html
│ │ │ ├── appflowy_banner.html
│ │ │ ├── change_password.html
│ │ │ ├── create_user.html
│ │ │ ├── invite.html
│ │ │ ├── message.html
│ │ │ ├── navigate.html
│ │ │ ├── shared_workspaces.html
│ │ │ ├── sidebar.html
│ │ │ ├── top_menu_bar.html
│ │ │ ├── user_details.html
│ │ │ ├── user_usage.html
│ │ │ └── workspace_usage.html
│ │ ├── layouts/
│ │ │ └── base.html
│ │ └── pages/
│ │ ├── admin_home.html
│ │ ├── home.html
│ │ ├── login.html
│ │ ├── login_callback.html
│ │ ├── login_v2.html
│ │ ├── open_appflowy_or_download.html
│ │ ├── payment_success_redirect.html
│ │ └── redirect.html
│ └── tests/
│ ├── main.rs
│ ├── oauth/
│ │ └── mod.rs
│ └── utils/
│ ├── mod.rs
│ └── test_config.rs
├── assets/
│ └── mailer_templates/
│ ├── build_production/
│ │ ├── access_request.html
│ │ ├── access_request_approved_notification.html
│ │ ├── confirmation.html
│ │ ├── import_data_fail.html
│ │ ├── import_data_success.html
│ │ ├── magic_link.html
│ │ ├── page_mention_notification.html
│ │ ├── recovery.html
│ │ └── workspace_invitation.html
│ └── confirmation.html
├── deny.toml
├── deploy.env
├── dev.env
├── doc/
│ ├── AUTHENTICATION.md
│ ├── CONTRIBUTING.md
│ ├── DEPLOYMENT.md
│ ├── EC2_SELF_HOST_GUIDE.md
│ ├── GUIDE.md
│ ├── LOCAL_BUILD.md
│ ├── OKTA_SAML.md
│ └── README.md
├── docker/
│ ├── gotrue/
│ │ ├── Dockerfile
│ │ └── start.sh
│ ├── pgadmin/
│ │ └── servers.json
│ └── web/
│ ├── Dockerfile
│ └── nginx.conf
├── docker-compose-ci.yml
├── docker-compose-dev.yml
├── docker-compose-extras.yml
├── docker-compose.yml
├── email_template/
│ ├── .editorconfig
│ ├── .gitignore
│ ├── .npmrc
│ ├── LICENSE
│ ├── README.md
│ ├── config.js
│ ├── config.production.js
│ ├── package.json
│ ├── src/
│ │ ├── components/
│ │ │ ├── button.html
│ │ │ ├── divider.html
│ │ │ ├── footer.html
│ │ │ ├── spacer.html
│ │ │ ├── v-fill.html
│ │ │ └── v-image.html
│ │ ├── css/
│ │ │ ├── resets.css
│ │ │ ├── tailwind.css
│ │ │ └── utilities.css
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── templates/
│ │ ├── access_request.html
│ │ ├── access_request_approved_notification.html
│ │ ├── confirmation.html
│ │ ├── import_data_fail.html
│ │ ├── import_data_success.html
│ │ ├── magic_link.html
│ │ ├── page_mention_notification.html
│ │ ├── recovery.html
│ │ └── workspace_invitation.html
│ └── tailwind.config.js
├── env.deploy.secret.example
├── env.dev.secret.example
├── external_proxy_config/
│ └── nginx/
│ └── appflowy.site.conf
├── libs/
│ ├── access-control/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── act.rs
│ │ ├── casbin/
│ │ │ ├── access.rs
│ │ │ ├── adapter.rs
│ │ │ ├── collab.rs
│ │ │ ├── enforcer.rs
│ │ │ ├── enforcer_v2.rs
│ │ │ ├── mod.rs
│ │ │ ├── performance_comparison_tests.rs
│ │ │ ├── redis_cache.rs
│ │ │ ├── util.rs
│ │ │ └── workspace.rs
│ │ ├── collab.rs
│ │ ├── entity.rs
│ │ ├── lib.rs
│ │ ├── metrics.rs
│ │ ├── noops/
│ │ │ ├── collab.rs
│ │ │ ├── mod.rs
│ │ │ └── workspace.rs
│ │ ├── request.rs
│ │ └── workspace.rs
│ ├── app-error/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── gotrue.rs
│ │ └── lib.rs
│ ├── appflowy-ai-client/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── client.rs
│ │ │ ├── dto.rs
│ │ │ ├── error.rs
│ │ │ └── lib.rs
│ │ └── tests/
│ │ ├── chat_test/
│ │ │ ├── completion_test.rs
│ │ │ ├── context_test.rs
│ │ │ ├── mod.rs
│ │ │ ├── model_config_test.rs
│ │ │ └── qa_test.rs
│ │ ├── index_test/
│ │ │ ├── index_search_test.rs
│ │ │ └── mod.rs
│ │ ├── main.rs
│ │ └── row_test/
│ │ ├── mod.rs
│ │ ├── summarize_test.rs
│ │ └── translate_test.rs
│ ├── appflowy-proto/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── proto/
│ │ │ ├── collab.proto
│ │ │ ├── messages.proto
│ │ │ └── notification.proto
│ │ └── src/
│ │ ├── client_message.rs
│ │ ├── lib.rs
│ │ ├── pb/
│ │ │ ├── collab.rs
│ │ │ ├── messages.rs
│ │ │ ├── mod.rs
│ │ │ └── notification.rs
│ │ ├── server_message.rs
│ │ └── shared.rs
│ ├── client-api/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── collab_sync/
│ │ │ ├── collab_sink.rs
│ │ │ ├── collab_stream.rs
│ │ │ ├── error.rs
│ │ │ ├── mod.rs
│ │ │ ├── plugin.rs
│ │ │ └── sync_control.rs
│ │ ├── http.rs
│ │ ├── http_access_request.rs
│ │ ├── http_ai.rs
│ │ ├── http_billing.rs
│ │ ├── http_blob.rs
│ │ ├── http_chat.rs
│ │ ├── http_collab.rs
│ │ ├── http_file.rs
│ │ ├── http_guest.rs
│ │ ├── http_member.rs
│ │ ├── http_person.rs
│ │ ├── http_publish.rs
│ │ ├── http_quick_note.rs
│ │ ├── http_search.rs
│ │ ├── http_settings.rs
│ │ ├── http_template.rs
│ │ ├── http_view.rs
│ │ ├── lib.rs
│ │ ├── log.rs
│ │ ├── notify.rs
│ │ ├── ping.rs
│ │ ├── retry.rs
│ │ ├── v2/
│ │ │ ├── PROTOCOL.md
│ │ │ ├── actor.rs
│ │ │ ├── compactor.rs
│ │ │ ├── conn_retry.rs
│ │ │ ├── controller.rs
│ │ │ ├── db.rs
│ │ │ └── mod.rs
│ │ └── ws/
│ │ ├── client.rs
│ │ ├── error.rs
│ │ ├── handler.rs
│ │ ├── mod.rs
│ │ ├── msg_queue.rs
│ │ └── state.rs
│ ├── client-api-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── id.rs
│ │ └── lib.rs
│ ├── client-api-test/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── assertion_utils.rs
│ │ ├── async_utils.rs
│ │ ├── client.rs
│ │ ├── database_util.rs
│ │ ├── lib.rs
│ │ ├── log.rs
│ │ ├── test_client.rs
│ │ ├── test_client_config.rs
│ │ ├── test_client_v2.rs
│ │ ├── user.rs
│ │ └── workspace_ops.rs
│ ├── client-websocket/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── error.rs
│ │ ├── lib.rs
│ │ ├── message.rs
│ │ ├── native.rs
│ │ └── web.rs
│ ├── collab-rt-entity/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── migration/
│ │ │ ├── 0147/
│ │ │ │ ├── client_init
│ │ │ │ └── collab_update
│ │ │ └── 0149/
│ │ │ ├── client_collab_v1
│ │ │ ├── client_init
│ │ │ └── collab_update
│ │ ├── proto/
│ │ │ ├── collab.proto
│ │ │ └── realtime.proto
│ │ ├── src/
│ │ │ ├── client_message.rs
│ │ │ ├── collab_proto.rs
│ │ │ ├── lib.rs
│ │ │ ├── message.rs
│ │ │ ├── realtime_proto.rs
│ │ │ ├── server_message.rs
│ │ │ └── user.rs
│ │ └── tests/
│ │ ├── main.rs
│ │ └── serde_test.rs
│ ├── collab-rt-protocol/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── data_validation.rs
│ │ ├── lib.rs
│ │ ├── message.rs
│ │ └── protocol.rs
│ ├── collab-stream/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── awareness_gossip.rs
│ │ ├── client.rs
│ │ ├── collab_update_sink.rs
│ │ ├── error.rs
│ │ ├── lease.rs
│ │ ├── lib.rs
│ │ ├── metrics.rs
│ │ ├── model.rs
│ │ └── stream_router.rs
│ ├── database/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── access_request.rs
│ │ ├── chat/
│ │ │ ├── chat_ops.rs
│ │ │ └── mod.rs
│ │ ├── collab/
│ │ │ ├── collab_db_ops.rs
│ │ │ ├── collab_storage.rs
│ │ │ └── mod.rs
│ │ ├── file/
│ │ │ ├── file_storage.rs
│ │ │ ├── mod.rs
│ │ │ ├── s3_client_impl.rs
│ │ │ └── utils.rs
│ │ ├── history/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── index/
│ │ │ ├── collab_embeddings_ops.rs
│ │ │ ├── mod.rs
│ │ │ └── search_ops.rs
│ │ ├── lib.rs
│ │ ├── listener.rs
│ │ ├── notification.rs
│ │ ├── pg_row.rs
│ │ ├── publish.rs
│ │ ├── quick_note.rs
│ │ ├── resource_usage.rs
│ │ ├── template.rs
│ │ ├── user.rs
│ │ └── workspace.rs
│ ├── database-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── dto.rs
│ │ ├── error.rs
│ │ ├── file_dto.rs
│ │ └── lib.rs
│ ├── gotrue/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── api.rs
│ │ ├── grant.rs
│ │ ├── lib.rs
│ │ └── params.rs
│ ├── gotrue-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── dto.rs
│ │ ├── gotrue_jwt.rs
│ │ ├── lib.rs
│ │ └── sso.rs
│ ├── indexer/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── collab_indexer/
│ │ │ ├── document_indexer.rs
│ │ │ ├── mod.rs
│ │ │ └── provider.rs
│ │ ├── entity.rs
│ │ ├── error.rs
│ │ ├── lib.rs
│ │ ├── metrics.rs
│ │ ├── queue.rs
│ │ ├── scheduler.rs
│ │ ├── unindexed_workspace.rs
│ │ └── vector/
│ │ ├── embedder.rs
│ │ ├── mod.rs
│ │ └── open_ai.rs
│ ├── infra/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── env_util.rs
│ │ ├── file_util.rs
│ │ ├── lib.rs
│ │ ├── reqwest.rs
│ │ ├── thread_pool.rs
│ │ ├── tokio_runtime.rs
│ │ └── validate.rs
│ ├── llm-client/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── chat.rs
│ │ └── lib.rs
│ ├── mailer/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── config.rs
│ │ ├── lib.rs
│ │ └── sender.rs
│ ├── shared-entity/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── dto/
│ │ │ ├── access_request_dto.rs
│ │ │ ├── ai_dto.rs
│ │ │ ├── auth_dto.rs
│ │ │ ├── billing_dto.rs
│ │ │ ├── chat_dto.rs
│ │ │ ├── file_dto.rs
│ │ │ ├── guest_dto.rs
│ │ │ ├── history_dto.rs
│ │ │ ├── import_dto.rs
│ │ │ ├── mod.rs
│ │ │ ├── publish_dto.rs
│ │ │ ├── search_dto.rs
│ │ │ ├── server_info_dto.rs
│ │ │ └── workspace_dto.rs
│ │ ├── lib.rs
│ │ ├── request.rs
│ │ ├── response.rs
│ │ ├── response_actix.rs
│ │ └── response_stream.rs
│ ├── snowflake/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── lib.rs
│ ├── tonic-proto/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── proto/
│ │ │ └── history.proto
│ │ └── src/
│ │ └── lib.rs
│ └── workspace-template/
│ ├── Cargo.toml
│ ├── assets/
│ │ ├── default_space.json
│ │ ├── desktop_guide.json
│ │ ├── getting_started.json
│ │ ├── inbox.json
│ │ ├── initial_document.json
│ │ ├── mobile_guide.json
│ │ ├── to-dos.json
│ │ ├── vault_get_started.json
│ │ └── web_guide.json
│ └── src/
│ ├── database/
│ │ ├── database_collab.rs
│ │ └── mod.rs
│ ├── document/
│ │ ├── getting_started.rs
│ │ ├── mod.rs
│ │ ├── parser.rs
│ │ ├── util.rs
│ │ └── vault_template.rs
│ ├── hierarchy_builder.rs
│ ├── lib.rs
│ └── tests/
│ ├── getting_started_tests.rs
│ └── mod.rs
├── migrations/
│ ├── 20230312043024_user.sql
│ ├── 20230906101032_permission.sql
│ ├── 20230906101223_workspace.sql
│ ├── 20230906101555_user_profile.sql
│ ├── 20230906102652_collab.sql
│ ├── 20230926145155_blob_storage.sql
│ ├── 20231113074418_user_change.sql
│ ├── 20231130150001_user_id_foreign_key.sql
│ ├── 20240123140707_workspace_owner_trigger.sql
│ ├── 20240227000000_workspace_icon.sql
│ ├── 20240303003711_collab_member_timestamp.sql
│ ├── 20240304173938_workspace_invitation.sql
│ ├── 20240306110000_workspace_invitation_2.sql
│ ├── 20240412083446_history_init.sql
│ ├── 20240510024506_chat_message.sql
│ ├── 20240529054858_workspace_add_token_usage.sql
│ ├── 20240531031836_chat_message_meta.sql
│ ├── 20240604090043_add_workspace_settings.sql
│ ├── 20240613112820_publish_collab.sql
│ ├── 20240614171931_collab_embeddings.sql
│ ├── 20240617135926_af_workspace_foreign_key_indices.sql
│ ├── 20240618035048_af_workspace_ai_usage.sql
│ ├── 20240618173348_publish_collab_2.sql
│ ├── 20240621105148_publish_collab_3.sql
│ ├── 20240626184736_publish_collab_4.sql
│ ├── 20240627525836_publish_collab_5.sql
│ ├── 20240629035230_publish_collab_6.sql
│ ├── 20240630010030_workspace_member_foreign_key.sql
│ ├── 20240723090305_publish_view_comment.sql
│ ├── 20240725065111_publish_view_reaction.sql
│ ├── 20240729065107_publish_view_reaction_2.sql
│ ├── 20240806054557_template_category.sql
│ ├── 20240806103039_template_creator.sql
│ ├── 20240813040905_template.sql
│ ├── 20240910100000_af_collab_embeddings_indices.sql
│ ├── 20240924045045_access_request.sql
│ ├── 20240930135712_import_data.sql
│ ├── 20241014153023_default_published_view.sql
│ ├── 20241025135939_import_task_add_uid_column.sql
│ ├── 20241031094508_af_uuid_indexes.sql
│ ├── 20241101063559_af_workspace_namespace.sql
│ ├── 20241108155841_unpublished_collab.sql
│ ├── 20241124212630_af_collab_updated_at.sql
│ ├── 20241126175909_af_collab_stored_procedures.sql
│ ├── 20241211034455_stop_writing_to_collab_member.sql
│ ├── 20241216080018_quick_notes.sql
│ ├── 20241218090459_collab_embedding_add_metadata.sql
│ ├── 20241222152427_collab_add_indexed_at.sql
│ ├── 20241230064618_collab_embedding_add_fragment_index.sql
│ ├── 20250109142738_blob_metadata_add_file_status.sql
│ ├── 20250113091708_publish_options.sql
│ ├── 20250217080054_drop_collab_member_trigger.sql
│ ├── 20250226091933_blob_metadata_add_file_source.sql
│ ├── 20250305082546_workspace_delete_trigger.sql
│ ├── 20250318120849_departition_af_collab.sql
│ ├── 20250403021559_workspace_invite_code.sql
│ ├── 20250405092732_af_collab_embeddings_upsert.sql
│ ├── 20250414074846_drop_af_collab_set_updated_at_trigger.sql
│ ├── 20250703030740_workspace_member_profile.sql
│ ├── 20250714060306_page_mention.sql
│ ├── 20250718033221_page_mention_notification.sql
│ ├── 20250721084910_page_mention_view_name.sql
│ ├── 20250723024109_workspace_profile_custom_image_url.sql
│ └── 20250723072011_page_mention_notification_status.sql
├── nginx/
│ ├── nginx.conf
│ └── ssl/
│ ├── certificate.crt
│ └── private_key.key
├── rust-toolchain.toml
├── rustfmt.toml
├── script/
│ ├── client_api_deps_check.sh
│ ├── code_gen.sh
│ ├── diagnose_appflowy.sh
│ ├── generate_env.sh
│ ├── lib/
│ │ ├── README.md
│ │ ├── check_config.sh
│ │ ├── check_containers.sh
│ │ ├── check_functional.sh
│ │ ├── check_health.sh
│ │ ├── check_logs.sh
│ │ ├── report.sh
│ │ └── utils.sh
│ ├── redis/
│ │ ├── remove_redis_stream_range.sh
│ │ └── show_redis_stream_values.sh
│ ├── reset-password-interactive.sh
│ ├── run_ci_server.sh
│ └── run_local_server.sh
├── services/
│ ├── appflowy-collaborate/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── actix_ws/
│ │ │ │ ├── client/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── rt_client.rs
│ │ │ │ ├── entities.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── server/
│ │ │ │ ├── mod.rs
│ │ │ │ └── rt_actor.rs
│ │ │ ├── client/
│ │ │ │ ├── client_msg_router.rs
│ │ │ │ └── mod.rs
│ │ │ ├── collab/
│ │ │ │ ├── cache/
│ │ │ │ │ ├── collab_cache.rs
│ │ │ │ │ ├── disk_cache.rs
│ │ │ │ │ ├── mem_cache.rs
│ │ │ │ │ └── mod.rs
│ │ │ │ ├── collab_manager.rs
│ │ │ │ ├── collab_store.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── snapshot_scheduler.rs
│ │ │ ├── compression.rs
│ │ │ ├── config.rs
│ │ │ ├── connect_state.rs
│ │ │ ├── error.rs
│ │ │ ├── group/
│ │ │ │ ├── cmd.rs
│ │ │ │ ├── group_init.rs
│ │ │ │ ├── manager.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── null_sender.rs
│ │ │ │ └── state.rs
│ │ │ ├── lib.rs
│ │ │ ├── metrics.rs
│ │ │ ├── permission.rs
│ │ │ ├── rt_server.rs
│ │ │ ├── snapshot/
│ │ │ │ ├── mod.rs
│ │ │ │ └── snapshot_control.rs
│ │ │ ├── util/
│ │ │ │ ├── channel_ext.rs
│ │ │ │ └── mod.rs
│ │ │ └── ws2/
│ │ │ ├── actors/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── server.rs
│ │ │ │ ├── session.rs
│ │ │ │ └── workspace.rs
│ │ │ └── mod.rs
│ │ └── tests/
│ │ ├── indexer_test.rs
│ │ └── main.rs
│ └── appflowy-worker/
│ ├── Cargo.toml
│ ├── Dockerfile
│ ├── README.md
│ ├── deploy.env
│ ├── src/
│ │ ├── application.rs
│ │ ├── config.rs
│ │ ├── error.rs
│ │ ├── import_worker/
│ │ │ ├── email_notifier.rs
│ │ │ ├── mod.rs
│ │ │ ├── report.rs
│ │ │ └── worker.rs
│ │ ├── indexer_worker/
│ │ │ ├── mod.rs
│ │ │ └── worker.rs
│ │ ├── lib.rs
│ │ ├── mailer.rs
│ │ ├── main.rs
│ │ ├── metric.rs
│ │ └── s3_client.rs
│ └── tests/
│ ├── import_test.rs
│ └── main.rs
├── src/
│ ├── api/
│ │ ├── access_request.rs
│ │ ├── ai.rs
│ │ ├── chat.rs
│ │ ├── data_import.rs
│ │ ├── file_storage.rs
│ │ ├── guest.rs
│ │ ├── invite_code.rs
│ │ ├── metrics.rs
│ │ ├── mod.rs
│ │ ├── search.rs
│ │ ├── server_info.rs
│ │ ├── template.rs
│ │ ├── user.rs
│ │ ├── util.rs
│ │ ├── workspace.rs
│ │ └── ws.rs
│ ├── application.rs
│ ├── biz/
│ │ ├── access_request/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── authentication/
│ │ │ ├── jwt.rs
│ │ │ └── mod.rs
│ │ ├── chat/
│ │ │ ├── metrics.rs
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── collab/
│ │ │ ├── database.rs
│ │ │ ├── folder_view.rs
│ │ │ ├── mod.rs
│ │ │ ├── ops.rs
│ │ │ ├── publish_outline.rs
│ │ │ └── utils.rs
│ │ ├── data_import/
│ │ │ └── mod.rs
│ │ ├── mod.rs
│ │ ├── notification/
│ │ │ ├── email.rs
│ │ │ └── mod.rs
│ │ ├── pg_listener.rs
│ │ ├── search/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── template/
│ │ │ ├── mod.rs
│ │ │ └── ops.rs
│ │ ├── user/
│ │ │ ├── image_asset.rs
│ │ │ ├── mod.rs
│ │ │ ├── user_delete.rs
│ │ │ ├── user_info.rs
│ │ │ ├── user_init.rs
│ │ │ └── user_verify.rs
│ │ └── workspace/
│ │ ├── duplicate.rs
│ │ ├── invite.rs
│ │ ├── mod.rs
│ │ ├── ops.rs
│ │ ├── page_view.rs
│ │ ├── publish.rs
│ │ ├── publish_dup.rs
│ │ └── quick_note.rs
│ ├── config/
│ │ ├── config.rs
│ │ └── mod.rs
│ ├── domain/
│ │ ├── compression.rs
│ │ └── mod.rs
│ ├── lib.rs
│ ├── mailer.rs
│ ├── main.rs
│ ├── middleware/
│ │ ├── metrics_mw.rs
│ │ ├── mod.rs
│ │ └── request_id.rs
│ ├── state.rs
│ └── telemetry.rs
├── tests/
│ ├── ai_test/
│ │ ├── asset/
│ │ │ └── my_profile.txt
│ │ ├── chat_test.rs
│ │ ├── chat_with_selected_doc_test.rs
│ │ ├── completion_test.rs
│ │ ├── mod.rs
│ │ ├── summarize_row.rs
│ │ ├── summary_search_test.rs
│ │ └── util.rs
│ ├── collab/
│ │ ├── awareness_test.rs
│ │ ├── collab_curd_test.rs
│ │ ├── collab_embedding_test.rs
│ │ ├── database_crud.rs
│ │ ├── missing_update_test.rs
│ │ ├── mod.rs
│ │ ├── multi_devices_edit.rs
│ │ ├── permission_test.rs
│ │ ├── single_device_edit.rs
│ │ ├── storage_test.rs
│ │ ├── stress_test.rs
│ │ ├── util.rs
│ │ └── web_edit.rs
│ ├── collab_history/
│ │ ├── document_history.rs
│ │ └── mod.rs
│ ├── file_test/
│ │ ├── delete_dir_test.rs
│ │ ├── mod.rs
│ │ ├── multiple_part_test.rs
│ │ ├── put_and_get.rs
│ │ └── usage.rs
│ ├── gotrue/
│ │ ├── admin.rs
│ │ ├── health.rs
│ │ ├── mod.rs
│ │ └── settings.rs
│ ├── main.rs
│ ├── search/
│ │ ├── asset/
│ │ │ ├── appflowy_values.md
│ │ │ ├── kathryn_tennis_story.md
│ │ │ └── the_five_dysfunctions_of_a_team.md
│ │ ├── document_search.rs
│ │ └── mod.rs
│ ├── server_info/
│ │ ├── info.rs
│ │ └── mod.rs
│ ├── sql_test/
│ │ ├── chat_test.rs
│ │ ├── collab_embed_test.rs
│ │ ├── history_test.rs
│ │ ├── mod.rs
│ │ ├── util.rs
│ │ └── workspace_test.rs
│ ├── user/
│ │ ├── delete.rs
│ │ ├── image.rs
│ │ ├── mod.rs
│ │ ├── refresh.rs
│ │ ├── sign_in.rs
│ │ ├── sign_out.rs
│ │ ├── sign_up.rs
│ │ ├── update.rs
│ │ └── user_awareness_test.rs
│ ├── websocket/
│ │ ├── actor_test.rs
│ │ ├── conn_test.rs
│ │ └── mod.rs
│ ├── workspace/
│ │ ├── access_request.rs
│ │ ├── asset/
│ │ │ └── read_me.json
│ │ ├── default_user_workspace.rs
│ │ ├── edit_workspace.rs
│ │ ├── import_test.rs
│ │ ├── invitation_crud.rs
│ │ ├── join_workspace.rs
│ │ ├── member_crud.rs
│ │ ├── mod.rs
│ │ ├── page_view.rs
│ │ ├── person.rs
│ │ ├── publish.rs
│ │ ├── published_data.rs
│ │ ├── quick_note.rs
│ │ ├── template.rs
│ │ ├── workspace_crud.rs
│ │ ├── workspace_folder.rs
│ │ └── workspace_settings.rs
│ └── yrs_version/
│ ├── README.md
│ ├── document_test.rs
│ ├── files/
│ │ ├── folder_encode_collab_0172
│ │ └── get_started_encode_collab_0172
│ ├── folder_test.rs
│ ├── mod.rs
│ └── util.rs
└── xtask/
├── Cargo.toml
└── src/
└── main.rs
Showing preview only (428K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4805 symbols across 391 files)
FILE: admin_frontend/src/askama_entities.rs
type WorkspaceWithMembers (line 5) | pub struct WorkspaceWithMembers {
FILE: admin_frontend/src/config.rs
type Config (line 4) | pub struct Config {
method from_env (line 22) | pub fn from_env() -> Result<Config, anyhow::Error> {
type OAuthConfig (line 15) | pub struct OAuthConfig {
function get_or_default (line 51) | fn get_or_default(key: &str, default: &str) -> String {
function get_optional (line 61) | fn get_optional(key: &str) -> Option<String> {
FILE: admin_frontend/src/error.rs
type WebApiError (line 10) | pub struct WebApiError<'a> {
function new (line 16) | pub fn new<S>(status_code: status::StatusCode, payload: S) -> Self
method into_response (line 28) | fn into_response(self) -> axum::response::Response {
function from (line 36) | fn from(v: gotrue_entity::error::GoTrueError) -> Self {
function from (line 42) | fn from(v: redis::RedisError) -> Self {
type WebAppError (line 47) | pub enum WebAppError {
method from (line 79) | fn from(v: redis::RedisError) -> Self {
method from (line 85) | fn from(v: askama::Error) -> Self {
method from (line 91) | fn from(v: ext::error::Error) -> Self {
method into_response (line 56) | fn into_response(self) -> axum::response::Response {
function from (line 97) | fn from(v: ext::error::Error) -> Self {
FILE: admin_frontend/src/ext/api.rs
function get_user_owned_workspaces (line 14) | pub async fn get_user_owned_workspaces(
function get_user_workspaces (line 27) | pub async fn get_user_workspaces(
function get_user_workspace_limit (line 41) | pub async fn get_user_workspace_limit(
function get_user_workspace_usages (line 55) | pub async fn get_user_workspace_usages(
function get_workspace_members (line 95) | pub async fn get_workspace_members(
function get_pending_workspace_invitations (line 113) | pub async fn get_pending_workspace_invitations(
function get_accepted_workspace_invitations (line 130) | pub async fn get_accepted_workspace_invitations(
function get_user_workspace_blob_usage (line 147) | async fn get_user_workspace_blob_usage(
function get_user_workspace_doc_usage (line 165) | async fn get_user_workspace_doc_usage(
function get_user_profile (line 184) | pub async fn get_user_profile(
function invite_user_to_workspace (line 198) | pub async fn invite_user_to_workspace(
function leave_workspace (line 226) | pub async fn leave_workspace(
function accept_workspace_invitation (line 246) | pub async fn accept_workspace_invitation(
function verify_token_cloud (line 266) | pub async fn verify_token_cloud(
function delete_current_user (line 284) | pub async fn delete_current_user(
FILE: admin_frontend/src/ext/entities.rs
type JsonResponse (line 6) | pub struct JsonResponse<T> {
type UserUsageLimit (line 12) | pub struct UserUsageLimit {
type WorkspaceUsageLimits (line 17) | pub struct WorkspaceUsageLimits {
type WorkspaceMember (line 26) | pub struct WorkspaceMember {
type WorkspaceBlobUsage (line 33) | pub struct WorkspaceBlobUsage {
type WorkspaceDocUsage (line 38) | pub struct WorkspaceDocUsage {
type UserProfile (line 44) | pub struct UserProfile {
FILE: admin_frontend/src/ext/error.rs
type Error (line 6) | pub enum Error {
method from (line 14) | fn from(err: reqwest::Error) -> Self {
method into_response (line 20) | fn into_response(self) -> Response {
FILE: admin_frontend/src/ext/mod.rs
function from_json_response (line 9) | async fn from_json_response<T>(resp: reqwest::Response) -> Result<T, err...
function check_response (line 32) | async fn check_response(resp: reqwest::Response) -> Result<(), error::Er...
FILE: admin_frontend/src/main.rs
function main (line 21) | async fn main() {
FILE: admin_frontend/src/models.rs
type AppState (line 6) | pub struct AppState {
method prepend_with_path_prefix (line 14) | pub fn prepend_with_path_prefix(&self, path: &str) -> String {
type WebApiLoginRequest (line 20) | pub struct WebApiLoginRequest {
type WebApiPutUserRequest (line 27) | pub struct WebApiPutUserRequest {
type WebApiChangePasswordRequest (line 32) | pub struct WebApiChangePasswordRequest {
type WebApiAdminCreateUserRequest (line 38) | pub struct WebApiAdminCreateUserRequest {
type WebApiInviteUserRequest (line 45) | pub struct WebApiInviteUserRequest {
type WebApiCreateSSOProviderRequest (line 50) | pub struct WebApiCreateSSOProviderRequest {
type WebAppOAuthLoginRequest (line 57) | pub struct WebAppOAuthLoginRequest {
type OAuthLoginAction (line 83) | pub enum OAuthLoginAction {
type OAuthRedirect (line 88) | pub struct OAuthRedirect {
type OAuthRedirectToken (line 99) | pub struct OAuthRedirectToken {
type LoginParams (line 109) | pub struct LoginParams {
FILE: admin_frontend/src/response.rs
type WebApiResponse (line 6) | pub struct WebApiResponse<T>
function new (line 19) | pub fn new(message: Cow<'static, str>, data: T) -> Self {
method into_response (line 32) | fn into_response(self) -> axum::response::Response {
function from (line 41) | fn from(data: T) -> Self {
function from_str (line 47) | pub fn from_str(message: Cow<'static, str>) -> Self {
FILE: admin_frontend/src/session.rs
type SessionStorage (line 20) | pub struct SessionStorage {
method new (line 33) | pub fn new(redis_client: ConnectionManager) -> Self {
method get_user_session (line 37) | pub async fn get_user_session(
method get_code_session (line 46) | pub async fn get_code_session(
method put_user_session (line 55) | pub async fn put_user_session(&self, user_session: &UserSession) -> re...
method del_user_session (line 68) | pub async fn del_user_session(&self, session_id: &str) -> redis::Redis...
method put_code_session (line 75) | pub async fn put_code_session(
function session_id_key (line 24) | fn session_id_key(session_id: &str) -> String {
function code_session_key (line 28) | fn code_session_key(code: &str) -> String {
type CodeSession (line 94) | pub struct CodeSession {
type CodeSessionOptional (line 99) | struct CodeSessionOptional(Option<CodeSession>);
method write_redis_args (line 102) | fn write_redis_args<W>(&self, out: &mut W)
method from_redis_value (line 112) | fn from_redis_value(v: &redis::Value) -> redis::RedisResult<Self> {
type UserSession (line 125) | pub struct UserSession {
type Rejection (line 133) | type Rejection = axum::response::Response;
method from_request_parts (line 135) | async fn from_request_parts(
type UserSessionOptional (line 129) | struct UserSessionOptional(Option<UserSession>);
function get_session_from_store (line 173) | async fn get_session_from_store(
function has_expired (line 222) | fn has_expired(access_token: &str) -> bool {
function get_session_expiration (line 235) | fn get_session_expiration(access_token: &str) -> Option<u64> {
method write_redis_args (line 248) | fn write_redis_args<W>(&self, out: &mut W)
method from_redis_value (line 258) | fn from_redis_value(v: &redis::Value) -> redis::RedisResult<Self> {
function expect_redis_json_bytes (line 270) | fn expect_redis_json_bytes<T>(v: &[u8]) -> redis::RedisResult<T>
function expect_redis_value_data (line 285) | fn expect_redis_value_data(v: &redis::Value) -> redis::RedisResult<Optio...
function new_session_cookie (line 297) | pub fn new_session_cookie(id: uuid::Uuid) -> Cookie<'static> {
FILE: admin_frontend/src/templates.rs
type Redirect (line 9) | pub struct Redirect {
type OpenAppFlowyOrDownload (line 15) | pub struct OpenAppFlowyOrDownload {}
type LoginCallback (line 19) | pub struct LoginCallback {}
type PaymentSuccessRedirect (line 23) | pub struct PaymentSuccessRedirect {}
type UserUsage (line 27) | pub struct UserUsage {
type WorkspaceUsageList (line 35) | pub struct WorkspaceUsageList {
type SsoDetail (line 41) | pub struct SsoDetail {
type SsoCreate (line 48) | pub struct SsoCreate;
type SsoList (line 52) | pub struct SsoList {
type ChangePassword (line 58) | pub struct ChangePassword;
type Login (line 62) | pub struct Login<'a> {
type LoginV2 (line 71) | pub struct LoginV2<'a> {
type Home (line 80) | pub struct Home<'a> {
type CreateUser (line 88) | pub struct CreateUser;
type Invite (line 92) | pub struct Invite {
type SharedWorkspaces (line 100) | pub struct SharedWorkspaces {
type AdminNavigate (line 106) | pub struct AdminNavigate;
type Navigate (line 110) | pub struct Navigate;
type AdminHome (line 114) | pub struct AdminHome<'a> {
type AdminUsers (line 121) | pub struct AdminUsers<'a> {
type UserDetails (line 127) | pub struct UserDetails<'a> {
type AdminUserDetails (line 133) | pub struct AdminUserDetails<'a> {
function default (line 139) | pub fn default<T: std::fmt::Display>(
FILE: admin_frontend/src/web_api.rs
function router (line 34) | pub fn router() -> Router<AppState> {
function admin_delete_sso_handler (line 67) | async fn admin_delete_sso_handler(
function admin_create_sso_handler (line 80) | async fn admin_create_sso_handler(
function open_app_handler (line 116) | async fn open_app_handler(
function delete_account_handler (line 131) | async fn delete_account_handler(
function invite_handler (line 142) | async fn invite_handler(
function workspace_invite_handler (line 164) | async fn workspace_invite_handler(
function leave_workspace_handler (line 181) | async fn leave_workspace_handler(
function invite_accept_handler (line 196) | async fn invite_accept_handler(
function change_password_handler (line 211) | async fn change_password_handler(
function post_oauth_login_handler (line 235) | async fn post_oauth_login_handler(
function admin_update_user_handler (line 249) | async fn admin_update_user_handler(
function post_user_generate_link_handler (line 270) | async fn post_user_generate_link_handler(
function admin_delete_user_handler (line 288) | async fn admin_delete_user_handler(
function admin_add_user_handler (line 306) | async fn admin_add_user_handler(
function login_refresh_handler (line 324) | async fn login_refresh_handler(
function sign_in_handler (line 352) | async fn sign_in_handler(
function oauth_redirect_handler (line 382) | async fn oauth_redirect_handler(
function oauth_redirect_token_handler (line 444) | async fn oauth_redirect_token_handler(
function sign_up_handler (line 521) | async fn sign_up_handler(
function logout_handler (line 554) | async fn logout_handler(
function htmx_trigger (line 577) | fn htmx_trigger(trigger: &str) -> HeaderMap {
function session_login (line 583) | async fn session_login(
function send_magic_link (line 623) | async fn send_magic_link(
function htmx_redirect (line 640) | fn htmx_redirect(url: &str) -> HeaderMap {
function get_base_url (line 647) | fn get_base_url(header_map: &HeaderMap) -> String {
function get_header_value_or_default (line 654) | fn get_header_value_or_default<'a>(
function gen_rand_alpha_num (line 671) | fn gen_rand_alpha_num(n: usize) -> String {
FILE: admin_frontend/src/web_app.rs
function router (line 22) | pub fn router(state: AppState) -> Router<AppState> {
function page_router (line 28) | fn page_router() -> Router<AppState> {
function component_router (line 44) | fn component_router() -> Router<AppState> {
function open_appflowy_or_download_handler (line 66) | async fn open_appflowy_or_download_handler() -> Result<Html<String>, Web...
function login_callback_handler (line 70) | async fn login_callback_handler() -> Result<Html<String>, WebAppError> {
function payment_success_handler (line 74) | async fn payment_success_handler() -> Result<Html<String>, WebAppError> {
function login_callback_query_handler (line 78) | async fn login_callback_query_handler(
function admin_sso_detail_handler (line 203) | async fn admin_sso_detail_handler(
function admin_sso_create_handler (line 223) | async fn admin_sso_create_handler() -> Result<Html<String>, WebAppError> {
function admin_sso_handler (line 227) | async fn admin_sso_handler(
function user_navigate_handler (line 242) | async fn user_navigate_handler() -> Result<Html<String>, WebAppError> {
function admin_navigate_handler (line 246) | async fn admin_navigate_handler() -> Result<Html<String>, WebAppError> {
function shared_workspaces_handler (line 250) | async fn shared_workspaces_handler(
function user_invite_handler (line 271) | async fn user_invite_handler(
function user_usage_handler (line 314) | async fn user_usage_handler(
function workspace_usage_handler (line 342) | async fn workspace_usage_handler(
function admin_users_create_handler (line 351) | async fn admin_users_create_handler() -> Result<Html<String>, WebAppErro...
function user_user_handler (line 355) | async fn user_user_handler(
function login_handler (line 367) | async fn login_handler(
function login_v2_handler (line 405) | async fn login_v2_handler(
function user_change_password_handler (line 436) | async fn user_change_password_handler() -> Result<Html<String>, WebAppEr...
function home_handler (line 440) | pub async fn home_handler(
function admin_home_handler (line 464) | async fn admin_home_handler(
function admin_users_handler (line 479) | async fn admin_users_handler(
function admin_user_details_handler (line 501) | async fn admin_user_details_handler(
function render_template (line 515) | fn render_template<T>(x: T) -> Result<Html<String>, WebAppError>
function is_admin (line 523) | fn is_admin(user: &User) -> bool {
FILE: admin_frontend/tests/oauth/mod.rs
function oauth_sign_in (line 13) | async fn oauth_sign_in() {
function extract_code_and_state (line 96) | fn extract_code_and_state(url_str: &str) -> (String, String) {
FILE: admin_frontend/tests/utils/mod.rs
type AdminFrontendClient (line 9) | pub struct AdminFrontendClient {
method new (line 18) | pub fn new() -> Self {
method web_api_sign_in (line 32) | pub async fn web_api_sign_in(&mut self, email: &str, password: &str) {
method web_api_oauth_redirect (line 53) | pub async fn web_api_oauth_redirect(
method web_api_oauth_redirect_token (line 75) | pub async fn web_api_oauth_redirect_token(
method session_id (line 93) | fn session_id(&self) -> &str {
function check_resp (line 98) | async fn check_resp(resp: reqwest::Response) -> reqwest::Response {
FILE: admin_frontend/tests/utils/test_config.rs
type TestConfig (line 1) | pub struct TestConfig {
method from_env (line 6) | pub fn from_env() -> Self {
FILE: libs/access-control/src/act.rs
type Acts (line 7) | pub trait Acts {
method policy_acts (line 8) | fn policy_acts(&self) -> Vec<String> {
method to_enforce_act (line 11) | fn to_enforce_act(&self) -> String;
method from_enforce_act (line 12) | fn from_enforce_act(act: &str) -> Self;
method to_enforce_act (line 25) | fn to_enforce_act(&self) -> String {
method from_enforce_act (line 34) | fn from_enforce_act(act: &str) -> Self {
method to_enforce_act (line 55) | fn to_enforce_act(&self) -> String {
method from_enforce_act (line 63) | fn from_enforce_act(act: &str) -> Self {
method to_enforce_act (line 105) | fn to_enforce_act(&self) -> String {
method from_enforce_act (line 113) | fn from_enforce_act(act: &str) -> Self {
type Action (line 75) | pub enum Action {
method from (line 124) | fn from(method: &Method) -> Self {
method partial_cmp (line 82) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
method cmp (line 88) | fn cmp(&self, other: &Self) -> Ordering {
FILE: libs/access-control/src/casbin/access.rs
type AccessControl (line 32) | pub struct AccessControl {
method new (line 39) | pub async fn new(
method with_enforcer (line 69) | pub fn with_enforcer(enforcer: AFEnforcerV2) -> Self {
method update_policy (line 77) | pub async fn update_policy<T>(
method remove_policy (line 90) | pub async fn remove_policy(&self, sub: SubjectType, obj: ObjectType) -...
method enforce_immediately (line 102) | pub async fn enforce_immediately<T>(
method enforce_strong (line 121) | pub async fn enforce_strong<T>(
method enforce_weak (line 136) | pub async fn enforce_weak<T>(&self, uid: &i64, obj: ObjectType, act: T...
constant MODEL_CONF (line 201) | pub const MODEL_CONF: &str = r###"
function casbin_model (line 218) | pub async fn casbin_model() -> Result<DefaultModel, AppError> {
function cmp_role_or_level (line 236) | pub fn cmp_role_or_level(r_act: ImmutableString, p_act: ImmutableString)...
constant POLICY_FIELD_INDEX_SUBJECT (line 266) | pub const POLICY_FIELD_INDEX_SUBJECT: usize = 0;
constant POLICY_FIELD_INDEX_OBJECT (line 267) | pub const POLICY_FIELD_INDEX_OBJECT: usize = 1;
constant POLICY_FIELD_INDEX_ACTION (line 268) | pub const POLICY_FIELD_INDEX_ACTION: usize = 2;
constant GROUPING_FIELD_INDEX_ROLE (line 275) | const GROUPING_FIELD_INDEX_ROLE: usize = 0;
constant GROUPING_FIELD_INDEX_ACTION (line 277) | const GROUPING_FIELD_INDEX_ACTION: usize = 1;
function load_group_policies (line 279) | pub(crate) async fn load_group_policies(enforcer: &mut CachedEnforcer) -...
FILE: libs/access-control/src/casbin/adapter.rs
type PgAdapter (line 22) | pub struct PgAdapter {
method new (line 28) | pub fn new(pg_pool: PgPool, access_control_metrics: Arc<AccessControlM...
function load_workspace_policies (line 75) | pub async fn load_workspace_policies(
method load_policy (line 99) | async fn load_policy(&mut self, model: &mut dyn Model) -> Result<()> {
method load_filtered_policy (line 114) | async fn load_filtered_policy<'a>(&mut self, m: &mut dyn Model, _f: Filt...
method save_policy (line 118) | async fn save_policy(&mut self, _m: &mut dyn Model) -> Result<()> {
method clear_policy (line 125) | async fn clear_policy(&mut self) -> Result<()> {
method is_filtered (line 132) | fn is_filtered(&self) -> bool {
method add_policy (line 136) | async fn add_policy(&mut self, _sec: &str, _ptype: &str, _rule: Vec<Stri...
method add_policies (line 143) | async fn add_policies(
method remove_policy (line 155) | async fn remove_policy(&mut self, _sec: &str, _ptype: &str, _rule: Vec<S...
method remove_policies (line 162) | async fn remove_policies(
method remove_filtered_policy (line 174) | async fn remove_filtered_policy(
FILE: libs/access-control/src/casbin/collab.rs
type CollabAccessControlImpl (line 15) | pub struct CollabAccessControlImpl {
method new (line 20) | pub fn new(access_control: AccessControl) -> Self {
method enforce_action (line 27) | async fn enforce_action(
method enforce_access_level (line 58) | async fn enforce_access_level(
method update_access_level_policy (line 91) | async fn update_access_level_policy(
method remove_access_level (line 102) | async fn remove_access_level(&self, _uid: &i64, _oid: &Uuid) -> Result<(...
type RealtimeCollabAccessControlImpl (line 109) | pub struct RealtimeCollabAccessControlImpl {
method new (line 114) | pub fn new(access_control: AccessControl) -> Self {
method can_perform_action (line 118) | async fn can_perform_action(
method can_write_collab (line 147) | async fn can_write_collab(
method can_read_collab (line 158) | async fn can_read_collab(
function test_collab_access_control (line 184) | pub async fn test_collab_access_control() {
FILE: libs/access-control/src/casbin/enforcer.rs
type RetryConfig (line 19) | pub(crate) struct RetryConfig {
method default (line 33) | fn default() -> Self {
type AFEnforcer (line 45) | pub struct AFEnforcer {
method new (line 52) | pub async fn new(mut enforcer: CachedEnforcer) -> Result<Self, AppErro...
method retry_write (line 61) | async fn retry_write(
method calculate_next_delay (line 69) | pub(crate) fn calculate_next_delay(last_delay: &mut Duration, config: ...
method generate_initial_delay (line 83) | pub(crate) fn generate_initial_delay(max_delay: Duration) -> Duration {
method retry_write_with_config (line 95) | pub(crate) async fn retry_write_with_config(
method update_policy (line 190) | pub async fn update_policy<T>(
method remove_policy (line 229) | pub async fn remove_policy(
method enforce_policy (line 277) | pub async fn enforce_policy<T>(
function test_enforcer (line 319) | pub async fn test_enforcer() -> AFEnforcer {
function test_retry_config_defaults (line 330) | async fn test_retry_config_defaults() {
function test_decorrelated_jitter_delay_calculation (line 340) | async fn test_decorrelated_jitter_delay_calculation() {
function test_decorrelated_jitter_progression (line 358) | async fn test_decorrelated_jitter_progression() {
function test_initial_jitter_generation (line 388) | async fn test_initial_jitter_generation() {
function test_retry_write_success_on_first_attempt (line 409) | async fn test_retry_write_success_on_first_attempt() {
function test_retry_write_with_custom_config (line 422) | async fn test_retry_write_with_custom_config() {
function test_concurrent_retry_behavior (line 442) | async fn test_concurrent_retry_behavior() {
function test_retry_timeout (line 492) | async fn test_retry_timeout() {
function test_high_concurrency_jitter_effectiveness (line 537) | async fn test_high_concurrency_jitter_effectiveness() {
function policy_comparison_test (line 602) | async fn policy_comparison_test() {
function test_concurrent_update_policy_operations (line 686) | async fn test_concurrent_update_policy_operations() {
function test_concurrent_update_policy_operations_with_count (line 692) | async fn test_concurrent_update_policy_operations_with_count(concurrent_...
function test_scalable_concurrent_update_policy_operations (line 818) | async fn test_scalable_concurrent_update_policy_operations() {
function test_concurrent_enforce_policy_operations (line 827) | async fn test_concurrent_enforce_policy_operations() {
function test_mixed_concurrent_operations_realistic_scenario (line 925) | async fn test_mixed_concurrent_operations_realistic_scenario() {
function test_high_contention_write_operations (line 1089) | async fn test_high_contention_write_operations() {
FILE: libs/access-control/src/casbin/enforcer_v2.rs
type ConsistencyMode (line 20) | pub enum ConsistencyMode {
type PolicyCommand (line 32) | enum PolicyCommand {
type AFEnforcerV2 (line 48) | pub struct AFEnforcerV2 {
method new (line 63) | pub async fn new(enforcer: CachedEnforcer) -> Result<Self, AppError> {
method new_with_redis (line 67) | pub async fn new_with_redis(
method new_internal (line 88) | async fn new_internal(mut enforcer: CachedEnforcer) -> Result<Self, Ap...
method policy_update_processor (line 132) | async fn policy_update_processor(
method send_command_with_metrics (line 229) | async fn send_command_with_metrics(&self, cmd: PolicyCommand) -> Resul...
method update_policy (line 287) | pub async fn update_policy<T>(
method remove_policy (line 340) | pub async fn remove_policy(
method enforce_policy (line 400) | pub async fn enforce_policy<T>(
method enforce_policy_with_consistency (line 419) | pub async fn enforce_policy_with_consistency<T>(
method wait_for_generation (line 478) | async fn wait_for_generation(
method shutdown (line 514) | pub async fn shutdown(&self) -> Result<(), AppError> {
function test_enforcer_v2 (line 535) | async fn test_enforcer_v2() -> AFEnforcerV2 {
function test_v2_no_deadlock_scenario (line 546) | async fn test_v2_no_deadlock_scenario() {
function test_v2_concurrent_operations (line 581) | async fn test_v2_concurrent_operations() {
function test_v2_queue_ordering (line 631) | async fn test_v2_queue_ordering() {
function test_v2_queue_capacity_limits (line 688) | async fn test_v2_queue_capacity_limits() {
function test_v2_policy_query_consistency_during_rapid_updates (line 752) | async fn test_v2_policy_query_consistency_during_rapid_updates() {
function test_v2_multiple_policies_accumulation (line 840) | async fn test_v2_multiple_policies_accumulation() {
function test_v2_shutdown_with_pending_operations (line 919) | async fn test_v2_shutdown_with_pending_operations() {
function test_v2_concurrent_read_write_race_conditions (line 969) | async fn test_v2_concurrent_read_write_race_conditions() {
function test_v2_policy_removal_during_enforcement (line 1038) | async fn test_v2_policy_removal_during_enforcement() {
function test_v2_high_throughput_mixed_operations (line 1133) | async fn test_v2_high_throughput_mixed_operations() {
function test_v2_empty_policy_removal (line 1234) | async fn test_v2_empty_policy_removal() {
function test_v2_policy_enforcement_accuracy (line 1257) | async fn test_v2_policy_enforcement_accuracy() {
function test_v2_consistency_modes (line 1330) | async fn test_v2_consistency_modes() {
function test_v2_consistency_timeout (line 1423) | async fn test_v2_consistency_timeout() {
FILE: libs/access-control/src/casbin/performance_comparison_tests.rs
function create_v1_enforcer (line 61) | async fn create_v1_enforcer() -> AFEnforcer {
function create_v2_enforcer (line 71) | async fn create_v2_enforcer() -> AFEnforcerV2 {
function test_enforce_policy_baseline_performance (line 95) | async fn test_enforce_policy_baseline_performance() {
function test_enforce_policy_under_write_load (line 191) | async fn test_enforce_policy_under_write_load() {
function test_enforce_policy_latency_distribution (line 369) | async fn test_enforce_policy_latency_distribution() {
function test_mixed_workload_throughput (line 475) | async fn test_mixed_workload_throughput() {
FILE: libs/access-control/src/casbin/redis_cache.rs
constant CACHE_HKEY (line 6) | const CACHE_HKEY: &str = "ac:cache:v1";
constant CACHE_TTL_SECONDS (line 7) | const CACHE_TTL_SECONDS: usize = 600;
type RedisCache (line 9) | pub struct RedisCache<K, V> {
function new (line 18) | pub fn new<T: IntoConnectionInfo>(redis_url: T) -> RedisResult<RedisCach...
function get (line 34) | fn get(&self, k: &K) -> Option<V> {
function has (line 53) | fn has(&self, k: &K) -> bool {
function set (line 69) | fn set(&self, k: K, v: V) {
function clear (line 88) | fn clear(&self) {
function test_set_has_get_clear (line 102) | fn test_set_has_get_clear() {
function test_ttl_expiration (line 131) | fn test_ttl_expiration() {
FILE: libs/access-control/src/casbin/util.rs
function policies_for_subject_with_given_object (line 6) | pub(crate) async fn policies_for_subject_with_given_object(
function test_enforcer_v2 (line 28) | pub async fn test_enforcer_v2() -> AFEnforcerV2 {
FILE: libs/access-control/src/casbin/workspace.rs
type WorkspaceAccessControlImpl (line 13) | pub struct WorkspaceAccessControlImpl {
method new (line 18) | pub fn new(access_control: AccessControl) -> Self {
method enforce_role_strong (line 25) | async fn enforce_role_strong(
method enforce_role_weak (line 43) | async fn enforce_role_weak(
method enforce_action (line 61) | async fn enforce_action(
method insert_role (line 79) | async fn insert_role(
method remove_user_from_workspace (line 97) | async fn remove_user_from_workspace(
function test_workspace_access_control (line 135) | pub async fn test_workspace_access_control() {
FILE: libs/access-control/src/collab.rs
type CollabAccessControl (line 8) | pub trait CollabAccessControl: Sync + Send + 'static {
method enforce_action (line 11) | async fn enforce_action(
method enforce_access_level (line 21) | async fn enforce_access_level(
method update_access_level_policy (line 30) | async fn update_access_level_policy(
method remove_access_level (line 37) | async fn remove_access_level(&self, uid: &i64, oid: &Uuid) -> Result<(...
type RealtimeAccessControl (line 41) | pub trait RealtimeAccessControl: Sync + Send + 'static {
method can_write_collab (line 49) | async fn can_write_collab(
method can_read_collab (line 60) | async fn can_read_collab(
FILE: libs/access-control/src/entity.rs
type SubjectType (line 2) | pub enum SubjectType {
method policy_subject (line 8) | pub fn policy_subject(&self) -> String {
type ObjectType (line 18) | pub enum ObjectType {
method policy_object (line 26) | pub fn policy_object(&self) -> String {
method object_id (line 33) | pub fn object_id(&self) -> String {
FILE: libs/access-control/src/metrics.rs
constant ENFORCER_METRICS_TICK_INTERVAL (line 9) | pub const ENFORCER_METRICS_TICK_INTERVAL: Duration = Duration::from_secs...
type AccessControlMetrics (line 12) | pub struct AccessControlMetrics {
method init (line 22) | pub(crate) fn init() -> Self {
method register (line 33) | pub fn register(registry: &mut Registry) -> Self {
method record_load_all_policies_in_ms (line 75) | pub fn record_load_all_policies_in_ms(&self, millis: u64) {
method record_enforce_count (line 79) | pub fn record_enforce_count(&self, total: i64, from_cache: i64) {
method record_policy_send_metrics (line 84) | pub fn record_policy_send_metrics(&self, attempts: i64, failures: i64,...
type MetricsCalState (line 92) | pub(crate) struct MetricsCalState {
method new (line 101) | pub(crate) fn new() -> Self {
function tick_metric (line 113) | pub(crate) fn tick_metric(state: MetricsCalState, metrics: Arc<AccessCon...
FILE: libs/access-control/src/noops/collab.rs
type CollabAccessControlImpl (line 12) | pub struct CollabAccessControlImpl;
method new (line 15) | pub fn new() -> Self {
method default (line 21) | fn default() -> Self {
method enforce_action (line 28) | async fn enforce_action(
method enforce_access_level (line 38) | async fn enforce_access_level(
method update_access_level_policy (line 48) | async fn update_access_level_policy(
method remove_access_level (line 57) | async fn remove_access_level(&self, _uid: &i64, _oid: &Uuid) -> Result<(...
type RealtimeCollabAccessControlImpl (line 63) | pub struct RealtimeCollabAccessControlImpl;
method new (line 66) | pub fn new() -> Self {
method default (line 72) | fn default() -> Self {
method can_write_collab (line 79) | async fn can_write_collab(
method can_read_collab (line 88) | async fn can_read_collab(
FILE: libs/access-control/src/noops/workspace.rs
type WorkspaceAccessControlImpl (line 10) | pub struct WorkspaceAccessControlImpl;
method new (line 13) | pub fn new() -> Self {
method default (line 19) | fn default() -> Self {
method enforce_role_strong (line 26) | async fn enforce_role_strong(
method enforce_role_weak (line 35) | async fn enforce_role_weak(
method enforce_action (line 44) | async fn enforce_action(
method insert_role (line 53) | async fn insert_role(
method remove_user_from_workspace (line 62) | async fn remove_user_from_workspace(
FILE: libs/access-control/src/request.rs
type PolicyRequest (line 4) | pub struct PolicyRequest {
method new (line 11) | pub fn new<T>(uid: i64, object_type: ObjectType, action: T) -> Self
method to_policy (line 22) | pub fn to_policy(&self) -> Vec<String> {
FILE: libs/access-control/src/workspace.rs
type WorkspaceAccessControl (line 8) | pub trait WorkspaceAccessControl: Send + Sync + 'static {
method enforce_role_strong (line 11) | async fn enforce_role_strong(
method enforce_role_weak (line 18) | async fn enforce_role_weak(
method enforce_action (line 27) | async fn enforce_action(
method insert_role (line 34) | async fn insert_role(&self, uid: &i64, workspace_id: &Uuid, role: AFRole)
method remove_user_from_workspace (line 37) | async fn remove_user_from_workspace(
FILE: libs/app-error/src/gotrue.rs
type GoTrueError (line 7) | pub enum GoTrueError {
method is_network_error (line 34) | pub fn is_network_error(&self) -> bool {
method from (line 43) | fn from(value: reqwest::Error) -> Self {
type GoTrueErrorSerde (line 68) | pub struct GoTrueErrorSerde {
method fmt (line 75) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type GotrueClientError (line 87) | pub struct GotrueClientError {
method fmt (line 94) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
FILE: libs/app-error/src/lib.rs
type AppError (line 16) | pub enum AppError {
method is_not_enough_permissions (line 217) | pub fn is_not_enough_permissions(&self) -> bool {
method is_record_not_found (line 221) | pub fn is_record_not_found(&self) -> bool {
method is_network_error (line 225) | pub fn is_network_error(&self) -> bool {
method is_unauthorized (line 229) | pub fn is_unauthorized(&self) -> bool {
method code (line 233) | pub fn code(&self) -> ErrorCode {
method from (line 308) | fn from(error: reqwest::Error) -> Self {
method from (line 354) | fn from(value: sqlx::Error) -> Self {
method from (line 368) | fn from(err: crate::gotrue::GoTrueError) -> Self {
method from (line 391) | fn from(err: String) -> Self {
method status_code (line 511) | fn status_code(&self) -> actix_web::http::StatusCode {
method error_response (line 515) | fn error_response(&self) -> actix_web::HttpResponse {
method from (line 522) | fn from(err: AIError) -> Self {
method from (line 536) | fn from(err: async_openai::error::OpenAIError) -> Self {
method from (line 551) | fn from(err: TungsteniteError) -> Self {
method from (line 567) | fn from(err: tokio_tungstenite::tungstenite::http::header::InvalidHead...
type ErrorCode (line 408) | pub enum ErrorCode {
method value (line 489) | pub fn value(&self) -> i32 {
type AppErrorSerde (line 495) | struct AppErrorSerde {
method from (line 501) | fn from(value: &AppError) -> Self {
FILE: libs/appflowy-ai-client/src/client.rs
constant AI_MODEL_HEADER_KEY (line 20) | const AI_MODEL_HEADER_KEY: &str = "ai-model";
type AppFlowyAIClient (line 23) | pub struct AppFlowyAIClient {
method new (line 29) | pub fn new(url: &str) -> Self {
method health_check (line 36) | pub async fn health_check(&self) -> Result<(), AIError> {
method stream_completion_text (line 44) | pub async fn stream_completion_text(
method stream_completion_v2 (line 63) | pub async fn stream_completion_v2(
method summarize_row (line 82) | pub async fn summarize_row(
method translate_row (line 104) | pub async fn translate_row(
method search_documents (line 121) | pub async fn search_documents(
method create_chat_text_context (line 136) | pub async fn create_chat_text_context(&self, context: CreateChatContex...
method send_question (line 147) | pub async fn send_question(
method stream_question (line 181) | pub async fn stream_question(
method stream_question_v2 (line 215) | pub async fn stream_question_v2(
method stream_question_v3 (line 241) | pub async fn stream_question_v3(
method get_related_question (line 258) | pub async fn get_related_question(
method regenerate_image (line 276) | pub async fn regenerate_image(&self, source_metadata: Value) -> Result...
method get_local_ai_package (line 289) | pub async fn get_local_ai_package(
method get_local_ai_config (line 300) | pub async fn get_local_ai_config(
method get_model_list (line 319) | pub async fn get_model_list(&self) -> Result<ModelList, AIError> {
method calculate_similarity (line 328) | pub async fn calculate_similarity(
method async_http_client (line 343) | fn async_http_client(&self, method: Method, url: &str) -> Result<Reque...
type AIResponse (line 350) | pub struct AIResponse<T> {
function from_reqwest_response (line 362) | pub async fn from_reqwest_response(resp: reqwest::Response) -> Result<Se...
function from_ur_response (line 374) | pub fn from_ur_response(resp: ureq::Response) -> Result<Self, anyhow::Er...
function into_data (line 385) | pub fn into_data(self) -> Result<T, AIError> {
function stream_response (line 392) | pub async fn stream_response(
method from (line 412) | fn from(error: reqwest::Error) -> Self {
function collect_stream_text (line 441) | pub async fn collect_stream_text(stream: impl Stream<Item = Result<Bytes...
FILE: libs/appflowy-ai-client/src/dto.rs
constant STREAM_METADATA_KEY (line 8) | pub const STREAM_METADATA_KEY: &str = "0";
constant STREAM_ANSWER_KEY (line 9) | pub const STREAM_ANSWER_KEY: &str = "1";
constant STREAM_IMAGE_KEY (line 10) | pub const STREAM_IMAGE_KEY: &str = "2";
constant STREAM_KEEP_ALIVE_KEY (line 11) | pub const STREAM_KEEP_ALIVE_KEY: &str = "3";
constant STREAM_COMMENT_KEY (line 12) | pub const STREAM_COMMENT_KEY: &str = "4";
type SummarizeRowResponse (line 15) | pub struct SummarizeRowResponse {
type ChatQuestionQuery (line 20) | pub struct ChatQuestionQuery {
type ChatQuestion (line 27) | pub struct ChatQuestion {
type QuestionMetadata (line 36) | pub struct QuestionMetadata {
type ResponseFormat (line 42) | pub struct ResponseFormat {
method new (line 49) | pub fn new() -> Self {
type OutputLayout (line 56) | pub enum OutputLayout {
type OutputContent (line 67) | pub enum OutputContent {
method is_image (line 75) | pub fn is_image(&self) -> bool {
type OutputContentMetadata (line 81) | pub struct OutputContentMetadata {
function default_image_model (line 106) | fn default_image_model() -> String {
function default_image_size (line 110) | fn default_image_size() -> Option<String> {
function default_image_quality (line 114) | fn default_image_quality() -> Option<String> {
type MessageData (line 119) | pub struct MessageData {
type ChatAnswer (line 128) | pub struct ChatAnswer {
type RepeatedRelatedQuestion (line 135) | pub struct RepeatedRelatedQuestion {
type RelatedQuestion (line 141) | pub struct RelatedQuestion {
type CompleteTextResponse (line 149) | pub struct CompleteTextResponse {
type CompletionType (line 155) | pub enum CompletionType {
type SearchDocumentsRequest (line 167) | pub struct SearchDocumentsRequest {
function serialize_workspaces (line 176) | fn serialize_workspaces<S>(workspaces: &Vec<String>, serializer: S) -> R...
type Document (line 185) | pub struct Document {
type CollabType (line 195) | pub enum CollabType {
type TranslateRowParams (line 206) | pub struct TranslateRowParams {
type TranslateRowData (line 213) | pub struct TranslateRowData {
type TranslateItem (line 220) | pub struct TranslateItem {
type TranslateRowResponse (line 225) | pub struct TranslateRowResponse {
type EmbeddingModel (line 230) | pub enum EmbeddingModel {
method default_model (line 245) | pub fn default_model() -> Self {
method supported_models (line 249) | pub fn supported_models() -> &'static [&'static str] {
method max_token (line 257) | pub fn max_token(&self) -> usize {
method default_dimensions (line 265) | pub fn default_dimensions(&self) -> u32 {
method name (line 273) | pub fn name(&self) -> &'static str {
method from_name (line 281) | pub fn from_name(name: &str) -> Option<Self> {
method fmt (line 292) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type RepeatedLocalAIPackage (line 302) | pub struct RepeatedLocalAIPackage(pub Vec<AppFlowyOfflineAI>);
type AppFlowyOfflineAI (line 305) | pub struct AppFlowyOfflineAI {
type LLMModel (line 314) | pub struct LLMModel {
type ModelInfo (line 322) | pub struct ModelInfo {
type LocalAIConfig (line 332) | pub struct LocalAIConfig {
type AvailableModel (line 338) | pub struct AvailableModel {
type ModelList (line 345) | pub struct ModelList {
type CreateChatContext (line 350) | pub struct CreateChatContext {
method new (line 360) | pub fn new(chat_id: String, context_loader: String, text: String) -> S...
method with_metadata (line 371) | pub fn with_metadata<T: Serialize>(mut self, metadata: T) -> Self {
method fmt (line 378) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type CustomPrompt (line 390) | pub struct CustomPrompt {
type CalculateSimilarityParams (line 395) | pub struct CalculateSimilarityParams {
type SimilarityResponse (line 403) | pub struct SimilarityResponse {
type CompletionMessage (line 408) | pub struct CompletionMessage {
type CompletionMetadata (line 414) | pub struct CompletionMetadata {
type CompleteTextParams (line 440) | pub struct CompleteTextParams {
method new_with_completion_type (line 451) | pub fn new_with_completion_type(
FILE: libs/appflowy-ai-client/src/error.rs
type AIError (line 2) | pub enum AIError {
FILE: libs/appflowy-ai-client/tests/chat_test/completion_test.rs
function completion_explain_test (line 9) | async fn completion_explain_test() {
function completion_image_test (line 33) | async fn completion_image_test() {
function continue_writing_test (line 61) | async fn continue_writing_test() {
function make_text_shorter_text (line 82) | async fn make_text_shorter_text() {
function custom_prompt_test (line 104) | async fn custom_prompt_test() {
FILE: libs/appflowy-ai-client/tests/chat_test/context_test.rs
function create_chat_context_test (line 4) | async fn create_chat_context_test() {
FILE: libs/appflowy-ai-client/tests/chat_test/model_config_test.rs
function get_model_list_test (line 4) | async fn get_model_list_test() {
FILE: libs/appflowy-ai-client/tests/chat_test/qa_test.rs
function qa_test (line 4) | async fn qa_test() {
function download_package_test (line 31) | async fn download_package_test() {
function get_local_ai_config_test (line 39) | async fn get_local_ai_config_test() {
FILE: libs/appflowy-ai-client/tests/index_test/index_search_test.rs
function index_search (line 5) | async fn index_search() {
FILE: libs/appflowy-ai-client/tests/main.rs
function appflowy_ai_client (line 12) | pub fn appflowy_ai_client() -> AppFlowyAIClient {
function setup_log (line 17) | pub fn setup_log() {
FILE: libs/appflowy-ai-client/tests/row_test/summarize_test.rs
function summarize_row_test (line 5) | async fn summarize_row_test() {
FILE: libs/appflowy-ai-client/tests/row_test/translate_test.rs
function translate_row_test (line 6) | async fn translate_row_test() {
FILE: libs/appflowy-proto/build.rs
function main (line 3) | fn main() -> Result<(), Box<dyn std::error::Error>> {
FILE: libs/appflowy-proto/src/client_message.rs
type ClientMessage (line 18) | pub enum ClientMessage {
method object_id (line 115) | pub fn object_id(&self) -> &ObjectId {
method into_bytes (line 126) | pub fn into_bytes(self) -> Result<Vec<u8>, Error> {
method from_bytes (line 133) | pub fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {
type Error (line 201) | type Error = Error;
method try_from (line 203) | fn try_from(value: pb::Message) -> Result<Self, Self::Error> {
method fmt (line 62) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function from (line 142) | fn from(value: ClientMessage) -> Self {
FILE: libs/appflowy-proto/src/pb/collab.rs
type Rid (line 9) | pub struct Rid {
type SyncRequest (line 25) | pub struct SyncRequest {
type Update (line 42) | pub struct Update {
type AwarenessUpdate (line 65) | pub struct AwarenessUpdate {
type AccessChanged (line 74) | pub struct AccessChanged {
type CollabMessage (line 86) | pub struct CollabMessage {
type Data (line 101) | pub enum Data {
FILE: libs/appflowy-proto/src/pb/messages.rs
type Message (line 5) | pub struct Message {
type Payload (line 12) | pub enum Payload {
FILE: libs/appflowy-proto/src/pb/notification.rs
type WorkspaceNotification (line 3) | pub struct WorkspaceNotification {
type Payload (line 10) | pub enum Payload {
type UserProfileChange (line 18) | pub struct UserProfileChange {
type PermissionChanged (line 27) | pub struct PermissionChanged {
FILE: libs/appflowy-proto/src/server_message.rs
type AccessChangedReason (line 21) | pub enum AccessChangedReason {
method from (line 346) | fn from(value: i32) -> Self {
method from (line 356) | fn from(value: u32) -> Self {
method fmt (line 27) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type ServerMessage (line 36) | pub enum ServerMessage {
method into_bytes (line 68) | pub fn into_bytes(self) -> Result<Vec<u8>, Error> {
method from_bytes (line 72) | pub fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {
type Error (line 249) | type Error = Error;
method try_from (line 251) | fn try_from(value: pb::Message) -> Result<Self, Self::Error> {
method fmt (line 79) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function from (line 151) | fn from(value: ServerMessage) -> Self {
type WorkspaceNotification (line 327) | pub enum WorkspaceNotification {
function from (line 340) | fn from(value: AccessChangedReason) -> Self {
FILE: libs/appflowy-proto/src/shared.rs
type WorkspaceId (line 6) | pub type WorkspaceId = Uuid;
type ObjectId (line 7) | pub type ObjectId = Uuid;
type Rid (line 11) | pub struct Rid {
method new (line 17) | pub fn new(timestamp: u64, seq_no: u16) -> Self {
method from_bytes (line 21) | pub fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {
method into_bytes (line 32) | pub fn into_bytes(&self) -> [u8; 10] {
method fmt (line 41) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type Err (line 47) | type Err = String;
method from_str (line 49) | fn from_str(s: &str) -> Result<Self, Self::Err> {
type UpdateFlags (line 67) | pub enum UpdateFlags {
type Error (line 74) | type Error = Error;
method try_from (line 76) | fn try_from(value: u8) -> Result<Self, Self::Error> {
type Error (line 86) | pub enum Error {
type TimestampedEncodedCollab (line 105) | pub struct TimestampedEncodedCollab {
FILE: libs/client-api-entity/src/id.rs
function user_awareness_object_id (line 3) | pub fn user_awareness_object_id(user_uuid: &Uuid, workspace_id: &Uuid) -...
FILE: libs/client-api-test/src/assertion_utils.rs
type JsonAssertable (line 24) | pub trait JsonAssertable {
method get_json (line 26) | async fn get_json(&self) -> Result<Value, Error>;
method assert_json_eventually (line 29) | async fn assert_json_eventually(
method assert_json_key_eventually (line 59) | async fn assert_json_key_eventually(
function assert_server_collab_eventually (line 94) | pub async fn assert_server_collab_eventually(
function collab_response_to_json (line 141) | fn collab_response_to_json(response: &CollabResponse, object_id: Uuid) -...
function wait_for_sync_complete (line 161) | pub async fn wait_for_sync_complete(
FILE: libs/client-api-test/src/async_utils.rs
function retry_with_backoff (line 9) | pub async fn retry_with_backoff<T, F, Fut>(operation: F, config: RetryCo...
function retry_with_constant_interval (line 52) | pub async fn retry_with_constant_interval<T, F, Fut>(
function retry_api_with_constant_interval (line 94) | pub async fn retry_api_with_constant_interval<T, F, Fut>(
function poll_until (line 149) | pub async fn poll_until<F, Fut>(condition: F, config: RetryConfig) -> Re...
function poll_until_some (line 168) | pub async fn poll_until_some<T, F, Fut>(operation: F, config: RetryConfi...
function poll_until_ok (line 186) | pub async fn poll_until_ok<T, E, F, Fut>(operation: F, config: RetryConf...
function wait_for_all_conditions (line 204) | pub async fn wait_for_all_conditions<F>(
function test_retry_with_backoff_success (line 232) | async fn test_retry_with_backoff_success() {
function test_poll_until_some (line 262) | async fn test_poll_until_some() {
FILE: libs/client-api-test/src/client.rs
function get_env_var (line 26) | fn get_env_var<'default>(key: &str, default: &'default str) -> Cow<'defa...
function localhost_client (line 41) | pub fn localhost_client() -> Client {
function localhost_client_with_device_id (line 46) | pub fn localhost_client_with_device_id(device_id: &str) -> Client {
function workspace_id_from_client (line 57) | pub async fn workspace_id_from_client(c: &Client) -> Uuid {
FILE: libs/client-api-test/src/database_util.rs
type TestDatabaseCollabService (line 16) | pub struct TestDatabaseCollabService {
method new (line 24) | pub fn new(api_client: client_api::Client, workspace_id: Uuid, client_...
method reader_client_id (line 36) | async fn reader_client_id(&self) -> ClientID {
method reader_get_collab (line 40) | async fn reader_get_collab(
method reader_batch_get_collabs (line 61) | async fn reader_batch_get_collabs(
method database_row_cache (line 100) | fn database_row_cache(&self) -> Option<Arc<DashMap<RowId, Arc<RwLock<Dat...
FILE: libs/client-api-test/src/log.rs
function get_bool_from_env_var (line 8) | fn get_bool_from_env_var(env_var_name: &str) -> bool {
function load_env (line 19) | pub fn load_env() {
function ai_test_enabled (line 27) | pub fn ai_test_enabled() -> bool {
function setup_log (line 39) | pub fn setup_log() {
function setup_log (line 64) | pub fn setup_log() {}
FILE: libs/client-api-test/src/test_client.rs
type TestClient (line 61) | pub struct TestClient {
method new (line 84) | pub async fn new(registered_user: User, start_ws_conn: bool) -> Self {
method random_client_id (line 91) | fn random_client_id() -> ClientID {
method client_id (line 95) | pub async fn client_id(&self, _workspace_id: &Uuid) -> ClientID {
method insert_into (line 99) | pub async fn insert_into<S: Prelim>(&self, object_id: &Uuid, key: &str...
method new_with_device_id (line 105) | pub async fn new_with_device_id(
method new_user (line 140) | pub async fn new_user() -> Self {
method new_user_without_ws_conn (line 148) | pub async fn new_user_without_ws_conn() -> Self {
method disable_receive_message (line 153) | pub fn disable_receive_message(&mut self) {
method enable_receive_message (line 157) | pub fn enable_receive_message(&mut self) {
method insert_view_to_general_space (line 161) | pub async fn insert_view_to_general_space(
method get_folder (line 206) | pub async fn get_folder(&self, workspace_id: Uuid) -> Folder {
method get_database (line 227) | pub async fn get_database(&self, workspace_id: Uuid, database_id: &str...
method get_document (line 237) | pub async fn get_document(&self, workspace_id: Uuid, document_id: Uuid...
method get_workspace_database (line 245) | pub async fn get_workspace_database(&self, workspace_id: Uuid) -> Work...
method get_connect_users (line 272) | pub async fn get_connect_users(&self, object_id: &Uuid) -> Vec<i64> {
method clean_awareness_state (line 292) | pub async fn clean_awareness_state(&self, object_id: &Uuid) {
method emit_awareness_state (line 299) | pub async fn emit_awareness_state(&self, object_id: &Uuid) {
method user_with_new_device (line 312) | pub async fn user_with_new_device(registered_user: User) -> Self {
method get_user_workspace_info (line 316) | pub async fn get_user_workspace_info(&self) -> AFUserWorkspaceInfo {
method open_workspace (line 320) | pub async fn open_workspace(&self, workspace_id: &Uuid) -> AFWorkspace {
method get_user_folder (line 324) | pub async fn get_user_folder(&self) -> Folder {
method get_workspace_database_collab (line 345) | pub async fn get_workspace_database_collab(&self, workspace_id: Uuid) ...
method create_document_collab (line 356) | pub async fn create_document_collab(&self, workspace_id: Uuid, object_...
method get_db_collab_from_view (line 367) | pub async fn get_db_collab_from_view(&mut self, workspace_id: Uuid, vi...
method get_user_awareness (line 387) | pub async fn get_user_awareness(&self) -> UserAwareness {
method try_update_workspace_member (line 409) | pub async fn try_update_workspace_member(
method invite_and_accepted_workspace_member (line 425) | pub async fn invite_and_accepted_workspace_member(
method try_remove_workspace_member (line 466) | pub async fn try_remove_workspace_member(
method get_workspace_members (line 478) | pub async fn get_workspace_members(&self, workspace_id: &Uuid) -> Vec<...
method try_get_workspace_members (line 486) | pub async fn try_get_workspace_members(
method get_workspace_member (line 493) | pub async fn get_workspace_member(&self, workspace_id: Uuid, user_id: ...
method try_get_workspace_member (line 501) | pub async fn try_get_workspace_member(
method wait_object_sync_complete (line 514) | pub async fn wait_object_sync_complete(&self, object_id: &Uuid) -> Res...
method wait_object_sync_complete_with_secs (line 520) | pub async fn wait_object_sync_complete_with_secs(
method get_blob_metadata (line 543) | pub async fn get_blob_metadata(&self, workspace_id: &Uuid, file_id: &s...
method upload_blob (line 548) | pub async fn upload_blob<T: Into<Bytes>>(&self, file_id: &str, data: T...
method delete_file (line 554) | pub async fn delete_file(&self, file_id: &str) {
method get_workspace_usage (line 560) | pub async fn get_workspace_usage(&self) -> WorkspaceSpaceUsage {
method workspace_id (line 569) | pub async fn workspace_id(&self) -> Uuid {
method email (line 580) | pub async fn email(&self) -> String {
method uid (line 584) | pub async fn uid(&self) -> i64 {
method get_user_profile (line 588) | pub async fn get_user_profile(&self) -> AFUserProfile {
method wait_until_all_embedding (line 592) | pub async fn wait_until_all_embedding(
method wait_until_get_embedding (line 620) | pub async fn wait_until_get_embedding(
method wait_unit_get_search_result (line 644) | pub async fn wait_unit_get_search_result(
method assert_similarity (line 673) | pub async fn assert_similarity(
method create_collab_list (line 698) | pub async fn create_collab_list(
method get_collab (line 709) | pub async fn get_collab(
method get_collab_to_collab (line 727) | pub async fn get_collab_to_collab(
method batch_get_collab (line 742) | pub async fn batch_get_collab(
method create_and_edit_collab (line 751) | pub async fn create_and_edit_collab(
method create_and_edit_collab_with_data (line 764) | pub async fn create_and_edit_collab_with_data(
method open_workspace_collab (line 846) | pub async fn open_workspace_collab(&mut self, workspace_id: Uuid) {
method open_collab (line 853) | pub async fn open_collab(
method open_collab_with_doc_state (line 865) | pub async fn open_collab_with_doc_state(
method create_collab_with_data (line 920) | pub async fn create_collab_with_data(
method post_realtime_binary (line 951) | pub async fn post_realtime_binary(&self, message: Vec<u8>) -> Result<(...
method disconnect (line 959) | pub async fn disconnect(&self) {
method reconnect (line 963) | pub async fn reconnect(&self) {
method get_edit_collab_json (line 967) | pub async fn get_edit_collab_json(&self, object_id: &Uuid) -> Value {
method publish_collabs (line 973) | pub async fn publish_collabs(
method duplicate_published_to_workspace (line 1005) | pub async fn duplicate_published_to_workspace(
type TestCollab (line 68) | pub struct TestCollab {
method encode_collab (line 75) | pub async fn encode_collab(&self) -> EncodedCollab {
function assert_client_collab_value (line 1028) | pub async fn assert_client_collab_value(
method get_json (line 1048) | async fn get_json(&self) -> Result<Value, Error> {
function assert_server_collab (line 1054) | pub async fn assert_server_collab(
function assert_client_collab_within_secs (line 1110) | pub async fn assert_client_collab_within_secs(
function assert_client_collab_include_value (line 1147) | pub async fn assert_client_collab_include_value(
function collect_answer (line 1183) | pub async fn collect_answer(mut stream: QuestionStream) -> String {
function collect_completion_v2 (line 1198) | pub async fn collect_completion_v2(mut stream: CompletionStream) -> (Str...
FILE: libs/client-api-test/src/test_client_config.rs
type TestClientConstants (line 5) | pub struct TestClientConstants;
constant DEFAULT_TIMEOUT_SECS (line 8) | pub const DEFAULT_TIMEOUT_SECS: u64 = 30;
constant DEFAULT_POLL_INTERVAL_MS (line 9) | pub const DEFAULT_POLL_INTERVAL_MS: u64 = 1000;
constant MAX_RETRY_COUNT (line 10) | pub const MAX_RETRY_COUNT: u32 = 10;
constant SYNC_TIMEOUT_SECS (line 11) | pub const SYNC_TIMEOUT_SECS: u64 = 60;
constant EMBEDDING_TIMEOUT_SECS (line 12) | pub const EMBEDDING_TIMEOUT_SECS: u64 = 30;
constant EMBEDDING_POLL_INTERVAL_MS (line 13) | pub const EMBEDDING_POLL_INTERVAL_MS: u64 = 2000;
constant SEARCH_POLL_INTERVAL_MS (line 14) | pub const SEARCH_POLL_INTERVAL_MS: u64 = 1500;
constant SNAPSHOT_POLL_INTERVAL_SECS (line 15) | pub const SNAPSHOT_POLL_INTERVAL_SECS: u64 = 5;
type RetryConfig (line 20) | pub struct RetryConfig {
method for_embedding (line 37) | pub fn for_embedding() -> Self {
method for_sync (line 45) | pub fn for_sync() -> Self {
method for_search (line 53) | pub fn for_search() -> Self {
method default (line 27) | fn default() -> Self {
type AssertionConfig (line 64) | pub struct AssertionConfig {
method default (line 72) | fn default() -> Self {
FILE: libs/client-api-test/src/test_client_v2.rs
type CollabRef (line 71) | pub type CollabRef = Arc<RwLock<dyn BorrowMut<Collab> + Send + Sync + 's...
type TestClient (line 73) | pub struct TestClient {
method new (line 86) | pub async fn new(registered_user: User, start_ws_conn: bool) -> Self {
method new_with_device_id (line 94) | pub async fn new_with_device_id(
method new_user (line 153) | pub async fn new_user() -> Self {
method new_user_without_ws_conn (line 163) | pub async fn new_user_without_ws_conn() -> Self {
method user_with_new_device (line 169) | pub async fn user_with_new_device(registered_user: User) -> Self {
method insert_into (line 175) | pub async fn insert_into<S: Prelim>(&self, object_id: &Uuid, key: &str...
method client_id (line 181) | pub async fn client_id(&self, workspace_id: &Uuid) -> ClientID {
method subscribe_workspace_notification (line 186) | pub fn subscribe_workspace_notification(
method disable_receive_message (line 199) | pub fn disable_receive_message(&mut self) {
method enable_receive_message (line 204) | pub fn enable_receive_message(&mut self) {
method insert_view_to_general_space (line 208) | pub async fn insert_view_to_general_space(
method get_folder (line 253) | pub async fn get_folder(&self, workspace_id: Uuid) -> Folder {
method get_database (line 274) | pub async fn get_database(&self, workspace_id: Uuid, database_id: &str...
method get_document (line 285) | pub async fn get_document(&self, workspace_id: Uuid, document_id: Uuid...
method get_workspace_database (line 293) | pub async fn get_workspace_database(&self, workspace_id: Uuid) -> Work...
method get_connect_users (line 320) | pub async fn get_connect_users(&self, object_id: &Uuid) -> Vec<i64> {
method clean_awareness_state (line 340) | pub async fn clean_awareness_state(&self, object_id: &Uuid) {
method emit_awareness_state (line 347) | pub async fn emit_awareness_state(&self, object_id: &Uuid) {
method get_user_workspace_info (line 354) | pub async fn get_user_workspace_info(&self) -> AFUserWorkspaceInfo {
method open_workspace (line 358) | pub async fn open_workspace(&self, workspace_id: &Uuid) -> AFWorkspace {
method get_user_folder (line 363) | pub async fn get_user_folder(&self) -> Folder {
method get_workspace_database_collab (line 384) | pub async fn get_workspace_database_collab(&self, workspace_id: Uuid) ...
method create_document_collab (line 396) | pub async fn create_document_collab(&self, workspace_id: Uuid, object_...
method get_db_collab_from_view (line 407) | pub async fn get_db_collab_from_view(&mut self, workspace_id: Uuid, vi...
method get_user_awareness (line 427) | pub async fn get_user_awareness(&self) -> UserAwareness {
method try_update_workspace_member (line 452) | pub async fn try_update_workspace_member(
method invite_and_accepted_workspace_member (line 468) | pub async fn invite_and_accepted_workspace_member(
method try_remove_workspace_member (line 509) | pub async fn try_remove_workspace_member(
method get_workspace_members (line 521) | pub async fn get_workspace_members(&self, workspace_id: &Uuid) -> Vec<...
method try_get_workspace_members (line 529) | pub async fn try_get_workspace_members(
method get_workspace_member (line 536) | pub async fn get_workspace_member(&self, workspace_id: Uuid, user_id: ...
method try_get_workspace_member (line 544) | pub async fn try_get_workspace_member(
method wait_object_sync_complete (line 558) | pub async fn wait_object_sync_complete(&self, object_id: &Uuid) -> Res...
method wait_object_sync_complete_with_secs (line 565) | pub async fn wait_object_sync_complete_with_secs(
method get_blob_metadata (line 598) | pub async fn get_blob_metadata(&self, workspace_id: &Uuid, file_id: &s...
method upload_blob (line 603) | pub async fn upload_blob<T: Into<Bytes>>(&self, file_id: &str, data: T...
method delete_file (line 609) | pub async fn delete_file(&self, file_id: &str) {
method get_workspace_usage (line 615) | pub async fn get_workspace_usage(&self) -> WorkspaceSpaceUsage {
method workspace_id (line 625) | pub async fn workspace_id(&self) -> Uuid {
method email (line 637) | pub async fn email(&self) -> String {
method uid (line 642) | pub async fn uid(&self) -> i64 {
method get_user_profile (line 647) | pub async fn get_user_profile(&self) -> AFUserProfile {
method wait_until_all_embedding (line 652) | pub async fn wait_until_all_embedding(
method wait_until_get_embedding (line 685) | pub async fn wait_until_get_embedding(
method wait_unit_get_search_result (line 704) | pub async fn wait_unit_get_search_result(
method assert_similarity (line 733) | pub async fn assert_similarity(
method create_collab_list (line 758) | pub async fn create_collab_list(
method get_collab (line 769) | pub async fn get_collab(
method get_collab_to_collab (line 787) | pub async fn get_collab_to_collab(
method batch_get_collab (line 802) | pub async fn batch_get_collab(
method workspace_controller_for (line 810) | async fn workspace_controller_for(&self, workspace_id: Uuid) -> Arc<Wo...
method create_and_edit_collab (line 820) | pub async fn create_and_edit_collab(
method create_and_edit_collab_with_data (line 833) | pub async fn create_and_edit_collab_with_data(
method open_workspace_collab (line 896) | pub async fn open_workspace_collab(&mut self, workspace_id: Uuid) {
method open_collab (line 903) | pub async fn open_collab(
method open_collab_with_doc_state (line 928) | pub async fn open_collab_with_doc_state(
method create_collab_with_data (line 963) | pub async fn create_collab_with_data(
method post_realtime_binary (line 994) | pub async fn post_realtime_binary(&self, message: Vec<u8>) -> Result<(...
method disconnect (line 1002) | pub async fn disconnect(&self) {
method reconnect (line 1006) | pub async fn reconnect(&self) {
method get_edit_collab_json (line 1015) | pub async fn get_edit_collab_json(&self, object_id: &Uuid) -> Value {
method publish_collabs (line 1021) | pub async fn publish_collabs(
method duplicate_published_to_workspace (line 1053) | pub async fn duplicate_published_to_workspace(
method get_collab_assertable (line 1102) | pub fn get_collab_assertable(&self, object_id: &Uuid) -> Option<&TestC...
type TestCollab (line 1076) | pub struct TestCollab {
method encode_collab (line 1083) | pub async fn encode_collab(&self) -> EncodedCollab {
method get_json (line 1093) | async fn get_json(&self) -> Result<Value, Error> {
function assert_server_collab (line 1109) | pub async fn assert_server_collab(
function assert_client_collab_value (line 1133) | pub async fn assert_client_collab_value(
function assert_client_collab_within_secs (line 1152) | pub async fn assert_client_collab_within_secs(
function assert_client_collab_include_value (line 1176) | pub async fn assert_client_collab_include_value(
function collect_answer (line 1195) | pub async fn collect_answer(mut stream: QuestionStream) -> String {
function collect_completion_v2 (line 1211) | pub async fn collect_completion_v2(mut stream: CompletionStream) -> (Str...
FILE: libs/client-api-test/src/user.rs
type User (line 19) | pub struct User {
function generate_unique_email (line 24) | pub fn generate_unique_email() -> String {
function admin_user_client (line 28) | pub async fn admin_user_client() -> Client {
function generate_unique_registered_user_with_email (line 44) | pub async fn generate_unique_registered_user_with_email(email: &str) -> ...
function generate_unique_registered_user_client_with_email (line 59) | pub async fn generate_unique_registered_user_client_with_email(email: &s...
function generate_unique_registered_user (line 70) | pub async fn generate_unique_registered_user() -> User {
function generate_unique_registered_user_client (line 75) | pub async fn generate_unique_registered_user_client() -> (Client, User) {
function generate_sign_in_action_link (line 81) | pub async fn generate_sign_in_action_link(email: &str) -> String {
function api_client_with_email (line 92) | pub async fn api_client_with_email(user_email: &str) -> client_api::Clie...
function localhost_gotrue_client (line 114) | pub fn localhost_gotrue_client() -> gotrue::api::Client {
FILE: libs/client-api-test/src/workspace_ops.rs
type WorkspaceManager (line 12) | pub struct WorkspaceManager {
method new (line 19) | pub fn new(device_id: String, temp_dir: Arc<TempDir>) -> Self {
method get_or_create_workspace (line 28) | pub async fn get_or_create_workspace(
method create_workspace_controller (line 49) | async fn create_workspace_controller(
method get_workspace_db_path (line 71) | async fn get_workspace_db_path(&self, workspace_id: Uuid) -> Result<St...
method connect_all (line 83) | pub async fn connect_all(&self, access_token: String) -> Result<(), Er...
method disconnect_all (line 100) | pub async fn disconnect_all(&self) -> Result<(), Error> {
method get_workspace (line 120) | pub fn get_workspace(&self, workspace_id: &Uuid) -> Option<Arc<Workspa...
method set_receive_message (line 129) | pub fn set_receive_message(&self, enabled: bool) {
FILE: libs/client-api/src/collab_sync/collab_sink.rs
constant SEND_INTERVAL (line 20) | pub(crate) const SEND_INTERVAL: Duration = Duration::from_secs(8);
constant COLLAB_SINK_DELAY_MILLIS (line 21) | pub const COLLAB_SINK_DELAY_MILLIS: u64 = 500;
type CollabSink (line 23) | pub struct CollabSink<Sink> {
method drop (line 42) | fn drop(&mut self) {
function new (line 57) | pub fn new(
function queue_msg (line 127) | pub fn queue_msg(&self, f: impl FnOnce(MsgId) -> ClientCollabMessage) {
function queue_init_sync (line 144) | pub fn queue_init_sync(&self, f: impl FnOnce(MsgId) -> ClientCollabMessa...
function did_queue_init_sync (line 157) | pub fn did_queue_init_sync(&self) -> bool {
function should_queue_init_sync (line 164) | pub fn should_queue_init_sync(&self) -> bool {
function clear (line 174) | pub fn clear(&self) {
function pause (line 179) | pub fn pause(&self) {
function resume (line 187) | pub fn resume(&self) {
function validate_response (line 197) | pub async fn validate_response(
function process_next_msg (line 275) | async fn process_next_msg(&self) {
function send_immediately (line 305) | async fn send_immediately(&self, items: Vec<QueueItem<ClientCollabMessag...
function merge (line 348) | fn merge(&self) {
function notify_next (line 401) | pub(crate) fn notify_next(&self) {
function get_next_batch_item (line 406) | fn get_next_batch_item(
function retry_later (line 456) | fn retry_later(weak_notifier: Weak<watch::Sender<SinkSignal>>) {
type CollabSinkRunner (line 462) | pub struct CollabSinkRunner;
method run (line 466) | pub async fn run<E, Sink>(
type MsgIdCounter (line 497) | pub trait MsgIdCounter: Send + Sync + 'static {
method next (line 499) | fn next(&self) -> MsgId;
type DefaultMsgIdCounter (line 503) | pub struct DefaultMsgIdCounter(Arc<AtomicU64>);
method new (line 506) | pub fn new() -> Self {
method next (line 509) | pub(crate) fn next(&self) -> MsgId {
type SyncTimestamp (line 514) | pub(crate) struct SyncTimestamp {
method new (line 519) | fn new() -> Self {
method is_time_for_next_sync (line 528) | pub async fn is_time_for_next_sync(&self, duration: Duration) -> bool {
method update_timestamp (line 532) | async fn update_timestamp(&self) {
type CollabSinkState (line 538) | pub(crate) struct CollabSinkState {
method new (line 546) | fn new() -> Self {
type CollabSyncState (line 558) | pub enum CollabSyncState {
method is_syncing (line 566) | pub fn is_syncing(&self) -> bool {
type SinkSignal (line 572) | pub enum SinkSignal {
type SinkQueue (line 578) | pub(crate) struct SinkQueue<Msg> {
function new (line 586) | pub(crate) fn new() -> Self {
function push_msg (line 592) | pub(crate) fn push_msg(&mut self, msg_id: MsgId, msg: Msg) {
type Target (line 605) | type Target = BinaryHeap<QueueItem<Msg>>;
method deref (line 607) | fn deref(&self) -> &Self::Target {
method deref_mut (line 616) | fn deref_mut(&mut self) -> &mut Self::Target {
type QueueItem (line 622) | pub(crate) struct QueueItem<Msg> {
function new (line 631) | pub fn new(msg: Msg, msg_id: MsgId) -> Self {
function message (line 635) | pub fn message(&self) -> &Msg {
function into_message (line 639) | pub fn into_message(self) -> Msg {
function msg_id (line 643) | pub fn msg_id(&self) -> MsgId {
function mergeable (line 652) | pub fn mergeable(&self) -> bool {
function merge (line 656) | pub fn merge(&mut self, other: &Self, max_size: &usize) -> Result<bool, ...
method eq (line 667) | fn eq(&self, other: &Self) -> bool {
method partial_cmp (line 676) | fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
method cmp (line 685) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
FILE: libs/client-api/src/collab_sync/collab_stream.rs
type CollabRef (line 31) | pub type CollabRef = Weak<RwLock<dyn BorrowMut<Collab> + Send + Sync + '...
type ObserveCollab (line 34) | pub struct ObserveCollab<Sink, Stream> {
method drop (line 47) | fn drop(&mut self) {
function new (line 59) | pub fn new(
function periodic_sync_step_1 (line 103) | async fn periodic_sync_step_1(
function observer_collab_message (line 141) | async fn observer_collab_message(
function process_remote_message (line 239) | async fn process_remote_message(
function pull_missing_updates (line 298) | async fn pull_missing_updates(
function process_message_follow_protocol (line 311) | async fn process_message_follow_protocol(
type SeqNumCounter (line 386) | pub struct SeqNumCounter {
method store_ack_seq_num (line 399) | pub fn store_ack_seq_num(&self, seq_num: u32) -> u32 {
method store_broadcast_seq_num (line 424) | pub fn store_broadcast_seq_num(&self, broadcast_seq_num: u32) -> u32 {
method check_broadcast_contiguous (line 453) | pub fn check_broadcast_contiguous(
method check_ack_broadcast_contiguous (line 472) | pub fn check_ack_broadcast_contiguous(&self, object_id: &Uuid) -> Resu...
FILE: libs/client-api/src/collab_sync/error.rs
type SyncError (line 5) | pub enum SyncError {
method from (line 81) | fn from(value: RTProtocolError) -> Self {
method is_cannot_apply_update (line 100) | pub fn is_cannot_apply_update(&self) -> bool {
type MissUpdateReason (line 47) | pub enum MissUpdateReason {
method fmt (line 55) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
FILE: libs/client-api/src/collab_sync/plugin.rs
type SyncPlugin (line 29) | pub struct SyncPlugin<Sink, Stream, Channel> {
method drop (line 40) | fn drop(&mut self) {
function new (line 59) | pub fn new(
method plugin_type (line 145) | fn plugin_type(&self) -> CollabPluginType {
method did_init (line 149) | fn did_init(&self, _collab: &Collab, _object_id: &str) {
method receive_local_update (line 168) | fn receive_local_update(&self, origin: &CollabOrigin, _object_id: &str, ...
method receive_local_state (line 182) | fn receive_local_state(
method start_init_sync (line 200) | fn start_init_sync(&self) {
method destroy (line 214) | fn destroy(&self) {
type SyncObject (line 222) | pub struct SyncObject {
method new (line 230) | pub fn new(
type Error (line 246) | type Error = anyhow::Error;
method try_from (line 247) | fn try_from(collab_object: CollabObject) -> Result<Self, Self::Error> {
type InitSyncAction (line 257) | pub(crate) struct InitSyncAction<Sink, Stream> {
type Future (line 268) | type Future = Pin<Box<dyn Future<Output = Result<Self::Item, Self::Error...
type Item (line 269) | type Item = ();
type Error (line 270) | type Error = anyhow::Error;
method run (line 272) | fn run(&mut self) -> Self::Future {
type InitSyncRetryCondition (line 296) | pub(crate) struct InitSyncRetryCondition {
method should_retry (line 300) | fn should_retry(&mut self, _error: &anyhow::Error) -> bool {
FILE: libs/client-api/src/collab_sync/sync_control.rs
constant DEFAULT_SYNC_TIMEOUT (line 25) | pub const DEFAULT_SYNC_TIMEOUT: u64 = 10;
type SyncControl (line 27) | pub struct SyncControl<Sink, Stream> {
method drop (line 42) | fn drop(&mut self) {
function new (line 55) | pub fn new(
function pause (line 98) | pub fn pause(&self) {
function resume (line 103) | pub fn resume(&self) {
function subscribe_sync_state (line 108) | pub fn subscribe_sync_state(&self) -> broadcast::Receiver<CollabSyncStat...
function init_sync (line 113) | pub fn init_sync(
type SyncReason (line 128) | pub enum SyncReason {
method fmt (line 142) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
function gen_sync_state (line 153) | fn gen_sync_state<P: CollabSyncProtocol>(
function gen_missing_updates (line 162) | fn gen_missing_updates(collab: &Collab, sv: StateVector) -> Result<Vec<u...
function start_sync (line 174) | pub fn start_sync<E, Sink>(
type Target (line 261) | type Target = Arc<CollabSink<Sink>>;
method deref (line 263) | fn deref(&self) -> &Self::Target {
type SinkConfig (line 268) | pub struct SinkConfig {
method new (line 277) | pub fn new() -> Self {
method send_timeout (line 280) | pub fn send_timeout(mut self, secs: u64) -> Self {
method default (line 287) | fn default() -> Self {
FILE: libs/client-api/src/http.rs
constant X_COMPRESSION_TYPE (line 52) | pub const X_COMPRESSION_TYPE: &str = "X-Compression-Type";
constant X_COMPRESSION_BUFFER_SIZE (line 53) | pub const X_COMPRESSION_BUFFER_SIZE: &str = "X-Compression-Buffer-Size";
constant X_COMPRESSION_TYPE_BROTLI (line 54) | pub const X_COMPRESSION_TYPE_BROTLI: &str = "brotli";
type ClientConfiguration (line 57) | pub struct ClientConfiguration {
method with_compression_buffer_size (line 68) | pub fn with_compression_buffer_size(mut self, compression_buffer_size:...
method with_compression_quality (line 73) | pub fn with_compression_quality(mut self, compression_quality: u32) ->...
method default (line 85) | fn default() -> Self {
type Client (line 106) | pub struct Client {
method new (line 132) | pub fn new(
method base_url (line 198) | pub fn base_url(&self) -> &str {
method ws_addr (line 202) | pub fn ws_addr(&self) -> &str {
method gotrue_url (line 206) | pub fn gotrue_url(&self) -> &str {
method set_ai_model (line 210) | pub fn set_ai_model(&self, model: String) {
method restore_token (line 216) | pub fn restore_token(&self, token: &str) -> Result<(), AppResponseErro...
method get_token_str (line 236) | pub fn get_token_str(&self) -> Result<String, AppResponseError> {
method get_token (line 246) | pub fn get_token(&self) -> Result<GotrueTokenResponse, AppResponseErro...
method get_access_token (line 254) | pub fn get_access_token(&self) -> Result<String, AppResponseError> {
method subscribe_token_state (line 263) | pub fn subscribe_token_state(&self) -> TokenStateReceiver {
method sign_in_password (line 268) | pub async fn sign_in_password(
method sign_in_with_magic_link (line 296) | pub async fn sign_in_with_magic_link(
method sign_in_with_recovery_code (line 318) | pub async fn sign_in_with_recovery_code(
method sign_in_with_passcode (line 342) | pub async fn sign_in_with_passcode(
method sign_in_with_url (line 365) | pub async fn sign_in_with_url(&self, url: &str) -> Result<bool, AppRes...
method generate_oauth_url_with_provider (line 411) | pub async fn generate_oauth_url_with_provider(
method generate_url_with_provider_and_redirect_to (line 440) | pub async fn generate_url_with_provider_and_redirect_to(
method generate_sign_in_action_link (line 489) | pub async fn generate_sign_in_action_link(
method extract_sign_in_url (line 510) | pub async fn extract_sign_in_url(&self, action_link: &str) -> Result<S...
method verify_token (line 531) | async fn verify_token(&self, access_token: &str) -> Result<(User, bool...
method verify_token_cloud (line 539) | async fn verify_token_cloud(&self, access_token: &str) -> Result<bool,...
method invite (line 549) | pub async fn invite(&self, email: &str) -> Result<(), AppResponseError> {
method create_user (line 564) | pub async fn create_user(&self, email: &str, password: &str) -> Result...
method create_email_verified_user (line 582) | pub async fn create_email_verified_user(
method admin_list_users (line 605) | pub async fn admin_list_users(
method token (line 617) | pub fn token(&self) -> Arc<RwLock<ClientToken>> {
method token_expires_at (line 630) | pub fn token_expires_at(&self) -> Result<i64, AppResponseError> {
method access_token (line 652) | pub fn access_token(&self) -> Result<String, AppResponseError> {
method get_profile (line 673) | pub async fn get_profile(&self) -> Result<AFUserProfile, AppResponseEr...
method get_user_workspace_info (line 684) | pub async fn get_user_workspace_info(&self) -> Result<AFUserWorkspaceI...
method delete_workspace (line 695) | pub async fn delete_workspace(&self, workspace_id: &Uuid) -> Result<()...
method create_workspace (line 706) | pub async fn create_workspace(
method patch_workspace (line 721) | pub async fn patch_workspace(&self, params: PatchWorkspaceParam) -> Re...
method get_workspaces (line 732) | pub async fn get_workspaces(&self) -> Result<Vec<AFWorkspace>, AppResp...
method get_workspaces_opt (line 739) | pub async fn get_workspaces_opt(
method get_workspace_folder (line 766) | pub async fn get_workspace_folder(
method open_workspace (line 786) | pub async fn open_workspace(&self, workspace_id: &Uuid) -> Result<AFWo...
method get_workspace_favorite (line 797) | pub async fn get_workspace_favorite(
method get_workspace_recent (line 811) | pub async fn get_workspace_recent(
method get_workspace_trash (line 825) | pub async fn get_workspace_trash(
method join_workspace_by_invitation_code (line 838) | pub async fn join_workspace_by_invitation_code(
method get_invitation_code_info (line 854) | pub async fn get_invitation_code_info(
method create_workspace_invitation_code (line 870) | pub async fn create_workspace_invitation_code(
method get_workspace_invitation_code (line 888) | pub async fn get_workspace_invitation_code(
method delete_workspace_invitation_code (line 904) | pub async fn delete_workspace_invitation_code(
method sign_up (line 921) | pub async fn sign_up(&self, email: &str, password: &str) -> Result<(),...
method sign_out (line 935) | pub async fn sign_out(&self) -> Result<(), AppResponseError> {
method update_user (line 942) | pub async fn update_user(&self, params: UpdateUserParams) -> Result<()...
method delete_user (line 967) | pub async fn delete_user(&self) -> Result<(), AppResponseError> {
method ws_connect_info (line 996) | pub async fn ws_connect_info(&self, auto_refresh: bool) -> Result<Conn...
method get_workspace_usage (line 1014) | pub async fn get_workspace_usage(
method get_server_info (line 1028) | pub async fn get_server_info(&self) -> Result<ServerInfoResponseItem, ...
method refresh_token (line 1052) | pub async fn refresh_token(&self, reason: &str) -> Result<(), AppRespo...
method inner_refresh_token (line 1089) | async fn inner_refresh_token(&self) -> Result<(), AppResponseError> {
method refresh_if_expired (line 1110) | pub async fn refresh_if_expired(&self, ts: i64, reason: &str) -> Resul...
method http_client_without_auth (line 1122) | pub async fn http_client_without_auth(
method http_client_with_auth (line 1132) | pub async fn http_client_with_auth(
method http_client_with_model (line 1167) | pub async fn http_client_with_model(
method http_client_with_auth_compress (line 1184) | pub(crate) async fn http_client_with_auth_compress(
method batch_create_collab_url (line 1212) | pub(crate) fn batch_create_collab_url(&self, workspace_id: &Uuid) -> S...
type RefreshTokenSender (line 120) | pub(crate) type RefreshTokenSender = tokio::sync::oneshot::Sender<Result...
constant DESKTOP_CALLBACK_URL (line 123) | const DESKTOP_CALLBACK_URL: &str = "appflowy-flutter://login-callback";
method fmt (line 1221) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function url_missing_param (line 1229) | fn url_missing_param(param: &str) -> AppResponseError {
function brotli_compress (line 1234) | pub fn brotli_compress(
function blocking_brotli_compress (line 1248) | pub async fn blocking_brotli_compress(
function blocking_brotli_compress (line 1259) | pub async fn blocking_brotli_compress(
function brotli_compress (line 1268) | pub fn brotli_compress(
function attach_request_id (line 1275) | fn attach_request_id(
function process_response_data (line 1283) | pub async fn process_response_data<T>(resp: reqwest::Response) -> Result...
function process_response_error (line 1305) | pub async fn process_response_error(resp: reqwest::Response) -> Result<(...
function extract_request_id (line 1313) | fn extract_request_id(resp: &reqwest::Response) -> Option<String> {
FILE: libs/client-api/src/http_access_request.rs
method get_access_request (line 12) | pub async fn get_access_request(
method create_access_request (line 25) | pub async fn create_access_request(
method approve_access_request (line 39) | pub async fn approve_access_request(
method reject_access_request (line 56) | pub async fn reject_access_request(
FILE: libs/client-api/src/http_ai.rs
method stream_completion_text (line 16) | pub async fn stream_completion_text(
method stream_completion_v2 (line 31) | pub async fn stream_completion_v2(
method summarize_row (line 52) | pub async fn summarize_row(
method translate_row (line 72) | pub async fn translate_row(
method get_local_ai_config (line 93) | pub async fn get_local_ai_config(
method get_model_list (line 112) | pub async fn get_model_list(&self, workspace_id: &Uuid) -> Result<ModelL...
FILE: libs/client-api/src/http_billing.rs
method base_billing_url (line 23) | pub fn base_billing_url(&self) -> &str {
method customer_id (line 27) | pub async fn customer_id(&self) -> Result<String, AppResponseError> {
method create_subscription (line 37) | pub async fn create_subscription(
method create_subscription_v2 (line 55) | pub async fn create_subscription_v2(
method cancel_subscription (line 73) | pub async fn cancel_subscription(
method list_subscription (line 90) | pub async fn list_subscription(
method get_portal_session_link (line 106) | pub async fn get_portal_session_link(&self) -> Result<String, AppRespons...
method get_workspace_usage_and_limit (line 123) | pub async fn get_workspace_usage_and_limit(
method get_workspace_subscriptions (line 143) | pub async fn get_workspace_subscriptions(
method get_active_workspace_subscriptions (line 162) | pub async fn get_active_workspace_subscriptions(
method set_subscription_recurring_interval (line 181) | pub async fn set_subscription_recurring_interval(
method get_subscription_plan_details (line 200) | pub async fn get_subscription_plan_details(
FILE: libs/client-api/src/http_blob.rs
method get_blob_url (line 18) | pub fn get_blob_url(&self, workspace_id: &Uuid, file_id: &str) -> String {
method put_blob (line 26) | pub async fn put_blob<T: Into<Bytes>>(
method put_blob_v1 (line 49) | pub async fn put_blob_v1<T: Into<Bytes>>(
method put_blob_with_content_length (line 80) | pub async fn put_blob_with_content_length<T: Into<Bytes>>(
method get_blob_url_v1 (line 97) | pub fn get_blob_url_v1(&self, workspace_id: &Uuid, parent_dir: &str, fil...
method parse_blob_url_v1 (line 106) | pub fn parse_blob_url_v1(&self, url: &str) -> Option<(Uuid, String, Stri...
method get_blob_v1 (line 129) | pub async fn get_blob_v1(
method delete_blob_v1 (line 141) | pub async fn delete_blob_v1(
method get_blob_v1_metadata (line 161) | pub async fn get_blob_v1_metadata(
method get_blob (line 184) | pub async fn get_blob(&self, url: &str) -> Result<(Mime, Vec<u8>), AppRe...
method get_blob_metadata (line 227) | pub async fn get_blob_metadata(&self, url: &str) -> Result<BlobMetadata,...
method delete_blob (line 238) | pub async fn delete_blob(&self, url: &str) -> Result<(), AppResponseErro...
method get_workspace_all_blob_metadata (line 247) | pub async fn get_workspace_all_blob_metadata(
FILE: libs/client-api/src/http_chat.rs
method create_chat (line 27) | pub async fn create_chat(
method update_chat_settings (line 42) | pub async fn update_chat_settings(
method get_chat_settings (line 60) | pub async fn get_chat_settings(
method delete_chat (line 78) | pub async fn delete_chat(
method create_question (line 93) | pub async fn create_question(
method save_answer (line 113) | pub async fn save_answer(
method stream_answer_v2 (line 132) | pub async fn stream_answer_v2(
method stream_answer_v3 (line 162) | pub async fn stream_answer_v3(
method get_answer (line 183) | pub async fn get_answer(
method update_chat_message (line 203) | pub async fn update_chat_message(
method get_chat_related_question (line 223) | pub async fn get_chat_related_question(
method get_chat_messages (line 242) | pub async fn get_chat_messages(
method get_chat_messages_with_author_uuid (line 278) | pub async fn get_chat_messages_with_author_uuid(
method get_question_message_from_answer_id (line 312) | pub async fn get_question_message_from_answer_id(
method calculate_similarity (line 332) | pub async fn calculate_similarity(
type QuestionStream (line 351) | pub struct QuestionStream {
method new (line 357) | pub fn new<S>(stream: S) -> Self
type QuestionStreamValue (line 369) | pub enum QuestionStreamValue {
type ContextSuggestedQuestion (line 390) | pub struct ContextSuggestedQuestion {
type Item (line 396) | type Item = Result<QuestionStreamValue, AppResponseError>;
method poll_next (line 398) | fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<...
type CompletionStream (line 440) | pub struct CompletionStream {
method new (line 446) | pub fn new<S>(stream: S) -> Self
type CompletionStreamValue (line 458) | pub enum CompletionStreamValue {
type Item (line 463) | type Item = Result<CompletionStreamValue, AppResponseError>;
method poll_next (line 465) | fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<...
FILE: libs/client-api/src/http_collab.rs
method create_collab (line 43) | pub async fn create_collab(&self, params: CreateCollabParams) -> Result<...
method update_collab (line 74) | pub async fn update_collab(&self, params: CreateCollabParams) -> Result<...
method update_web_collab (line 88) | pub async fn update_web_collab(
method batch_post_collab (line 109) | pub async fn batch_post_collab(
method batch_get_collab (line 120) | pub async fn batch_get_collab(
method send_batch_collab_request (line 130) | async fn send_batch_collab_request(
method delete_collab (line 151) | pub async fn delete_collab(&self, params: DeleteCollabParams) -> Result<...
method list_databases (line 166) | pub async fn list_databases(
method list_database_row_ids (line 179) | pub async fn list_database_row_ids(
method get_database_fields (line 196) | pub async fn get_database_fields(
method add_database_field (line 215) | pub async fn add_database_field(
method list_database_row_ids_updated (line 234) | pub async fn list_database_row_ids_updated(
method list_database_row_details (line 253) | pub async fn list_database_row_details(
method add_database_item (line 279) | pub async fn add_database_item(
method upsert_database_item (line 305) | pub async fn upsert_database_item(
method post_realtime_msg (line 331) | pub async fn post_realtime_msg(
method create_collab_list (line 353) | pub async fn create_collab_list(
method get_collab (line 404) | pub async fn get_collab(
method publish_collabs (line 414) | pub async fn publish_collabs<Metadata, Data>(
method check_if_row_document_collab_exists (line 434) | pub async fn check_if_row_document_collab_exists(
method get_collab_embed_info (line 452) | pub async fn get_collab_embed_info(
method batch_get_collab_embed_info (line 470) | pub async fn batch_get_collab_embed_info(
method force_generate_collab_embeddings (line 490) | pub async fn force_generate_collab_embeddings(
method collab_full_sync (line 507) | pub async fn collab_full_sync(
type RetryGetCollabCondition (line 556) | struct RetryGetCollabCondition;
method should_retry (line 558) | fn should_retry(&mut self, error: &AppResponseError) -> bool {
type PublishCollabItemStream (line 563) | pub struct PublishCollabItemStream<Metadata, Data> {
function new (line 570) | pub fn new(publish_collab_items: Vec<PublishCollabItem<Metadata, Data>>)...
type Item (line 584) | type Item = Result<Bytes, std::io::Error>;
method poll_next (line 586) | fn poll_next(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Op...
function serialize_metadata_data (line 608) | fn serialize_metadata_data<Metadata>(m: Metadata, d: &[u8]) -> Result<By...
type GetCollabAction (line 623) | pub(crate) struct GetCollabAction {
method new (line 629) | pub fn new(client: Client, params: QueryCollabParams) -> Self {
type Future (line 635) | type Future = Pin<Box<dyn Future<Output = Result<Self::Item, Self::Error...
type Item (line 636) | type Item = CollabResponse;
type Error (line 637) | type Error = AppResponseError;
method run (line 639) | fn run(&mut self) -> Self::Future {
FILE: libs/client-api/src/http_file.rs
method create_upload (line 28) | pub async fn create_upload(
method upload_part (line 51) | pub async fn upload_part(
method complete_upload (line 81) | pub async fn complete_upload(
method import_file (line 126) | pub async fn import_file(&self, file_path: &Path) -> Result<(), AppRespo...
method create_import (line 170) | pub async fn create_import(
method upload_import_file (line 203) | pub async fn upload_import_file(
method get_import_list (line 233) | pub async fn get_import_list(&self) -> Result<UserImportTask, AppRespons...
method send_ws_msg (line 247) | async fn send_ws_msg(
method connect_ws_url (line 261) | fn connect_ws_url(&self) -> String {
method connect_info (line 265) | async fn connect_info(&self) -> Result<ConnectInfo, WSError> {
function calculate_md5 (line 289) | pub async fn calculate_md5(file_path: &Path) -> Result<String, anyhow::E...
FILE: libs/client-api/src/http_guest.rs
method share_view_with_guest (line 12) | pub async fn share_view_with_guest(
method revoke_shared_view_access (line 30) | pub async fn revoke_shared_view_access(
method get_shared_views (line 49) | pub async fn get_shared_views(
method get_shared_view_details (line 65) | pub async fn get_shared_view_details(
FILE: libs/client-api/src/http_member.rs
method leave_workspace (line 15) | pub async fn leave_workspace(&self, workspace_id: &Uuid) -> Result<(), A...
method get_workspace_members (line 27) | pub async fn get_workspace_members(
method invite_workspace_members (line 41) | pub async fn invite_workspace_members(
method list_workspace_invitations (line 56) | pub async fn list_workspace_invitations(
method get_workspace_invitation (line 69) | pub async fn get_workspace_invitation(
method accept_workspace_invitation (line 82) | pub async fn accept_workspace_invitation(
method add_workspace_members (line 101) | pub async fn add_workspace_members<T: Into<CreateWorkspaceMembers>, W: A...
method update_workspace_member (line 122) | pub async fn update_workspace_member(
method remove_workspace_members (line 138) | pub async fn remove_workspace_members(
method get_workspace_member (line 155) | pub async fn get_workspace_member(
FILE: libs/client-api/src/http_person.rs
method list_workspace_mentionable_persons (line 15) | pub async fn list_workspace_mentionable_persons(
method get_workspace_mentionable_person (line 32) | pub async fn get_workspace_mentionable_person(
method update_workspace_member_profile (line 49) | pub async fn update_workspace_member_profile(
method list_page_mentionable_persons (line 67) | pub async fn list_page_mentionable_persons(
method update_page_mention (line 84) | pub async fn update_page_mention(
method upload_user_image_asset (line 103) | pub async fn upload_user_image_asset(
method get_user_image_asset (line 120) | pub async fn get_user_image_asset(
FILE: libs/client-api/src/http_publish.rs
method list_published_views (line 19) | pub async fn list_published_views(
method set_workspace_publish_namespace (line 38) | pub async fn set_workspace_publish_namespace(
method get_workspace_publish_namespace (line 62) | pub async fn get_workspace_publish_namespace(
method patch_published_collabs (line 78) | pub async fn patch_published_collabs(
method unpublish_collabs (line 93) | pub async fn unpublish_collabs(
method create_comment_on_published_view (line 108) | pub async fn create_comment_on_published_view(
method delete_comment_on_published_view (line 130) | pub async fn delete_comment_on_published_view(
method create_reaction_on_comment (line 150) | pub async fn create_reaction_on_comment(
method delete_reaction_on_comment (line 172) | pub async fn delete_reaction_on_comment(
method set_default_publish_view (line 194) | pub async fn set_default_publish_view(
method delete_default_publish_view (line 212) | pub async fn delete_default_publish_view(
method get_default_publish_view_info (line 228) | pub async fn get_default_publish_view_info(
method get_published_view_comments (line 247) | pub async fn get_published_view_comments(
method get_published_collab_info (line 269) | pub async fn get_published_collab_info(
method get_published_outline (line 283) | pub async fn get_published_outline(
method get_default_published_collab (line 303) | pub async fn get_default_published_collab<T>(
method get_published_collab (line 326) | pub async fn get_published_collab<T>(
method get_published_collab_blob (line 355) | pub async fn get_published_collab_blob(
method duplicate_published_to_workspace (line 379) | pub async fn duplicate_published_to_workspace(
method get_published_view_reactions (line 397) | pub async fn get_published_view_reactions(
FILE: libs/client-api/src/http_quick_note.rs
function quick_note_resources_url (line 10) | fn quick_note_resources_url(base_url: &str, workspace_id: Uuid) -> String {
function quick_note_resource_url (line 14) | fn quick_note_resource_url(base_url: &str, workspace_id: Uuid, quick_not...
method create_quick_note (line 21) | pub async fn create_quick_note(
method list_quick_notes (line 36) | pub async fn list_quick_notes(
method update_quick_note (line 57) | pub async fn update_quick_note(
method delete_quick_note (line 73) | pub async fn delete_quick_note(
FILE: libs/client-api/src/http_search.rs
method search_documents (line 14) | pub async fn search_documents<T: Into<Option<f32>>>(
method generate_search_summary (line 44) | pub async fn generate_search_summary(
FILE: libs/client-api/src/http_settings.rs
method get_workspace_settings (line 12) | pub async fn get_workspace_settings<T: AsRef<str>>(
method update_workspace_settings (line 30) | pub async fn update_workspace_settings<T: AsRef<str>>(
FILE: libs/client-api/src/http_template.rs
function template_api_prefix (line 14) | fn template_api_prefix(base_url: &str) -> String {
function category_resources_url (line 18) | fn category_resources_url(base_url: &str) -> String {
function category_resource_url (line 22) | fn category_resource_url(base_url: &str, category_id: Uuid) -> String {
function template_creator_resources_url (line 26) | fn template_creator_resources_url(base_url: &str) -> String {
function template_creator_resource_url (line 30) | fn template_creator_resource_url(base_url: &str, creator_id: Uuid) -> St...
function template_resources_url (line 38) | fn template_resources_url(base_url: &str) -> String {
function template_resource_url (line 42) | fn template_resource_url(base_url: &str, view_id: Uuid) -> String {
method create_template_category (line 47) | pub async fn create_template_category(
method get_template_categories (line 62) | pub async fn get_template_categories(
method get_template_category (line 80) | pub async fn get_template_category(
method delete_template_category (line 93) | pub async fn delete_template_category(&self, category_id: Uuid) -> Resul...
method update_template_category (line 103) | pub async fn update_template_category(
method create_template_creator (line 119) | pub async fn create_template_creator(
method get_template_creators (line 140) | pub async fn get_template_creators(
method get_template_creator (line 156) | pub async fn get_template_creator(
method delete_template_creator (line 169) | pub async fn delete_template_creator(&self, creator_id: Uuid) -> Result<...
method update_template_creator (line 179) | pub async fn update_template_creator(
method create_template (line 201) | pub async fn create_template(
method get_template (line 216) | pub async fn get_template(
method get_templates (line 230) | pub async fn get_templates(
method update_template (line 253) | pub async fn update_template(
method delete_template (line 269) | pub async fn delete_template(&self, view_id: Uuid) -> Result<(), AppResp...
FILE: libs/client-api/src/http_view.rs
method create_folder_view (line 16) | pub async fn create_folder_view(
method create_workspace_page_view (line 34) | pub async fn create_workspace_page_view(
method favorite_page_view (line 49) | pub async fn favorite_page_view(
method move_workspace_page_view (line 68) | pub async fn move_workspace_page_view(
method move_workspace_page_view_to_trash (line 87) | pub async fn move_workspace_page_view_to_trash(
method restore_workspace_page_view_from_trash (line 105) | pub async fn restore_workspace_page_view_from_trash(
method restore_all_workspace_page_views_from_trash (line 123) | pub async fn restore_all_workspace_page_views_from_trash(
method add_recent_pages (line 140) | pub async fn add_recent_pages(
method delete_workspace_page_view_from_trash (line 158) | pub async fn delete_workspace_page_view_from_trash(
method delete_all_workspace_page_views_from_trash (line 175) | pub async fn delete_all_workspace_page_views_from_trash(
method update_workspace_page_view (line 192) | pub async fn update_workspace_page_view(
method get_workspace_page_view (line 211) | pub async fn get_workspace_page_view(
method publish_page (line 228) | pub async fn publish_page(
method unpublish_page (line 247) | pub async fn unpublish_page(
method create_space (line 265) | pub async fn create_space(
method update_space (line 280) | pub async fn update_space(
method update_page_name (line 299) | pub async fn update_page_name(
method update_page_icon (line 318) | pub async fn update_page_icon(
method update_page_extra (line 337) | pub async fn update_page_extra(
method remove_page_icon (line 356) | pub async fn remove_page_icon(
method append_block_to_page (line 374) | pub async fn append_block_to_page(
method create_database_view (line 393) | pub async fn create_database_view(
method duplicate_view_and_children (line 412) | pub async fn duplicate_view_and_children(
FILE: libs/client-api/src/notify.rs
type TokenStateReceiver (line 7) | pub type TokenStateReceiver = Receiver<TokenState>;
type TokenState (line 10) | pub enum TokenState {
type ClientToken (line 15) | pub struct ClientToken {
method new (line 21) | pub(crate) fn new() -> Self {
method is_empty (line 29) | pub fn is_empty(&self) -> bool {
method try_get (line 33) | pub fn try_get(&self) -> Result<String, Error> {
method set (line 48) | pub(crate) fn set(&mut self, new_token: GotrueTokenResponse) {
method unset (line 82) | pub(crate) fn unset(&mut self) {
method subscribe (line 93) | pub(crate) fn subscribe(&self) -> Receiver<TokenState> {
type Target (line 99) | type Target = Option<GotrueTokenResponse>;
method deref (line 101) | fn deref(&self) -> &Self::Target {
method deref_mut (line 107) | fn deref_mut(&mut self) -> &mut Self::Target {
FILE: libs/client-api/src/ping.rs
type ServerFixIntervalPing (line 9) | pub(crate) struct ServerFixIntervalPing {
method new (line 22) | pub(crate) fn new(
method stop (line 42) | pub(crate) async fn stop(&self) {
method run (line 46) | pub(crate) fn run(&mut self) {
FILE: libs/client-api/src/retry.rs
type RefreshTokenAction (line 19) | pub(crate) struct RefreshTokenAction {
method new (line 25) | pub fn new(token: Arc<RwLock<ClientToken>>, gotrue_client: gotrue::api...
type Future (line 34) | type Future = Pin<Box<dyn Future<Output = Result<Self::Item, Self::Error...
type Item (line 35) | type Item = ();
type Error (line 36) | type Error = GoTrueError;
method run (line 38) | fn run(&mut self) -> Self::Future {
type RefreshTokenRetryCondition (line 72) | pub(crate) struct RefreshTokenRetryCondition;
method should_retry (line 74) | fn should_retry(&mut self, error: &GoTrueError) -> bool {
function retry_connect (line 79) | pub async fn retry_connect(
type ConnectAction (line 92) | struct ConnectAction {
method new (line 97) | fn new(connect_provider: Arc<dyn WSClientConnectURLProvider>) -> Self {
type Future (line 103) | type Future = Pin<Box<dyn Future<Output = Result<Self::Item, Self::Error...
type Item (line 104) | type Item = WebSocketStream;
type Error (line 105) | type Error = WSError;
method run (line 107) | fn run(&mut self) -> Self::Future {
type RetryCondition (line 125) | struct RetryCondition {
method should_retry (line 129) | fn should_retry(&mut self, error: &WSError) -> bool {
FILE: libs/client-api/src/v2/actor.rs
type WorkspaceControllerActor (line 43) | pub(super) struct WorkspaceControllerActor {
constant PING_INTERVAL (line 61) | const PING_INTERVAL: Duration = Duration::from_secs(4);
constant PING_TIMEOUT (line 62) | const PING_TIMEOUT: Duration = Duration::from_secs(20);
constant REMOTE_ORIGIN (line 63) | const REMOTE_ORIGIN: &'static str = "af";
method new (line 65) | pub fn new(db: Db, options: Options, last_message_id: Rid) -> Arc<Self> {
method subscribe_changed_collab (line 90) | pub fn subscribe_changed_collab(&self) -> tokio::sync::broadcast::Rece...
method subscribe_notification (line 94) | pub fn subscribe_notification(&self) -> tokio::sync::broadcast::Receiv...
method client_id (line 98) | pub fn client_id(&self) -> ClientID {
method workspace_id (line 102) | pub fn workspace_id(&self) -> &Uuid {
method trigger (line 106) | pub fn trigger(&self, action: WorkspaceAction) {
method status_channel (line 112) | pub fn status_channel(&self) -> &tokio::sync::watch::Receiver<Connecti...
method get_collab (line 116) | pub fn get_collab(&self, object_id: &ObjectId) -> Option<CollabRef> {
method remove_collab (line 121) | pub fn remove_collab(&self, object_id: &ObjectId) {
method delete_collab (line 126) | pub fn delete_collab(&self, object_id: &ObjectId) -> anyhow::Result<()> {
method last_message_id (line 132) | pub fn last_message_id(&self) -> Rid {
method bind_and_cache_collab_ref (line 147) | pub async fn bind_and_cache_collab_ref(
method cache_collab_ref (line 162) | pub fn cache_collab_ref(
method unbind (line 174) | pub async fn unbind(&self, object_id: &ObjectId) {
method bind (line 199) | pub fn bind(
method set_connection_status (line 252) | pub(crate) fn set_connection_status(&self, status: ConnectionStatus) {
method ping (line 257) | async fn ping(&self) -> anyhow::Result<()> {
method actor_loop (line 266) | async fn actor_loop(
method handle_action (line 313) | async fn handle_action(actor: &Arc<Self>, action: WorkspaceAction) {
method handle_send (line 367) | async fn handle_send(&self, msg: ClientMessage, source: ActionSource) ...
method send_message (line 397) | async fn send_message(&self, msg: ClientMessage) -> anyhow::Result<()> {
method set_collab_sync_state (line 448) | async fn set_collab_sync_state(&self, object_id: &ObjectId, sync_state...
method handle_connect (line 457) | pub(crate) async fn handle_connect(
method remote_receiver_task (line 527) | async fn remote_receiver_task(
method remote_receiver_loop (line 547) | async fn remote_receiver_loop(
method handle_receive (line 623) | async fn handle_receive(&self, msg: ServerMessage) -> anyhow::Result<(...
method send_notification (line 717) | async fn send_notification(&self, notification: WorkspaceNotification) {
method publish_pending_collabs (line 733) | async fn publish_pending_collabs(&self) -> anyhow::Result<()> {
method spawn_publish_inactive_collabs (line 809) | pub fn spawn_publish_inactive_collabs(
method check_missing_updates (line 869) | fn check_missing_updates(
method save_remote_update (line 904) | async fn save_remote_update(
method persist_update (line 977) | async fn persist_update(
method save_awareness_update (line 1008) | async fn save_awareness_update(
method handle_disconnect (line 1029) | async fn handle_disconnect(&self) -> anyhow::Result<()> {
method publish_manifest (line 1053) | fn publish_manifest(&self, object_id: ObjectId, collab: &Collab, colla...
method publish_update (line 1074) | fn publish_update(
method publish_awareness (line 1091) | fn publish_awareness(
method ws_sink (line 1112) | fn ws_sink(&self) -> Option<Arc<Mutex<SplitSink<WsConn, Message>>>> {
method establish_connection (line 1119) | async fn establish_connection(
type WorkspaceAction (line 1164) | pub(super) enum WorkspaceAction {
type ActionSource (line 1174) | pub(super) enum ActionSource {
method from (line 1198) | fn from(value: Option<Rid>) -> Self {
method fmt (line 1180) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function from (line 1189) | fn from(value: ActionSource) -> Self {
type WsConn (line 1206) | pub(super) type WsConn = tokio_tungstenite::WebSocketStream<MaybeTlsStre...
type WorkspaceControllerMailbox (line 1208) | pub(super) type WorkspaceControllerMailbox = tokio::sync::mpsc::Unbounde...
type CachedCollab (line 1212) | struct CachedCollab {
method new (line 1218) | fn new(collab_ref: WeakCollabRef, collab_type: CollabType) -> Self {
method upgrade (line 1225) | fn upgrade(&self) -> Option<CollabRef> {
type ChangedCollab (line 1231) | pub struct ChangedCollab {
method borrow (line 1249) | fn borrow(&self) -> &ObjectId {
method eq (line 1237) | fn eq(&self, other: &Self) -> bool {
method hash (line 1244) | fn hash<H: Hasher>(&self, state: &mut H) {
constant OBSERVER_KEY (line 1254) | const OBSERVER_KEY: &str = "af";
function unobserve_awareness (line 1256) | fn unobserve_awareness(awareness: &Awareness) {
function observe_awareness (line 1261) | fn observe_awareness(
function unobserve_update (line 1284) | fn unobserve_update(object_id: &ObjectId, awareness: &Awareness) -> anyh...
function observe_update (line 1291) | fn observe_update(
function publish_inactive_collab (line 1332) | fn publish_inactive_collab(
function num_of_unsynced_collab (line 1358) | fn num_of_unsynced_collab(cache: Arc<DashMap<ObjectId, CachedCollab>>) -...
FILE: libs/client-api/src/v2/compactor.rs
type ChannelReceiverCompactor (line 11) | pub(super) struct ChannelReceiverCompactor {
method new (line 17) | pub(super) fn new(receiver: UnboundedReceiver<WorkspaceAction>) -> Self {
method recv (line 24) | pub async fn recv(&mut self) -> Option<WorkspaceAction> {
method try_prefetch (line 52) | fn try_prefetch(
function update_compaction (line 172) | async fn update_compaction() {
function no_compaction_for_different_object_ids (line 225) | async fn no_compaction_for_different_object_ids() {
function mixed_message_types_break_compaction (line 291) | async fn mixed_message_types_break_compaction() {
function single_update_no_compaction (line 360) | async fn single_update_no_compaction() {
function remote_updates_not_compacted (line 401) | async fn remote_updates_not_compacted() {
function size_threshold_limits_compaction (line 441) | async fn size_threshold_limits_compaction() {
function mixed_update_flags_compaction (line 477) | async fn mixed_update_flags_compaction() {
function peeked_message_handling (line 525) | async fn peeked_message_handling() {
function different_collab_types_not_compacted (line 599) | async fn different_collab_types_not_compacted() {
function same_collab_type_and_object_compacted (line 676) | async fn same_collab_type_and_object_compacted() {
FILE: libs/client-api/src/v2/conn_retry.rs
type ReconnectTarget (line 13) | pub trait ReconnectTarget: Send + Sync {
method status_channel (line 14) | fn status_channel(&self) -> &tokio::sync::watch::Receiver<ConnectionSt...
method attempt_connect (line 16) | async fn attempt_connect(self: Arc<Self>, token: String) -> Result<(),...
method set_disconnected (line 18) | fn set_disconnected(&self, reason: DisconnectedReason);
method status_channel (line 215) | fn status_channel(&self) -> &watch::Receiver<ConnectionStatus> {
method attempt_connect (line 219) | async fn attempt_connect(self: Arc<Self>, _token: String) -> Result<()...
method set_disconnected (line 230) | fn set_disconnected(&self, reason: DisconnectedReason) {
type RetryConfig (line 22) | pub struct RetryConfig {
method default (line 32) | fn default() -> Self {
type ReconnectionManager (line 42) | pub(crate) struct ReconnectionManager {
method with_config_for_target (line 51) | pub fn with_config_for_target(
method new_for_target (line 64) | pub fn new_for_target(target: Arc<dyn ReconnectTarget + Send + Sync>) ...
method new (line 69) | pub fn new(actor: Arc<WorkspaceControllerActor>) -> Self {
method set_access_token (line 75) | pub fn set_access_token(&self, token: String) {
method trigger_reconnect (line 79) | pub fn trigger_reconnect(&self, reason: &str) {
method retry_with_exponential_backoff (line 107) | async fn retry_with_exponential_backoff(
type FakeTarget (line 177) | struct FakeTarget {
method new (line 186) | fn new(
method get_last_disconnect_reason (line 204) | async fn get_last_disconnect_reason(&self) -> Option<DisconnectedReaso...
method set_status (line 208) | async fn set_status(&self, status: ConnectionStatus) {
function test_reconnect_succeeds_immediately (line 242) | async fn test_reconnect_succeeds_immediately() {
function test_reconnect_succeeds_after_failures (line 270) | async fn test_reconnect_succeeds_after_failures() {
function test_reconnect_fails_after_max_attempts (line 307) | async fn test_reconnect_fails_after_max_attempts() {
function test_aborts_when_already_connecting (line 353) | async fn test_aborts_when_already_connecting() {
function test_aborts_on_non_retriable_disconnect (line 383) | async fn test_aborts_on_non_retriable_disconnect() {
function test_trigger_reconnect_with_valid_token (line 414) | async fn test_trigger_reconnect_with_valid_token() {
function test_trigger_reconnect_without_token (line 448) | async fn test_trigger_reconnect_without_token() {
function test_trigger_reconnect_when_already_in_progress (line 470) | async fn test_trigger_reconnect_when_already_in_progress() {
function test_exponential_backoff_timing (line 503) | async fn test_exponential_backoff_timing() {
function test_spawn_reconnection_integration (line 545) | async fn test_spawn_reconnection_integration() {
function test_spawn_reconnection_ignores_non_retriable (line 584) | async fn test_spawn_reconnection_ignores_non_retriable() {
function test_start_reconnect_status_triggers_reconnection (line 620) | async fn test_start_reconnect_status_triggers_reconnection() {
function test_start_reconnect_without_token (line 655) | async fn test_start_reconnect_without_token() {
function test_multiple_status_changes_handled_correctly (line 688) | async fn test_multiple_status_changes_handled_correctly() {
function test_connected_status_ignored_by_retry_logic (line 737) | async fn test_connected_status_ignored_by_retry_logic() {
function test_status_change_during_retry_sleep (line 774) | async fn test_status_change_during_retry_sleep() {
function test_empty_string_token (line 823) | async fn test_empty_string_token() {
function test_token_change_during_reconnection (line 842) | async fn test_token_change_during_reconnection() {
function test_very_long_token (line 875) | async fn test_very_long_token() {
function test_specific_error_codes_handling (line 903) | async fn test_specific_error_codes_handling() {
function test_target_weak_reference_expired (line 948) | async fn test_target_weak_reference_expired() {
function test_backoff_delay_capping_behavior (line 977) | async fn test_backoff_delay_capping_behavior() {
function test_multiple_spawn_reconnection_calls (line 1035) | async fn test_multiple_spawn_reconnection_calls() {
function test_state_consistency_during_concurrent_operations (line 1079) | async fn test_state_consistency_during_concurrent_operations() {
function test_zero_max_attempts (line 1171) | async fn test_zero_max_attempts() {
function test_zero_initial_delay (line 1199) | async fn test_zero_initial_delay() {
function test_max_delay_smaller_than_initial_delay (line 1230) | async fn test_max_delay_smaller_than_initial_delay() {
function test_connecting_status_prevents_reconnection (line 1263) | async fn test_connecting_status_prevents_reconnection() {
function test_spawn_reconnection_terminates_when_manager_dropped (line 1293) | async fn test_spawn_reconnection_terminates_when_manager_dropped() {
function test_retriable_vs_non_retriable_disconnect_reasons (line 1327) | async fn test_retriable_vs_non_retriable_disconnect_reasons() {
FILE: libs/client-api/src/v2/controller.rs
type WorkspaceController (line 28) | pub struct WorkspaceController {
method new (line 34) | pub fn new(options: Options, workspace_db_path: &str) -> anyhow::Resul...
method new_with_rocksdb (line 39) | pub fn new_with_rocksdb<T: Into<DbHolder>>(options: Options, db: T) ->...
method new_with_db (line 44) | fn new_with_db(options: Options, db: Db) -> anyhow::Result<Self> {
method subscribe_changed_collab (line 58) | pub fn subscribe_changed_collab(&self) -> tokio::sync::broadcast::Rece...
method is_connected (line 62) | pub fn is_connected(&self) -> bool {
method is_disconnected (line 69) | pub fn is_disconnected(&self) -> bool {
method connect_state (line 76) | pub fn connect_state(&self) -> ConnectState {
method subscribe_connect_state (line 80) | pub fn subscribe_connect_state(&self) -> impl Stream<Item = ConnectSta...
method subscribe_notification (line 85) | pub fn subscribe_notification(&self) -> tokio::sync::broadcast::Receiv...
method connect (line 89) | pub async fn connect(&self, access_token: String) -> anyhow::Result<()> {
method disconnect (line 107) | pub async fn disconnect(&self) -> anyhow::Result<()> {
method close (line 114) | pub async fn close(&mut self) -> anyhow::Result<()> {
method client_id (line 118) | pub fn client_id(&self) -> ClientID {
method workspace_id (line 122) | pub fn workspace_id(&self) -> WorkspaceId {
method last_message_id (line 126) | pub fn last_message_id(&self) -> Rid {
method bind_and_cache_collab_ref (line 139) | pub async fn bind_and_cache_collab_ref(
method bind (line 147) | pub fn bind(&self, collab: &mut Collab, collab_type: CollabType) -> an...
method cache_collab_ref (line 151) | pub async fn cache_collab_ref(
method enable_receive_message (line 166) | pub fn enable_receive_message(&self) {
method disable_receive_message (line 173) | pub fn disable_receive_message(&self) {
type DisconnectedReason (line 182) | pub enum DisconnectedReason {
method from (line 218) | fn from(value: appflowy_proto::Error) -> Self {
method from (line 224) | fn from(value: Error) -> Self {
method from (line 239) | fn from(value: AppResponseError) -> Self {
method retriable (line 248) | pub fn retriable(&self) -> bool {
method retriable_when_editing (line 255) | pub fn retriable_when_editing(&self) -> bool {
method fmt (line 197) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type ConnectionStatus (line 267) | pub enum ConnectionStatus {
method disconnected_reason (line 282) | pub fn disconnected_reason(&self) -> &Option<DisconnectedReason> {
method default (line 291) | fn default() -> Self {
method fmt (line 297) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type ConnectState (line 311) | pub enum ConnectState {
method from (line 318) | fn from(value: &ConnectionStatus) -> Self {
method is_connected (line 331) | pub fn is_connected(&self) -> bool {
type Options (line 337) | pub struct Options {
method status_channel (line 354) | fn status_channel(&self) -> &tokio::sync::watch::Receiver<ConnectionStat...
method attempt_connect (line 358) | async fn attempt_connect(self: Arc<Self>, token: String) -> Result<(), A...
method set_disconnected (line 363) | fn set_disconnected(&self, reason: DisconnectedReason) {
function spawn_reconnection (line 370) | pub fn spawn_reconnection(
function check_and_reconnect (line 408) | fn check_and_reconnect(
FILE: libs/client-api/src/v2/db.rs
type Db (line 24) | pub(crate) struct Db {
method open (line 32) | pub fn open(workspace_id: Uuid, uid: i64, path: &str) -> Result<Self, ...
method open_with_rocksdb (line 38) | pub fn open_with_rocksdb<T: Into<DbHolder>>(
method client_id (line 58) | pub fn client_id(&self) -> ClientID {
method last_message_id (line 62) | pub fn last_message_id(&self) -> Result<Rid, PersistenceError> {
method init_collab (line 71) | pub fn init_collab(
method get_state_vector (line 113) | pub fn get_state_vector(&self, object_id: &ObjectId) -> Result<StateVe...
method batch_get_state_vector (line 130) | pub fn batch_get_state_vector(
method load (line 174) | pub fn load(&self, collab: &mut Collab, flush: bool) -> Result<(), Per...
method remove_doc (line 228) | pub fn remove_doc(&self, object_id: &Uuid) -> Result<(), PersistenceEr...
method save_update (line 241) | pub fn save_update(
type CollabKVActionExt (line 292) | pub trait CollabKVActionExt<'a>: CollabKVAction<'a>
method client_id (line 296) | fn client_id(&self, workspace_id: &Uuid) -> Result<ClientID, Persisten...
method last_message_id (line 318) | fn last_message_id(&self, workspace_id: &WorkspaceId) -> Result<Rid, P...
method update_last_message_id (line 330) | fn update_last_message_id(
constant META_SPACE (line 384) | pub const META_SPACE: u8 = 3;
constant CLIENT_ID (line 387) | pub const CLIENT_ID: u8 = 1;
constant LAST_MESSAGE_ID (line 390) | pub const LAST_MESSAGE_ID: u8 = 2;
constant TERMINATOR (line 392) | pub const TERMINATOR: u8 = 0;
function make_client_id_key (line 394) | pub fn make_client_id_key(workspace_id: &Uuid) -> SmallVec<[u8; 19]> {
function make_last_message_id_key (line 402) | pub fn make_last_message_id_key(workspace_id: &Uuid) -> SmallVec<[u8; 19...
type DbHolder (line 417) | pub enum DbHolder {
method get (line 430) | pub fn get(&self) -> anyhow::Result<Arc<KVTransactionDBRocksdbImpl>> {
method from (line 439) | fn from(value: KVTransactionDBRocksdbImpl) -> Self {
method from (line 445) | fn from(value: Weak<KVTransactionDBRocksdbImpl>) -> Self {
FILE: libs/client-api/src/v2/mod.rs
type WorkspaceController (line 6) | pub type WorkspaceController = controller::WorkspaceController;
type WorkspaceControllerOptions (line 7) | pub type WorkspaceControllerOptions = controller::Options;
type WorkspaceId (line 14) | pub type WorkspaceId = uuid::Uuid;
type ObjectId (line 15) | pub type ObjectId = uuid::Uuid;
FILE: libs/client-api/src/ws/client.rs
type WSClientConfig (line 29) | pub struct WSClientConfig {
method default (line 40) | fn default() -> Self {
type WSClientHttpSender (line 50) | pub trait WSClientHttpSender: Send + Sync {
method send_ws_msg (line 51) | async fn send_ws_msg(&self, device_id: &str, message: Message) -> Resu...
type WSClientConnectURLProvider (line 55) | pub trait WSClientConnectURLProvider: Send + Sync {
method connect_ws_url (line 56) | fn connect_ws_url(&self) -> String;
method connect_info (line 57) | async fn connect_info(&self) -> Result<ConnectInfo, WSError>;
type WeakChannel (line 60) | type WeakChannel = Weak<WebSocketChannel<ServerCollabMessage>>;
type ChannelByObjectId (line 61) | type ChannelByObjectId = HashMap<String, Vec<WeakChannel>>;
type WSConnectStateReceiver (line 62) | pub type WSConnectStateReceiver = Receiver<ConnectState>;
type StateNotify (line 64) | pub(crate) type StateNotify = parking_lot::Mutex<ConnectStateNotify>;
constant MAXIMUM_MESSAGE_SIZE (line 68) | const MAXIMUM_MESSAGE_SIZE: usize = 40960;
constant MAXIMUM_BATCH_MESSAGE_SIZE (line 69) | const MAXIMUM_BATCH_MESSAGE_SIZE: usize = 20480;
type WSClient (line 71) | pub struct WSClient {
method new (line 89) | pub fn new<H, C>(config: WSClientConfig, http_sender: H, connect_provi...
method connect (line 121) | pub async fn connect(&self) -> Result<(), WSError> {
method spawn_aggregate_message (line 182) | fn spawn_aggregate_message(&self) {
method start_ping (line 194) | async fn start_ping(&self) -> tokio::sync::mpsc::Sender<()> {
method spawn_send_client_message (line 210) | fn spawn_send_client_message(
method spawn_recv_server_message (line 259) | fn spawn_recv_server_message(
method subscribe_collab (line 346) | pub fn subscribe_collab(
method subscribe_user_changed (line 369) | pub fn subscribe_user_changed(&self) -> Receiver<UserMessage> {
method subscribe_connect_state (line 373) | pub fn subscribe_connect_state(&self) -> WSConnectStateReceiver {
method is_connected (line 377) | pub fn is_connected(&self) -> bool {
method disconnect (line 381) | pub async fn disconnect(&self) {
method clean (line 392) | async fn clean(&self) {
method send (line 404) | pub fn send<M: Into<Message>>(&self, msg: M) -> Result<(), WSError> {
method get_state (line 409) | pub fn get_state(&self) -> ConnectState {
method set_state (line 413) | async fn set_state(&self, state: ConnectState) {
method disable_receive_message (line 444) | pub fn disable_receive_message(&self) {
method enable_receive_message (line 450) | pub fn enable_receive_message(&self) {
function handle_collab_message (line 419) | fn handle_collab_message(
function send_message (line 457) | async fn send_message(
type ConnectInfo (line 482) | pub struct ConnectInfo {
method fmt (line 489) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method from (line 498) | fn from(info: ConnectInfo) -> HeaderMap {
FILE: libs/client-api/src/ws/error.rs
type WSError (line 5) | pub enum WSError {
method should_stop (line 26) | pub fn should_stop(&self) -> bool {
method from (line 32) | fn from(value: Error) -> Self {
FILE: libs/client-api/src/ws/handler.rs
type WebSocketChannel (line 12) | pub struct WebSocketChannel<T> {
method drop (line 20) | fn drop(&mut self) {
function new (line 30) | pub fn new(object_id: &str, rt_msg_sender: Sender<Vec<ClientCollabMessag...
function forward_to_stream (line 42) | pub(crate) fn forward_to_stream(&self, msg: T) {
function sink (line 49) | pub fn sink(&self) -> BroadcastSink<Vec<ClientCollabMessage>> {
function stream (line 64) | pub fn stream(&self) -> UnboundedReceiverStream<Result<T, anyhow::Error>> {
type BroadcastSink (line 83) | pub struct BroadcastSink<T>(pub UnboundedSender<T>);
function new (line 86) | pub fn new(tx: UnboundedSender<T>) -> Self {
type Error (line 95) | type Error = anyhow::Error;
function poll_ready (line 97) | fn poll_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Resul...
function start_send (line 101) | fn start_send(self: Pin<&mut Self>, item: T) -> Result<(), Self::Error> {
function poll_flush (line 106) | fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Resul...
function poll_close (line 110) | fn poll_close(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Resul...
FILE: libs/client-api/src/ws/msg_queue.rs
type AggregateMessagesSender (line 14) | pub type AggregateMessagesSender = mpsc::Sender<Message>;
type AggregateMessagesReceiver (line 15) | pub type AggregateMessagesReceiver = mpsc::Receiver<Message>;
type AggregateMessageQueue (line 17) | pub struct AggregateMessageQueue {
method new (line 25) | pub fn new(maximum_payload_size: usize) -> Self {
method push (line 34) | pub async fn push(&self, msg: Vec<ClientCollabMessage>) {
method clear (line 44) | pub async fn clear(&self) {
method set_sender (line 49) | pub async fn set_sender(&self, sender: AggregateMessagesSender) {
function handle_tick (line 83) | async fn handle_tick(
function send_batch_message (line 114) | async fn send_batch_message(
function next_batch_message (line 139) | async fn next_batch_message(
function log_message_map (line 174) | fn log_message_map(messages_map: &HashMap<String, Vec<ClientCollabMessag...
function log_message_map (line 197) | fn log_message_map(_messages_map: &HashMap<String, Vec<ClientCollabMessa...
type SeenId (line 200) | struct SeenId {
method from (line 207) | fn from(msg: &ClientCollabMessage) -> Self {
function calculate_next_tick_duration (line 222) | fn calculate_next_tick_duration(
FILE: libs/client-api/src/ws/state.rs
type ConnectStateNotify (line 4) | pub struct ConnectStateNotify {
method new (line 10) | pub(crate) fn new() -> Self {
method set_state (line 18) | pub(crate) fn set_state(&mut self, state: ConnectState) {
method subscribe (line 26) | pub(crate) fn subscribe(&self) -> Receiver<ConnectState> {
type ConnectState (line 32) | pub enum ConnectState {
method is_connecting (line 42) | pub fn is_connecting(&self) -> bool {
method is_connected (line 46) | pub fn is_connected(&self) -> bool {
method is_timeout (line 51) | pub fn is_timeout(&self) -> bool {
method is_lost (line 56) | pub fn is_lost(&self) -> bool {
FILE: libs/client-websocket/src/error.rs
type Result (line 7) | pub type Result<T, E = Error> = result::Result<T, E>;
type Error (line 11) | pub enum Error {
method from (line 73) | fn from(_: str::Utf8Error) -> Self {
method from (line 79) | fn from(_: string::FromUtf8Error) -> Self {
method from (line 85) | fn from(err: http::header::InvalidHeaderValue) -> Self {
method from (line 91) | fn from(err: http::header::InvalidHeaderName) -> Self {
method from (line 97) | fn from(_: http::header::ToStrError) -> Self {
method from (line 103) | fn from(err: http::uri::InvalidUri) -> Self {
method from (line 109) | fn from(err: http::status::InvalidStatusCode) -> Self {
method from (line 115) | fn from(err: httparse::Error) -> Self {
type CapacityError (line 125) | pub enum CapacityError {
type ProtocolError (line 142) | pub enum ProtocolError {
type UrlError (line 226) | pub enum UrlError {
type Data (line 249) | pub enum Data {
method fmt (line 261) | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
FILE: libs/client-websocket/src/lib.rs
function connect_async (line 19) | pub async fn connect_async<S: AsRef<str>>(url: S, headers: HeaderMap) ->...
FILE: libs/client-websocket/src/message.rs
type Message (line 3) | pub enum Message {
method text (line 16) | pub fn text<S>(string: S) -> Message
method binary (line 24) | pub fn binary<B>(bin: B) -> Message
method is_text (line 32) | pub fn is_text(&self) -> bool {
method is_binary (line 37) | pub fn is_binary(&self) -> bool {
method is_ping (line 42) | pub fn is_ping(&self) -> bool {
method is_pong (line 47) | pub fn is_pong(&self) -> bool {
method is_close (line 52) | pub fn is_close(&self) -> bool {
method len (line 57) | pub fn len(&self) -> usize {
method is_empty (line 69) | pub fn is_empty(&self) -> bool {
method into_data (line 74) | pub fn into_data(self) -> Vec<u8> {
method into_text (line 86) | pub fn into_text(self) -> Result<String, crate::Error> {
method to_text (line 99) | pub fn to_text(&self) -> Result<&str, crate::Error> {
method from (line 112) | fn from(string: String) -> Self {
method from (line 118) | fn from(string: &'s str) -> Self {
method from (line 124) | fn from(data: &'b [u8]) -> Self {
method from (line 130) | fn from(data: Vec<u8>) -> Self {
method fmt (line 150) | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::result::Result<(), ...
function from (line 136) | fn from(message: Message) -> Self {
type Error (line 142) | type Error = crate::Error;
method try_from (line 144) | fn try_from(value: Message) -> std::result::Result<Self, Self::Error> {
type CloseFrame (line 161) | pub struct CloseFrame<'t> {
function into_owned (line 170) | pub fn into_owned(self) -> CloseFrame<'static> {
function fmt (line 179) | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
type CloseCode (line 189) | pub enum CloseCode {
method is_allowed (line 262) | pub fn is_allowed(self) -> bool {
method fmt (line 268) | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
method from (line 306) | fn from(code: u16) -> CloseCode {
function from (line 275) | fn from(code: CloseCode) -> u16 {
function from (line 300) | fn from(code: &'t CloseCode) -> u16 {
FILE: libs/client-websocket/src/native.rs
function connect_async (line 15) | pub async fn connect_async(url: &str, header_map: HeaderMap) -> crate::R...
type TokioTungsteniteStream (line 24) | type TokioTungsteniteStream =
type FutMessage (line 26) | type FutMessage = futures_util::future::Ready<Option<crate::Result<crate...
type WebSocketStream (line 27) | pub struct WebSocketStream {
type Error (line 48) | type Error = crate::Error;
method poll_ready (line 50) | fn poll_ready(
method start_send (line 57) | fn start_send(
method poll_flush (line 66) | fn poll_flush(
method poll_close (line 73) | fn poll_close(
type Item (line 36) | type Item = crate::Result<crate::Message>;
method poll_next (line 38) | fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Opt...
method size_hint (line 42) | fn size_hint(&self) -> (usize, Option<usize>) {
function to_fut_message (line 81) | fn to_fut_message(msg: Result<Message>) -> FutMessage {
function from (line 100) | fn from(close_frame: CloseFrame<'a>) -> Self {
function from (line 109) | fn from(close_frame: crate::message::CloseFrame<'a>) -> Self {
function from (line 118) | fn from(msg: Message) -> Self {
method from (line 131) | fn from(msg: crate::Message) -> Self {
function from (line 143) | fn from(err: Error) -> Self {
function from (line 162) | fn from(err: CapacityError) -> Self {
function from (line 173) | fn from(err: UrlError) -> Self {
function from (line 186) | fn from(err: ProtocolError) -> Self {
function from (line 243) | fn from(data: Data) -> Self {
FILE: libs/client-websocket/src/web.rs
function connect_async (line 7) | pub async fn connect_async(url: &str, header_map: HeaderMap) -> crate::R...
type WebSocketStream (line 11) | pub struct WebSocketStream {
method new (line 21) | async fn new(url: &str, headers: HeaderMap) -> crate::Result<Self> {
method drop (line 118) | fn drop(&mut self) {
type ReadyState (line 126) | enum ReadyState {
type Error (line 134) | type Error = ();
method try_from (line 136) | fn try_from(value: u16) -> Result<Self, Self::Error> {
type Item (line 153) | type Item = crate::Result<crate::Message>;
function poll_next (line 155) | fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<...
type Error (line 170) | type Error = crate::Error;
function poll_ready (line 172) | fn poll_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Resul...
function start_send (line 179) | fn start_send(self: Pin<&mut Self>, item: crate::Message) -> Result<(), ...
function poll_flush (line 216) | fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Resul...
function poll_close (line 220) | fn poll_close(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Resul...
type Error (line 231) | type Error = crate::Error;
function try_from (line 233) | fn try_from(event: MessageEvent) -> Result<Self, Self::Error> {
function header_map_to_query_string (line 253) | fn header_map_to_query_string(headers: &HeaderMap) -> String {
FILE: libs/collab-rt-entity/build.rs
function main (line 3) | fn main() -> Result<(), Box<dyn std::error::Error>> {
FILE: libs/collab-rt-entity/src/client_message.rs
type SinkMessage (line 17) | pub trait SinkMessage: Clone + Send + Sync + 'static + Ord + Display {
method payload_size (line 18) | fn payload_size(&self) -> usize;
method mergeable (line 19) | fn mergeable(&self) -> bool;
method merge (line 20) | fn merge(&mut self, other: &Self, maximum_payload_size: &usize) -> Res...
method is_client_init_sync (line 21) | fn is_client_init_sync(&self) -> bool;
method is_server_init_sync (line 22) | fn is_server_init_sync(&self) -> bool;
method is_update_sync (line 23) | fn is_update_sync(&self) -> bool;
method is_awareness_sync (line 24) | fn is_awareness_sync(&self) -> bool;
method is_ping_sync (line 25) | fn is_ping_sync(&self) -> bool;
method payload_size (line 159) | fn payload_size(&self) -> usize {
method mergeable (line 163) | fn mergeable(&self) -> bool {
method merge (line 167) | fn merge(&mut self, other: &Self, maximum_payload_size: &usize) -> Res...
method is_client_init_sync (line 183) | fn is_client_init_sync(&self) -> bool {
method is_server_init_sync (line 187) | fn is_server_init_sync(&self) -> bool {
method is_update_sync (line 191) | fn is_update_sync(&self) -> bool {
method is_awareness_sync (line 195) | fn is_awareness_sync(&self) -> bool {
method is_ping_sync (line 199) | fn is_ping_sync(&self) -> bool {
type ClientCollabMessage (line 29) | pub enum ClientCollabMessage {
method new_init_sync (line 38) | pub fn new_init_sync(data: InitSync) -> Self {
method new_update_sync (line 42) | pub fn new_update_sync(data: UpdateSync) -> Self {
method new_server_init_sync (line 46) | pub fn new_server_init_sync(data: ServerInit) -> Self {
method new_awareness_sync (line 50) | pub fn new_awareness_sync(data: UpdateSync) -> Self {
method size (line 54) | pub fn size(&self) -> usize {
method object_id (line 63) | pub fn object_id(&self) -> &str {
method origin (line 73) | pub fn origin(&self) -> &CollabOrigin {
method payload (line 82) | pub fn payload(&self) -> &Bytes {
method device_id (line 92) | pub fn device_id(&self) -> Option<String> {
method msg_id (line 99) | pub fn msg_id(&self) -> MsgId {
method is_init_sync (line 109) | pub fn is_init_sync(&self) -> bool {
type Error (line 133) | type Error = Error;
method try_from (line 135) | fn try_from(value: CollabMessage) -> Result<Self, Self::Error> {
method fmt (line 115) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method from (line 151) | fn from(msg: ClientCollabMessage) -> Self {
method hash (line 205) | fn hash<H: Hasher>(&self, state: &mut H) {
method eq (line 215) | fn eq(&self, other: &Self) -> bool {
method partial_cmp (line 223) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
method cmp (line 229) | fn cmp(&self, other: &Self) -> Ordering {
type InitSync (line 255) | pub struct InitSync {
method new (line 265) | pub fn new(
method fmt (line 286) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type UpdateSync (line 305) | pub struct UpdateSync {
method new (line 325) | pub fn new(origin: CollabOrigin, object_id: String, payload: Vec<u8>, ...
method merge_payload (line 334) | pub fn merge_payload(&mut self, other: &Self) -> Result<bool, Error> {
method as_update (line 352) | fn as_update(&self) -> Option<Message> {
method fmt (line 360) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type CollabStateCheck (line 372) | pub struct CollabStateCheck {
method fmt (line 379) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
FILE: libs/collab-rt-entity/src/collab_proto.rs
type CollabDocStateParams (line 4) | pub struct CollabDocStateParams {
type PayloadCompressionType (line 18) | pub enum PayloadCompressionType {
method as_str_name (line 27) | pub fn as_str_name(&self) -> &'static str {
method from_str_name (line 34) | pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
FILE: libs/collab-rt-entity/src/message.rs
constant MAXIMUM_REALTIME_MESSAGE_SIZE (line 15) | pub const MAXIMUM_REALTIME_MESSAGE_SIZE: usize = 10 * 1024 * 1024;
function max_sync_message_size (line 21) | pub fn max_sync_message_size() -> usize {
type MessageByObjectId (line 29) | pub struct MessageByObjectId(pub HashMap<String, Vec<ClientCollabMessage...
method new_with_message (line 31) | pub fn new_with_message(object_id: String, messages: Vec<ClientCollabM...
method into_inner (line 37) | pub fn into_inner(self) -> HashMap<String, Vec<ClientCollabMessage>> {
type Target (line 42) | type Target = HashMap<String, Vec<ClientCollabMessage>>;
method deref (line 44) | fn deref(&self) -> &Self::Target {
method deref_mut (line 50) | fn deref_mut(&mut self) -> &mut Self::Target {
type RealtimeMessage (line 61) | pub enum RealtimeMessage {
method split_messages_by_object_id (line 75) | pub fn split_messages_by_object_id(self) -> Result<MessageByObjectId, ...
method object_id (line 94) | fn object_id(&self) -> Option<String> {
method encode (line 109) | pub fn encode(&self) -> Result<Vec<u8>, Error> {
method decode (line 125) | pub fn decode(data: &[u8]) -> Result<Self, Error> {
method from (line 282) | fn from(msg: CollabMessage) -> Self {
method fmt (line 136) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type SystemMessage (line 149) | pub enum SystemMessage {
type MsgId (line 155) | pub type MsgId = u64;
type CollabMessage (line 157) | pub enum CollabMessage {
method msg_id (line 167) | pub fn msg_id(&self) -> Option<MsgId> {
method len (line 178) | pub fn len(&self) -> usize {
method payload (line 181) | pub fn payload(&self) -> &Bytes {
method is_empty (line 191) | pub fn is_empty(&self) -> bool {
method origin (line 194) | pub fn origin(&self) -> &CollabOrigin {
method uid (line 205) | pub fn uid(&self) -> Option<i64> {
method object_id (line 209) | pub fn object_id(&self) -> &str {
method from (line 235) | fn from(value: CollabAck) -> Self {
method from (line 241) | fn from(value: BroadcastSync) -> Self {
method from (line 247) | fn from(value: InitSync) -> Self {
method from (line 253) | fn from(value: UpdateSync) -> Self {
method from (line 259) | fn from(value: AwarenessSync) -> Self {
method from (line 265) | fn from(value: ServerInit) -> Self {
type Error (line 271) | type Error = anyhow::Error;
method try_from (line 273) | fn try_from(value: RealtimeMessage) -> Result<Self, Self::Error> {
method fmt (line 222) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
FILE: libs/collab-rt-entity/src/realtime_proto.rs
type HttpRealtimeMessage (line 4) | pub struct HttpRealtimeMessage {
FILE: libs/collab-rt-entity/src/server_message.rs
type ServerCollabMessage (line 11) | pub enum ServerCollabMessage {
method object_id (line 19) | pub fn object_id(&self) -> &str {
method msg_id (line 28) | pub fn msg_id(&self) -> Option<MsgId> {
method payload (line 37) | pub fn payload(&self) -> &Bytes {
method size (line 46) | pub fn size(&self) -> usize {
method origin (line 55) | pub fn origin(&self) -> &CollabOrigin {
type Error (line 77) | type Error = Error;
method try_from (line 79) | fn try_from(value: CollabMessage) -> Result<Self, Self::Error> {
method from (line 97) | fn from(value: ServerInit) -> Self {
method fmt (line 66) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method from (line 91) | fn from(msg: ServerCollabMessage) -> Self {
type ServerInit (line 110) | pub struct ServerInit {
method new (line 127) | pub fn new(origin: CollabOrigin, object_id: String, payload: Vec<u8>, ...
method fmt (line 138) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type CollabAck (line 157) | pub struct CollabAck {
method new (line 170) | pub fn new(origin: CollabOrigin, object_id: String, msg_id: MsgId, seq...
method with_payload (line 182) | pub fn with_payload<T: Into<Bytes>>(mut self, payload: T) -> Self {
method with_code (line 187) | pub fn with_code(mut self, code: AckCode) -> Self {
method get_code (line 192) | pub fn get_code(&self) -> AckCode {
method get_seq_num (line 196) | pub fn get_seq_num(&self) -> Option<u32> {
type AckCode (line 207) | pub enum AckCode {
method from (line 217) | fn from(value: u8) -> Self {
type AckMeta (line 231) | pub struct AckMeta {
method new (line 237) | fn new(msg_id: &MsgId) -> Self {
method fmt (line 246) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type BroadcastSync (line 267) | pub struct BroadcastSync {
method new (line 277) | pub fn new(origin: CollabOrigin, object_id: String, payload: Vec<u8>, ...
method fmt (line 288) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type AwarenessSync (line 306) | pub struct AwarenessSync {
method new (line 313) | pub fn new(object_id: String, payload: Vec<u8>, origin: CollabOrigin) ...
method fmt (line 323) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
FILE: libs/collab-rt-entity/src/user.rs
type UserMessage (line 7) | pub enum UserMessage {
type AFUserChange (line 13) | pub struct AFUserChange {
type AFWorkspaceMemberChange (line 21) | pub struct AFWorkspaceMemberChange {
type UserDevice (line 28) | pub struct UserDevice {
method new (line 34) | pub fn new(device_id: &str, uid: i64) -> Self {
method from (line 43) | fn from(user: &RealtimeUser) -> Self {
type RealtimeUser (line 57) | pub struct RealtimeUser {
method new (line 74) | pub fn new(
method user_device (line 90) | pub fn user_device(&self) -> String {
method fmt (line 96) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
FILE: libs/collab-rt-entity/tests/serde_test.rs
type AckMetaV1 (line 12) | pub struct AckMetaV1 {
type RealtimeMessageV1 (line 24) | pub enum RealtimeMessageV1 {
function decode_0149_realtime_message_test (line 31) | fn decode_0149_realtime_message_test() {
function decode_0147_realtime_message_test (line 56) | fn decode_0147_realtime_message_test() {
function decode_version_2_collab_message_with_version_1_test_1 (line 81) | fn decode_version_2_collab_message_with_version_1_test_1() {
function write_message_to_file (line 105) | fn write_message_to_file(
function read_message_from_file (line 116) | fn read_message_from_file(file_path: &str) -> Result<RealtimeMessage, an...
FILE: libs/collab-rt-protocol/src/data_validation.rs
function collab_from_encode_collab (line 11) | pub async fn collab_from_encode_collab(object_id: &Uuid, data: &[u8]) ->...
function validate_encode_collab (line 28) | pub async fn validate_encode_collab(
FILE: libs/collab-rt-protocol/src/message.rs
constant MSG_SYNC (line 10) | pub const MSG_SYNC: u8 = 0;
constant MSG_AWARENESS (line 12) | pub const MSG_AWARENESS: u8 = 1;
constant MSG_AUTH (line 14) | pub const MSG_AUTH: u8 = 2;
constant MSG_CUSTOM (line 15) | pub const MSG_CUSTOM: u8 = 3;
constant PERMISSION_DENIED (line 17) | pub const PERMISSION_DENIED: u8 = 0;
constant PERMISSION_GRANTED (line 18) | pub const PERMISSION_GRANTED: u8 = 1;
type Message (line 21) | pub enum Message {
method encode (line 29) | fn encode<E: Encoder>(&self, encoder: &mut E) {
method decode (line 57) | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, yrs::encoding::re...
method fmt (line 86) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
constant MSG_CUSTOM_START_SYNC (line 97) | pub const MSG_CUSTOM_START_SYNC: u8 = 0;
type CustomMessage (line 100) | pub enum CustomMessage {
method fmt (line 105) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method encode (line 112) | fn encode<E: Encoder>(&self, encoder: &mut E) {
method decode (line 123) | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, yrs::encoding::re...
type SyncMeta (line 137) | pub struct SyncMeta {
method to_vec (line 142) | pub fn to_vec(&self) -> Vec<u8> {
method from_vec (line 146) | pub fn from_vec(data: &[u8]) -> Result<Self, yrs::encoding::read::Erro...
constant MSG_SYNC_STEP_1 (line 154) | pub const MSG_SYNC_STEP_1: u8 = 0;
constant MSG_SYNC_STEP_2 (line 156) | pub const MSG_SYNC_STEP_2: u8 = 1;
constant MSG_SYNC_UPDATE (line 158) | pub const MSG_SYNC_UPDATE: u8 = 2;
type SyncMessage (line 161) | pub enum SyncMessage {
method fmt (line 171) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method encode (line 187) | fn encode<E: Encoder>(&self, encoder: &mut E) {
method decode (line 206) | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, yrs::encoding::re...
type RTProtocolError (line 228) | pub enum RTProtocolError {
method from (line 274) | fn from(value: std::io::Error) -> Self {
type MessageReader (line 281) | pub struct MessageReader<'a, D: Decoder>(&'a mut D);
function new (line 284) | pub fn new(decoder: &'a mut D) -> Self {
type Item (line 290) | type Item = Result<Message, yrs::encoding::read::Error>;
method next (line 292) | fn next(&mut self) -> Option<Self::Item> {
FILE: libs/collab-rt-protocol/src/protocol.rs
type ClientSyncProtocol (line 19) | pub struct ClientSyncProtocol;
type CollabRef (line 74) | pub type CollabRef = Arc<RwLock<dyn BorrowMut<Collab> + Send + Sync + 's...
type WeakCollabRef (line 76) | pub type WeakCollabRef = Weak<RwLock<dyn BorrowMut<Collab> + Send + Sync...
type CollabSyncProtocol (line 79) | pub trait CollabSyncProtocol {
method check (line 23) | fn check<E: Encoder>(&self, encoder: &mut E, last_sync_at: i64) -> Res...
method handle_sync_step2 (line 31) | async fn handle_sync_step2(
method handle_message (line 81) | async fn handle_message(
method check (line 107) | fn check<E: Encoder>(&self, _encoder: &mut E, _last_sync_at: i64) -> R...
method start (line 111) | fn start<E: Encoder>(
method handle_sync_step1 (line 145) | async fn handle_sync_step1(
method handle_sync_step2 (line 166) | async fn handle_sync_step2(
method handle_update (line 175) | async fn handle_update(
method handle_auth (line 184) | async fn handle_auth(
method handle_awareness_update (line 198) | async fn handle_awareness_update(
method handle_custom_message (line 210) | async fn handle_custom_message(
constant LARGE_UPDATE_THRESHOLD (line 219) | pub const LARGE_UPDATE_THRESHOLD: usize = 1024 * 1024;
function decode_update (line 222) | pub async fn decode_update(update: Vec<u8>) -> Result<Update, yrs::encod...
FILE: libs/collab-stream/src/awareness_gossip.rs
type AwarenessSender (line 14) | type AwarenessSender = UnboundedSender<Arc<AwarenessStreamUpdate>>;
type ScopedAwarenessSender (line 15) | type ScopedAwarenessSender = UnboundedSender<(Uuid, Arc<AwarenessStreamU...
type AwarenessGossip (line 17) | pub struct AwarenessGossip {
method new (line 24) | pub async fn new(client: &Client) -> Result<Self, RedisError> {
method dispatch_collab_awareness_update (line 61) | fn dispatch_collab_awareness_update(
method send (line 91) | pub async fn send(
method sink (line 104) | pub async fn sink(
method collab_awareness_stream (line 113) | pub fn collab_awareness_stream(
method workspace_awareness_stream (line 122) | pub fn workspace_awareness_stream(
method parse_update (line 131) | fn parse_update(msg: redis::Msg) -> Result<(Uuid, Uuid, AwarenessStrea...
method parse_channel_name (line 142) | fn parse_channel_name(channel_name: &str) -> Option<(Uuid, Uuid)> {
type AwarenessUpdateSink (line 158) | pub struct AwarenessUpdateSink {
method new (line 164) | pub fn new(conn: MultiplexedConnection, workspace_id: &Uuid, object_id...
method send (line 172) | pub async fn send(&self, msg: &AwarenessStreamUpdate) -> Result<(), St...
method notify_awareness_change (line 179) | async fn notify_awareness_change(
function subscribe_awareness_change_for_many_collabs (line 200) | async fn subscribe_awareness_change_for_many_collabs() {
FILE: libs/collab-stream/src/client.rs
type CollabRedisStream (line 20) | pub struct CollabRedisStream {
constant LEASE_TTL (line 27) | pub const LEASE_TTL: Duration = Duration::from_secs(60);
method new (line 29) | pub async fn new(
method new_with_connection_manager (line 53) | pub fn new_with_connection_manager(
method lease (line 65) | pub async fn lease(
method collab_update_sink (line 77) | pub fn collab_update_sink(
method awareness_update_sink (line 92) | pub async fn awareness_update_sink(
method current_collab_updates (line 102) | pub async fn current_collab_updates(
method live_collab_updates (line 143) | pub fn live_collab_updates(
method awareness_updates (line 167) | pub fn awareness_updates(
method delete_stream_messages (line 174) | pub async fn delete_stream_messages(
method prune_update_stream (line 193) | pub async fn prune_update_stream(
method prune_awareness_stream (line 220) | pub async fn prune_awareness_stream(&self, stream_key: &str) -> Result...
FILE: libs/collab-stream/src/collab_update_sink.rs
type CollabUpdateSink (line 8) | pub struct CollabUpdateSink {
method new (line 16) | pub fn new(
method send (line 30) | pub async fn send(&self, msg: &CollabStreamUpdate) -> Result<MessageId...
FILE: libs/collab-stream/src/error.rs
type StreamError (line 4) | pub enum StreamError {
method is_stream_not_exist (line 49) | pub fn is_stream_not_exist(&self) -> bool {
function internal (line 54) | pub fn internal<T: ToString>(msg: T) -> RedisError {
FILE: libs/collab-stream/src/lease.rs
constant RELEASE_SCRIPT (line 7) | const RELEASE_SCRIPT: &str = r#"
type LeaseAcquisition (line 15) | pub struct LeaseAcquisition {
method release (line 22) | pub async fn release(&mut self) -> Result<bool, StreamError> {
method release_internal (line 30) | async fn release_internal<S: AsRef<str>>(
method drop (line 46) | fn drop(&mut self) {
type Lease (line 62) | pub trait Lease {
method lease (line 65) | async fn lease(
method lease (line 74) | async fn lease(
function lease_acquisition (line 115) | async fn lease_acquisition() {
FILE: libs/collab-stream/src/metrics.rs
type CollabStreamMetrics (line 5) | pub struct CollabStreamMetrics {
method register (line 13) | pub fn register(registry: &mut Registry) -> Self {
FILE: libs/collab-stream/src/model.rs
type MessageId (line 29) | pub struct MessageId {
method new (line 35) | pub fn new(timestamp_ms: u64, sequence_number: u16) -> Self {
method from (line 50) | fn from(rid: Rid) -> Self {
type Error (line 68) | type Error = StreamError;
method try_from (line 70) | fn try_from(s: &[u8]) -> Result<Self, Self::Error> {
type Error (line 77) | type Error = StreamError;
method try_from (line 79) | fn try_from(s: &str) -> Result<Self, Self::Error> {
type Error (line 98) | type Error = StreamError;
method try_from (line 100) | fn try_from(s: String) -> Result<Self, Self::Error> {
method fmt (line 44) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method from (line 59) | fn from(val: MessageId) -> Self {
method from_redis_value (line 106) | fn from_redis_value(v: &Value) -> RedisResult<Self> {
method write_redis_args (line 121) | fn write_redis_args<W>(&self, out: &mut W)
type StreamMessage (line 131) | pub struct StreamMessage {
type Error (line 176) | type Error = StreamError;
method try_from (line 178) | fn try_from(value: StreamId) -> Result<Self, Self::Error> {
method from_redis_value (line 139) | fn from_redis_value(v: &Value) -> RedisResult<Self> {
type StreamBinary (line 188) | pub struct StreamBinary(pub Vec<u8>);
method from (line 191) | fn from(m: StreamMessage) -> Self {
method into_tuple_array (line 205) | pub fn into_tuple_array(self) -> [(&'static str, Vec<u8>); 1] {
type Error (line 212) | type Error = StreamError;
method try_from (line 214) | fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
type Error (line 220) | type Error = StreamError;
method try_from (line 222) | fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
type Error (line 307) | type Error = StreamError;
method try_from (line 309) | fn try_from(value: CollabControlEvent) -> Result<Self, Self::Error> {
type Target (line 197) | type Target = Vec<u8>;
method deref (line 199) | fn deref(&self) -> &Self::Target {
function verify_field (line 227) | fn verify_field(field: &Value, expected: &str) -> RedisResult<()> {
type RedisString (line 239) | pub struct RedisString(String);
method from_redis_value (line 241) | fn from_redis_value(v: &Value) -> RedisResult<Self> {
method fmt (line 251) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
function bulk_from_redis_value (line 256) | fn bulk_from_redis_value(v: &Value) -> Result<&Vec<Value>, RedisError> {
type CollabControlEvent (line 265) | pub enum CollabControlEvent {
method encode (line 297) | pub fn encode(&self) -> Result<Vec<u8>, serde_json::Error> {
method decode (line 301) | pub fn decode(data: &[u8]) -> Result<Self, serde_json::Error> {
method fmt (line 278) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type CollabStreamUpdate (line 315) | pub struct CollabStreamUpdate {
method new (line 322) | pub fn new<B, F>(data: B, sender: CollabOrigin, flags: F) -> Self
method into_update (line 334) | pub fn into_update(self) -> Result<collab::preclude::Update, StreamErr...
method from (line 350) | fn from(value: UpdateStreamMessage) -> Self {
type Error (line 360) | type Error = StreamError;
method try_from (line 362) | fn try_from(fields: &'a HashMap<String, Value>) -> Result<Self, Self::...
type Error (line 388) | type Error = StreamError;
method from_redis_stream (line 390) | fn from_redis_stream(msg_id: &str, fields: &RedisMap) -> Result<Self, Se...
type AwarenessStreamUpdate (line 401) | pub struct AwarenessStreamUpdate {
type UpdateFlags (line 408) | pub struct UpdateFlags(u8);
method from (line 411) | fn from(flags: appflowy_proto::UpdateFlags) -> Self {
constant IS_V2_ENCODED (line 421) | pub const IS_V2_ENCODED: u8 = 0b0000_0001;
constant IS_COMPRESSED (line 423) | pub const IS_COMPRESSED: u8 = 0b0000_0010;
method is_v2_encoded (line 426) | pub fn is_v2_encoded(&self) -> bool {
method is_v1_encoded (line 431) | pub fn is_v1_encoded(&self) -> bool {
method is_compressed (line 436) | pub fn is_compressed(&self) -> bool {
method from (line 453) | fn from(value: u8) -> Self {
method write_redis_args (line 443) | fn write_redis_args<W>(&self, out: &mut W)
method fmt (line 459) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type UpdateStreamMessage (line 475) | pub struct UpdateStreamMessage {
method stream_key (line 485) | pub fn stream_key(workspace_id: &Uuid) -> String {
method prepare_command (line 489) | pub fn prepare_command(
type Error (line 516) | type Error = anyhow::Error;
method from_redis_stream (line 517) | fn from_redis_stream(msg_id: &str, fields: &RedisMap) -> Result<Self, Se...
FILE: libs/collab-stream/src/stream_router.rs
type StreamKey (line 25) | pub type StreamKey = String;
type FromRedisStream (line 27) | pub trait FromRedisStream {
method from_redis_stream (line 29) | fn from_redis_stream(msg_id: &str, fields: &RedisMap) -> Result<Self, ...
type Error (line 416) | type Error = anyhow::Error;
method from_redis_stream (line 418) | fn from_redis_stream(id: &str, fields: &RedisMap) -> Result<Self, Self...
type StreamReader (line 36) | pub struct StreamReader<T> {
function new (line 42) | pub fn new(receiver: StreamReceiver) -> Self {
type Item (line 54) | type Item = Result<T, T::Error>;
method poll_next (line 56) | fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<...
type StreamRouter (line 75) | pub struct StreamRouter {
method new (line 86) | pub fn new(client: &Client, metrics: Arc<CollabStreamMetrics>) -> Resu...
method with_options (line 90) | pub fn with_options(
method observe (line 124) | pub fn observe<T: FromRedisStream>(
method drop (line 162) | fn drop(&mut self) {
type StreamRouterOptions (line 169) | pub struct StreamRouterOptions {
method default (line 190) | fn default() -> Self {
type Worker (line 200) | struct Worker {
method new (line 206) | fn new(
method process_streams (line 235) | fn process_streams(
method schedule_back (line 306) | fn schedule_back(
method read_buf (line 337) | fn read_buf(
type RedisMap (line 377) | pub type RedisMap = HashMap<String, Value>;
type WeakStreamSender (line 378) | type WeakStreamSender = tokio::sync::broadcast::WeakSender<Arc<(String, ...
type StreamSender (line 379) | type StreamSender = tokio::sync::broadcast::Sender<Arc<(String, RedisMap...
type StreamReceiver (line 380) | type StreamReceiver = tokio::sync::broadcast::Receiver<Arc<(String, Redi...
type StreamHandle (line 382) | struct StreamHandle {
method new (line 389) | fn new(key: StreamKey, last_id: String, sender: StreamSender) -> Self {
type TestMessage (line 410) | struct TestMessage {
function multi_worker_preexisting_messages (line 435) | async fn multi_worker_preexisting_messages() {
function multi_worker_live_messages (line 468) | async fn multi_worker_live_messages() {
function stream_reader_continue_from (line 502) | async fn stream_reader_continue_from() {
function drop_subscription (line 519) | async fn drop_subscription() {
function observe_unobserve_observe_again (line 565) | async fn observe_unobserve_observe_again() {
function init_streams (line 608) | fn init_streams(client: &mut Client, stream_count: usize, msgs_per_strea...
FILE: libs/database-entity/src/dto.rs
function serialize (line 26) | pub fn serialize<S>(uuid: &Uuid, serializer: S) -> Result<S::Ok, S::Error>
function deserialize (line 33) | pub fn deserialize<'de, D>(deserializer: D) -> Result<Uuid, D::Error>
constant ZSTD_COMPRESSION_LEVEL (line 43) | pub const ZSTD_COMPRESSION_LEVEL: i32 = 3;
type CreateCollabParams (line 46) | pub struct CreateCollabParams {
method from (line 60) | fn from((workspace_id, collab_params): (Uuid, CollabParams)) -> Self {
method split (line 71) | pub fn split(self) -> (CollabParams, Uuid) {
method to_bytes (line 83) | pub fn to_bytes(&self) -> Result<Vec<u8>, bincode::Error> {
method from_bytes (line 86) | pub fn from_bytes(bytes: &[u8]) -> Result<Self, bincode::Error> {
type CollabIndexParams (line 91) | pub struct CollabIndexParams {}
type PendingCollabWrite (line 93) | pub struct PendingCollabWrite {
method new (line 100) | pub fn new(workspace_id: Uuid, uid: i64, params: CollabParams) -> Self {
type CollabUpdateData (line 110) | pub struct CollabUpdateData {
type CollabParams (line 118) | pub struct CollabParams {
method from (line 201) | fn from(value: CreateCollabData) -> Self {
method fmt (line 131) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type CreateCollabData (line 143) | pub struct CreateCollabData {
method to_bytes (line 150) | pub fn to_bytes(&self) -> Result<Vec<u8>, bincode::Error> {
method from_bytes (line 154) | pub fn from_bytes(bytes: &[u8]) -> Result<Self, bincode::Error> {
method to_proto (line 169) | pub fn to_proto(&self) -> proto::CollabParams {
method to_protobuf_bytes (line 178) | pub fn to_protobuf_bytes(&self) -> Vec<u8> {
method from_protobuf_bytes (line 182) | pub fn from_protobuf_bytes(bytes: &[u8]) -> Result<Self, EntityError> {
method from (line 191) | fn from(value: CollabParams) -> Self {
type Error (line 212) | type Error = EntityError;
method try_from (line 214) | fn try_from(proto: proto::CollabParams) -> Result<Self, Self::Error> {
type CreateCollabDataV0 (line 227) | struct CreateCollabDataV0 {
type BatchCreateCollabParams (line 235) | pub struct BatchCreateCollabParams {
method to_bytes (line 242) | pub fn to_bytes(&self) -> Result<Vec<u8>, bincode::Error> {
method from_bytes (line 246) | pub fn from_bytes(bytes: &[u8]) -> Result<Self, bincode::Error> {
type UpdateCollabWebParams (line 252) | pub struct UpdateCollabWebParams {
type DeleteCollabParams (line 258) | pub struct DeleteCollabParams {
type InsertSnapshotParams (line 266) | pub struct InsertSnapshotParams {
type SnapshotData (line 277) | pub struct SnapshotData {
type QuerySnapshotParams (line 286) | pub struct QuerySnapshotParams {
type QueryCollabParams (line 291) | pub struct QueryCollabParams {
method new (line 309) | pub fn new(object_id: Uuid, collab_type: CollabType, workspace_id: Uui...
method fmt (line 299) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type Target (line 322) | type Target = QueryCollab;
method deref (line 324) | fn deref(&self) -> &Self::Target {
type QueryCollab (line 330) | pub struct QueryCollab {
method new (line 335) | pub fn new(object_id: Uuid, collab_type: CollabType) -> Self {
type BatchQueryCollabParams (line 344) | pub struct BatchQueryCollabParams(pub Vec<QueryCollab>);
type Target (line 347) | type Target = Vec<QueryCollab>;
method deref (line 349) | fn deref(&self) -> &Self::Target {
method deref_mut (line 355) | fn deref_mut(&mut self) -> &mut Self::Target {
type AFSnapshotMeta (line 361) | pub struct AFSnapshotMeta {
type AFSnapshotMetas (line 368) | pub struct AFSnapshotMetas(pub Vec<AFSnapshotMeta>);
type QueryObjectSnapshotParams (line 371) | pub struct QueryObjectSnapshotParams {
type AFBlobRecord (line 377) | pub struct AFBlobRecord {
method new (line 382) | pub fn new(file_id: String) -> Self {
type QueryCollabResult (line 388) | pub enum QueryCollabResult {
type BatchQueryCollabResult (line 394) | pub struct BatchQueryCollabResult(pub HashMap<Uuid, QueryCollabResult>);
type WorkspaceUsage (line 397) | pub struct WorkspaceUsage {
type InsertCollabMemberParams (line 402) | pub struct InsertCollabMemberParams {
type UpdateCollabMemberParams (line 411) | pub type UpdateCollabMemberParams = InsertCollabMemberParams;
type WorkspaceCollabIdentify (line 414) | pub struct WorkspaceCollabIdentify {
type UpdatePublishNamespace (line 423) | pub struct UpdatePublishNamespace {
type UpdateDefaultPublishView (line 429) | pub struct UpdateDefaultPublishView {
type DefaultPublishViewInfoMeta (line 434) | pub struct DefaultPublishViewInfoMeta {
type QueryCollabMembers (line 440) | pub struct QueryCollabMembers {
type QueryWorkspaceMember (line 448) | pub struct QueryWorkspaceMember {
type AFDatabaseRowDocumentCollabExistenceInfo (line 456) | pub struct AFDatabaseRowDocumentCollabExistenceInfo {
type AFCollabEmbedInfo (line 461) | pub struct AFCollabEmbedInfo {
type RepeatedAFCollabEmbedInfo (line 470) | pub struct RepeatedAFCollabEmbedInfo(pub Vec<AFCollabEmbedInfo>);
type PublishInfo (line 473) | pub struct PublishInfo {
function default_comments_enabled (line 489) | fn default_comments_enabled() -> bool {
function default_duplicate_enabled (line 493) | fn default_duplicate_enabled() -> bool {
type PublishInfoMeta (line 498) | pub struct PublishInfoMeta<Meta> {
type AFRole (line 505) | pub enum AFRole {
method can_create_collab (line 513) | pub fn can_create_collab(&self) -> bool {
method from (line 519) | fn from(value: i32) -> Self {
method from (line 534) | fn from(value: &str) -> Self {
function from (line 543) | fn from(role: AFRole) -> Self {
function from (line 549) | fn from(role: &AFRole) -> Self {
method partial_cmp (line 555) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
method cmp (line 561) | fn cmp(&self, other: &Self) -> Ordering {
type AFPermission (line 570) | pub struct AFPermission {
type AFAccessLevel (line 580) | pub enum AFAccessLevel {
method can_write (line 589) | pub fn can_write(&self) -> bool {
method can_delete (line 596) | pub fn can_delete(&self) -> bool {
method from (line 607) | fn from(value: &AFRole) -> Self {
method from (line 617) | fn from(value: i32) -> Self {
method from (line 633) | fn from(value: &str) -> Self {
function from (line 642) | fn from(level: AFAccessLevel) -> Self {
function from (line 648) | fn from(level: &AFAccessLevel) -> Self {
method partial_cmp (line 654) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
method cmp (line 660) | fn cmp(&self, other: &Self) -> Ordering {
type RawData (line 667) | pub type RawData = Vec<u8>;
type AFUserProfile (line 670) | pub struct AFUserProfile {
type AFUserWithAvatar (line 683) | pub struct AFUserWithAvatar {
type AFWorkspace (line 691) | pub struct AFWorkspace {
type AFWorkspaceSettings (line 708) | pub struct AFWorkspaceSettings {
method default (line 717) | fn default() -> Self {
type AFWorkspaceSettingsChange (line 726) | pub struct AFWorkspaceSettingsChange {
method new (line 734) | pub fn new() -> Self {
method disable_search_indexing (line 740) | pub fn disable_search_indexing(mut self, disable_search_indexing: bool...
method ai_model (line 744) | pub fn ai_model(mut self, ai_model: String) -> Self {
type AFUserWorkspaceInfo (line 751) | pub struct AFUserWorkspaceInfo {
type AFWorkspaceMember (line 758) | pub struct AFWorkspaceMember {
type AFWorkspaceInvitation (line 767) | pub struct AFWorkspaceInvitation {
type AFWorkspaceInvitationStatus (line 782) | pub enum AFWorkspaceInvitationStatus {
method from (line 789) | fn from(value: i16) -> Self {
type AFCollabEmbeddedChunk (line 803) | pub struct AFCollabEmbeddedChunk {
method mark_as_duplicate (line 819) | pub fn mark_as_duplicate(&mut self) {
type AFCollabEmbeddings (line 826) | pub struct AFCollabEmbeddings {
type EmbeddingContentType (line 836) | pub enum EmbeddingContentType {
method from_proto (line 842) | pub fn from_proto(proto: proto::EmbeddingContentType) -> Result<Self, ...
method to_proto (line 852) | pub fn to_proto(&self) -> proto::EmbeddingContentType {
type PublishCollabMetadata (line 860) | pub struct PublishCollabMetadata<Metadata> {
type PublishCollabKey (line 867) | pub struct PublishCollabKey {
type PublishCollabItem (line 873) | pub struct PublishCollabItem<Meta, Data> {
type PatchPublishedCollab (line 881) | pub struct PatchPublishedCollab {
type GlobalComments (line 889) | pub struct GlobalComments {
type AFWebUser (line 894) | pub struct AFWebUser {
type AFWebUserWithObfuscatedName (line 901) | pub struct AFWebUserWithObfuscatedName {
type GlobalComment (line 908) | pub struct GlobalComment {
type CreateGlobalCommentParams (line 920) | pub struct CreateGlobalCommentParams {
type DeleteGlobalCommentParams (line 926) | pub struct DeleteGlobalCommentParams {
type Reactions (line 931) | pub struct Reactions {
type Reaction (line 936) | pub struct Reaction {
type GetReactionQueryParams (line 943) | pub struct GetReactionQueryParams {
type CreateReactionParams (line 948) | pub struct CreateReactionParams {
type DeleteReactionParams (line 954) | pub struct DeleteReactionParams {
type IndexingStatus (line 961) | pub enum IndexingStatus {
type TemplateCategories (line 971) | pub struct TemplateCategories {
type TemplateCategoryType (line 977) | pub enum TemplateCategoryType {
type TemplateCategory (line 983) | pub struct TemplateCategory {
type TemplateCategoryMinimal (line 994) | pub struct TemplateCategoryMinimal {
type CreateTemplateCategoryParams (line 1002) | pub struct CreateTemplateCategoryParams {
type GetTemplateCategoriesQueryParams (line 1012) | pub struct GetTemplateCategoriesQueryParams {
type UpdateTemplateCategoryParams (line 1018) | pub struct UpdateTemplateCategoryParams {
type TemplateCreators (line 1028) | pub struct TemplateCreators {
type AccountLink (line 1033) | pub struct AccountLink {
type TemplateCreator (line 1039) | pub struct TemplateCreator {
type TemplateCreatorMinimal (line 1048) | pub struct TemplateCreatorMinimal {
type CreateTemplateCreatorParams (line 1055) | pub struct CreateTemplateCreatorParams {
type UpdateTemplateCreatorParams (line 1062) | pub struct UpdateTemplateCreatorParams {
type GetTemplateCreatorsQueryParams (line 1069) | pub struct GetTemplateCreatorsQueryParams {
type Template (line 1074) | pub struct Template {
type TemplateWithPublishInfo (line 1090) | pub struct TemplateWithPublishInfo {
type TemplateMinimal (line 1097) | pub struct TemplateMinimal {
type TemplateMinimalWithPublishInfo (line 1111) | pub struct TemplateMinimalWithPublishInfo {
type Templates (line 1118) | pub struct Templates {
type CreateTemplateParams (line 1123) | pub struct CreateTemplateParams {
type UpdateTemplateParams (line 1137) | pub struct UpdateTemplateParams {
type GetTemplatesQueryParams (line 1150) | pub struct GetTemplatesQueryParams {
type TemplateGroup (line 1158) | pub struct TemplateGroup {
type TemplateGroupWithPublishInfo (line 1164) | pub struct TemplateGroupWithPublishInfo {
type TemplateHomePage (line 1170) | pub struct TemplateHomePage {
type TemplateHomePageQueryParams (line 1177) | pub struct TemplateHomePageQueryParams {
type AvatarImageSource (line 1182) | pub struct AvatarImageSource {
type UserImageAssetSource (line 1187) | pub struct UserImageAssetSource {
type UserImageAssetContent (line 1192) | pub struct UserImageAssetContent {
type AvatarContent (line 1198) | pub struct AvatarContent {
type AccessRequestStatus (line 1205) | pub enum AccessRequestStatus {
type AccessRequestWithViewId (line 1212) | pub struct AccessRequestWithViewId {
type AccessRequesterInfo (line 1222) | pub struct AccessRequesterInfo {
type AccessRequestMinimal (line 1231) | pub struct AccessRequestMinimal {
type CreateAccessRequestParams (line 1239) | pub struct CreateAccessRequestParams {
type ApproveAccessRequestParams (line 1245) | pub struct ApproveAccessRequestParams {
type CreateImportTask (line 1250) | pub struct CreateImportTask {
type CreateImportTaskResponse (line 1259) | pub struct CreateImportTaskResponse {
type WorkspaceNamespace (line 1265) | pub struct WorkspaceNamespace {
type QuickNote (line 1272) | pub struct QuickNote {
type QuickNotes (line 1280) | pub struct QuickNotes {
type CreateQuickNoteParams (line 1286) | pub struct CreateQuickNoteParams {
type UpdateQuickNoteParams (line 1291) | pub struct UpdateQuickNoteParams {
type ListQuickNotesQueryParams (line 1296) | pub struct ListQuickNotesQueryParams {
type WorkspaceInviteCodeParams (line 1303) | pub struct WorkspaceInviteCodeParams {
type WorkspaceInviteToken (line 1308) | pub struct WorkspaceInviteToken {
type InvitedWorkspace (line 1313) | pub struct InvitedWorkspace {
type GetInvitationCodeInfoQuery (line 1318) | pub struct GetInvitationCodeInfoQuery {
type InvitationCodeInfo (line 1323) | pub struct InvitationCodeInfo {
type JoinWorkspaceByInviteCodeParams (line 1334) | pub struct JoinWorkspaceByInviteCodeParams {
type MentionableWorkspaceMemberOrGuest (line 1338) | pub struct MentionableWorkspaceMemberOrGuest {
type MentionableWorkspaceMemberOrGuestWithLastMentionedTime (line 1369) | pub struct MentionableWorkspaceMemberOrGuestWithLastMentionedTime {
type WorkspaceMemberProfile (line 1405) | pub struct WorkspaceMemberProfile {
type MentionablePerson (line 1414) | pub struct MentionablePerson {
method from (line 1350) | fn from(val: MentionableWorkspaceMemberOrGuest) -> Self {
type MentionablePersonWithLastMentionedTime (line 1427) | pub struct MentionablePersonWithLastMentionedTime {
method from (line 1384) | fn from(val: MentionableWorkspaceMemberOrGuestWithLastMentionedTime) -...
type MentionablePersonWithAccess (line 1441) | pub struct MentionablePersonWithAccess {
type MentionablePersons (line 1448) | pub struct MentionablePersons {
type MentionablePersonsWithAccess (line 1453) | pub struct MentionablePersonsWithAccess {
type MentionablePersonType (line 1459) | pub enum MentionablePersonType {
type PageMentionUpdate (line 1466) | pub struct PageMentionUpdate {
type PageMentionNotification (line 1478) | pub struct PageMentionNotification {
type ProcessedPageMentionNotification (line 1492) | pub struct ProcessedPageMentionNotification {
function collab_params_serialization_from_old_format (line 1507) | fn collab_params_serialization_from_old_format() {
function deserialization_using_protobuf (line 1575) | fn deserialization_using_protobuf() {
function deserialize_collab_params_without_embeddings (line 1588) | fn deserialize_collab_params_without_embeddings() {
FILE: libs/database-entity/src/error.rs
type EntityError (line 2) | pub enum EntityError {
FILE: libs/database-entity/src/file_dto.rs
type CreateUploadRequest (line 5) | pub struct CreateUploadRequest {
method fmt (line 14) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type CreateUploadResponse (line 24) | pub struct CreateUploadResponse {
type UploadPartData (line 30) | pub struct UploadPartData {
method fmt (line 38) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type UploadPartResponse (line 51) | pub struct UploadPartResponse {
type CompleteUploadRequest (line 57) | pub struct CompleteUploadRequest {
method fmt (line 65) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type CompletedPartRequest (line 77) | pub struct CompletedPartRequest {
type CompleteUploadResponse (line 83) | pub struct CompleteUploadResponse {
FILE: libs/database/src/access_request.rs
function insert_new_access_request (line 10) | pub async fn insert_new_access_request<'a, E: Executor<'a, Database = Po...
function select_access_request_by_request_id (line 50) | pub async fn select_access_request_by_request_id<'a, E: Executor<'a, Dat...
function update_access_request_status (line 107) | pub async fn update_access_request_status<'a, E: Executor<'a, Database =...
function delete_access_request (line 126) | pub async fn delete_access_request<'a, E: Executor<'a, Database = Postgr...
FILE: libs/database/src/chat/chat_ops.rs
function insert_chat (line 22) | pub async fn insert_chat<'a, E: Executor<'a, Database = Postgres>>(
function select_chat_settings (line 46) | pub async fn select_chat_settings<'a, E: Executor<'a, Database = Postgre...
function update_chat_settings (line 67) | pub async fn update_chat_settings<'a, E: Executor<'a, Database = Postgre...
function delete_chat (line 134) | pub async fn delete_chat(
function select_chat (line 152) | pub async fn select_chat<'a, E: Executor<'a, Database = Postgres>>(
function select_chat_rag_ids (line 177) | pub async fn select_chat_rag_ids<'a, E: Executor<'a, Database = Postgres>>(
function insert_answer_message_with_transaction (line 196) | pub async fn insert_answer_message_with_transaction(
function insert_answer_message (line 303) | pub async fn insert_answer_message(
function insert_question_message (line 330) | pub async fn insert_question_message<'a, E: Executor<'a, Database = Post...
function select_chat_messages (line 363) | pub async fn select_chat_messages(
function select_chat_messages_with_author_uuid (line 535) | pub async fn select_chat_messages_with_author_uuid(
function get_all_chat_messages (line 721) | pub async fn get_all_chat_messages<'a, E: Executor<'a, Database = Postgr...
function delete_answer_message_by_question_message_id (line 762) | pub async fn delete_answer_message_by_question_message_id(
function update_chat_message_content (line 794) | pub async fn update_chat_message_content(
function update_chat_message_meta (line 814) | pub async fn update_chat_message_meta(
function select_chat_message_content (line 841) | pub async fn select_chat_message_content<'a, E: Executor<'a, Database = ...
function select_chat_message_matching_reply_message_id (line 858) | pub async fn select_chat_message_matching_reply_message_id(
FILE: libs/database/src/collab/collab_db_ops.rs
function insert_into_af_collab (line 46) | pub async fn insert_into_af_collab(
function insert_into_af_collab_bulk_for_user (line 141) | pub async fn insert_into_af_collab_bulk_for_user(
function select_collabs_created_since (line 204) | pub async fn select_collabs_created_since<'a, E>(
function select_collab_id_exists (line 233) | pub async fn select_collab_id_exists<'a, E>(conn: E, object_id: &Uuid) -...
function select_blob_from_af_collab (line 252) | pub async fn select_blob_from_af_collab<'a, E>(
function select_collab_meta_from_af_collab (line 276) | pub async fn select_collab_meta_from_af_collab<'a, E>(
function batch_select_collab_blob (line 300) | pub async fn batch_select_collab_blob(
type QueryCollabData (line 354) | struct QueryCollabData {
function create_snapshot (line 359) | pub async fn create_snapshot(
function latest_snapshot_time (line 390) | pub async fn latest_snapshot_time<'a, E: Executor<'a, Database = Postgre...
function should_create_snapshot2 (line 404) | pub async fn should_create_snapshot2<'a, E: Executor<'a, Database = Post...
function create_snapshot_and_maintain_limit (line 426) | pub async fn create_snapshot_and_maintain_limit(
function select_snapshot (line 470) | pub async fn select_snapshot(
function select_latest_snapshot (line 492) | pub async fn select_latest_snapshot(
function get_all_collab_snapshot_meta (line 514) | pub async fn get_all_collab_snapshot_meta(
function transform_record_not_found_error (line 534) | fn transform_record_not_found_error(
function is_collab_exists (line 553) | pub async fn is_collab_exists<'a, E: Executor<'a, Database = Postgres>>(
function select_workspace_database_oid (line 568) | pub async fn select_workspace_database_oid<'a, E: Executor<'a, Database ...
function select_last_updated_database_row_ids (line 587) | pub async fn select_last_updated_database_row_ids(
function select_collab_embed_info (line 613) | pub async fn select_collab_embed_info<'a, E>(
function batch_select_collab_embed (line 646) | pub async fn batch_select_collab_embed<'a, E>(
FILE: libs/database/src/collab/collab_storage.rs
constant COLLAB_SNAPSHOT_LIMIT (line 13) | pub const COLLAB_SNAPSHOT_LIMIT: i64 = 30;
constant SNAPSHOT_PER_HOUR (line 14) | pub const SNAPSHOT_PER_HOUR: i64 = 6;
type AppResult (line 15) | pub type AppResult<T, E = AppError> = core::result::Result<T, E>;
type GetCollabOrigin (line 18) | pub enum GetCollabOrigin {
method from (line 24) | fn from(uid: i64) -> Self {
type CollabStore (line 34) | pub trait CollabStore: Send + Sync + 'static {
method upsert_collab (line 35) | async fn upsert_collab(
method upsert_collab_background (line 42) | async fn upsert_collab_background(
method upsert_new_collab_with_transaction (line 58) | async fn upsert_new_collab_with_transaction(
method batch_insert_new_collab (line 67) | async fn batch_insert_new_collab(
method get_full_encode_collab (line 83) | async fn get_full_encode_collab(
method batch_get_collab (line 91) | async fn batch_get_collab(
method delete_collab (line 107) | async fn delete_collab(&self, workspace_id: &Uuid, uid: &i64, object_i...
method mark_as_editing (line 109) | fn mark_as_editing(&self, oid: Uuid);
type CollabMetadata (line 113) | pub struct CollabMetadata {
function serialize (line 124) | pub fn serialize<S>(uuid: &Uuid, serializer: S) -> Result<S::Ok, S::Error>
function deserialize (line 131) | pub fn deserialize<'de, D>(deserializer: D) -> Result<Uuid, D::Error>
FILE: libs/database/src/collab/mod.rs
function partition_key_from_collab_type (line 8) | pub(crate) fn partition_key_from_collab_type(collab_type: &CollabType) -...
FILE: libs/database/src/file/file_storage.rs
type ResponseBlob (line 17) | pub trait ResponseBlob {
method to_blob (line 18) | fn to_blob(self) -> Vec<u8>;
method content_type (line 19) | fn content_type(&self) -> Option<String>;
type BucketClient (line 23) | pub trait BucketClient {
method put_blob (line 26) | async fn put_blob(
method put_blob_with_content_type (line 33) | async fn put_blob_with_content_type(
method delete_blob (line 40) | async fn delete_blob(&self, object_key: &str) -> Result<Self::Response...
method delete_blobs (line 42) | async fn delete_blobs(&self, object_key: Vec<String>) -> Result<(), Ap...
method get_blob (line 44) | async fn get_blob(&self, object_key: &str) -> Result<Self::ResponseDat...
method create_upload (line 46) | async fn create_upload(
method upload_part (line 51) | async fn upload_part(
method complete_upload (line 56) | async fn complete_upload(
method remove_dir (line 62) | async fn remove_dir(&self, dir: &str) -> Result<(), AppError>;
method list_dir (line 64) | async fn list_dir(&self, dir: &str, limit: usize) -> Result<Vec<String...
type BlobKey (line 67) | pub trait BlobKey: Send + Sync {
method workspace_id (line 68) | fn workspace_id(&self) -> &Uuid;
method object_key (line 69) | fn object_key(&self) -> String;
method blob_metadata_key (line 70) | fn blob_metadata_key(&self) -> String;
method e_tag (line 71) | fn e_tag(&self) -> &str;
type BucketStorage (line 74) | pub struct BucketStorage<C> {
function new (line 83) | pub fn new(client: C, pg_pool: PgPool) -> Self {
function remove_dir (line 87) | pub async fn remove_dir(&self, dir: &str) -> Result<(), AppError> {
function put_blob_with_content_type (line 95) | pub async fn put_blob_with_content_type<K: BlobKey>(
function delete_blob (line 126) | pub async fn delete_blob(&self, key: impl BlobKey) -> Result<(), AppErro...
function get_blob_metadata (line 135) | pub async fn get_blob_metadata(
function get_blob (line 144) | pub async fn get_blob(&self, key: &impl BlobKey) -> Result<Vec<u8>, AppE...
function create_upload (line 149) | pub async fn create_upload(
function upload_part (line 157) | pub async fn upload_part(
function complete_upload (line 165) | pub async fn complete_upload(
FILE: libs/database/src/file/s3_client_impl.rs
type S3BucketStorage (line 25) | pub type S3BucketStorage = BucketStorage<AwsS3BucketClientImpl>;
method from_bucket_impl (line 28) | pub fn from_bucket_impl(client: AwsS3BucketClientImpl, pg_pool: sqlx::...
type AwsS3BucketClientImpl (line 34) | pub struct AwsS3BucketClientImpl {
method new (line 42) | pub fn new(
method gen_presigned_url (line 57) | pub async fn gen_presigned_url(
method complete_upload_and_get_metadata (line 103) | async fn complete_upload_and_get_metadata(
type ResponseData (line 151) | type ResponseData = S3ResponseData;
method put_blob (line 153) | async fn put_blob(
method put_blob_with_content_type (line 180) | async fn put_blob_with_content_type(
method delete_blob (line 207) | async fn delete_blob(&self, object_key: &str) -> Result<Self::ResponseDa...
method delete_blobs (line 222) | async fn delete_blobs(&self, object_keys: Vec<String>) -> Result<(), App...
method get_blob (line 265) | async fn get_blob(&self, object_key: &str) -> Result<Self::ResponseData,...
method create_upload (line 302) | async fn create_upload(
method upload_part (line 328) | async fn upload_part(
method complete_upload (line 360) | async fn complete_upload(
method remove_dir (line 384) | async fn remove_dir(&self, parent_dir: &str) -> Result<(), AppError> {
method list_dir (line 479) | async fn list_dir(&self, dir: &str, limit: usize) -> Result<Vec<String>,...
type S3ResponseData (line 502) | pub struct S3ResponseData {
method from (line 526) | fn from(_: DeleteObjectOutput) -> Self {
method from (line 535) | fn from(_: DeleteObjectsOutput) -> Self {
method new_with_data (line 544) | pub fn new_with_data(data: Vec<u8>, content_type: Option<String>) -> S...
type Target (line 508) | type Target = Vec<u8>;
method deref (line 510) | fn deref(&self) -> &Self::Target {
method to_blob (line 516) | fn to_blob(self) -> Vec<u8> {
method content_type (line 520) | fn content_type(&self) -> Option<String> {
FILE: libs/database/src/history/ops.rs
function insert_history (line 12) | pub async fn insert_history(
function insert_snapshot_meta (line 62) | async fn insert_snapshot_meta<'a, E: Executor<'a, Database = Postgres>>(
function get_snapshot_meta_list (line 97) | pub async fn get_snapshot_meta_list(
function insert_snapshot_state (line 133) | async fn insert_snapshot_state<'a, E: Executor<'a, Database = Postgres>>(
function get_latest_snapshot_state (line 164) | pub async fn get_latest_snapshot_state<'a, E: Executor<'a, Database = Po...
function get_latest_snapshot (line 190) | pub async fn get_latest_snapshot(
type AFSnapshotMetaPbRow (line 253) | pub struct AFSnapshotMetaPbRow {
type AFSnapshotStateRow (line 261) | pub struct AFSnapshotStateRow {
FILE: libs/database/src/index/collab_embeddings_ops.rs
function get_index_status (line 16) | pub async fn get_index_status<'a, E>(
type Fragment (line 65) | pub struct Fragment {
method from (line 76) | fn from(value: AFCollabEmbeddedChunk) -> Self {
method array_type_info (line 90) | fn array_type_info() -> PgTypeInfo {
function upsert_collab_embeddings (line 95) | pub async fn upsert_collab_embeddings(
function get_collab_embedding_fragment (line 122) | pub async fn get_collab_embedding_fragment<'a, E>(
function get_collab_embedding_fragment_ids (line 164) | pub async fn get_collab_embedding_fragment_ids<'a, E>(
function stream_collabs_without_embeddings (line 193) | pub async fn stream_collabs_without_embeddings(
function update_collab_indexed_at (line 223) | pub async fn update_collab_indexed_at<'a, E>(
function get_collabs_indexed_at (line 249) | pub async fn get_collabs_indexed_at<'a, E>(
type CollabId (line 275) | pub struct CollabId {
method from (line 282) | fn from(value: CollabId) -> Self {
FILE: libs/database/src/index/search_ops.rs
function search_documents (line 14) | pub async fn search_documents<'a, E: Executor<'a, Database = Postgres>>(
function _cosine_relevance_score_fn (line 111) | fn _cosine_relevance_score_fn(distance: f64) -> f64 {
type SearchDocumentParams (line 123) | pub struct SearchDocumentParams {
type SearchDocumentRow (line 141) | pub struct SearchDocumentRow {
type SearchDocumentResult (line 161) | pub struct SearchDocumentResult {
FILE: libs/database/src/listener.rs
type PostgresDBListener (line 8) | pub struct PostgresDBListener<T: Clone> {
function new (line 16) | pub async fn new(pg_pool: &PgPool, channel: &str) -> Result<Self, Error> {
FILE: libs/database/src/notification.rs
function select_recent_page_mentions (line 7) | pub async fn select_recent_page_mentions<'a, E: Executor<'a, Database = ...
function update_page_mention_notification_status (line 52) | pub async fn update_page_mention_notification_status<'a, E: Executor<'a,...
FILE: libs/database/src/pg_row.rs
type AFWorkspaceRow (line 18) | pub struct AFWorkspaceRow {
type Error (line 32) | type Error = AppError;
method try_from (line 34) | fn try_from(value: AFWorkspaceRow) -> Result<Self, Self::Error> {
type AFWorkspaceRowWithMemberCountAndRole (line 63) | pub struct AFWorkspaceRowWithMemberCountAndRole {
type Error (line 79) | type Error = AppError;
method try_from (line 81) | fn try_from(value: AFWorkspaceRowWithMemberCountAndRole) -> Result<Self,...
type AFWorkspaceWithMemberCountRow (line 110) | pub struct AFWorkspaceWithMemberCountRow {
type Error (line 125) | type Error = AppError;
method try_from (line 127) | fn try_from(value: AFWorkspaceWithMemberCountRow) -> Result<Self, Self::...
type AFUserRow (line 157) | pub struct AFUserRow {
type AFUserIdRow (line 171) | pub struct AFUserIdRow {
type AFUserProfileRow (line 178) | pub struct AFUserProfileRow {
type Error (line 193) | type Error = AppError;
method try_from (line 195) | fn try_from(value: AFUserProfileRow) -> Result<Self, Self::Error> {
type AFWorkspaceMemberPermRow (line 220) | pub struct AFWorkspaceMemberPermRow {
type AFWorkspaceMemberRow (line 227) | pub struct AFWorkspaceMemberRow {
method from (line 237) | fn from(value: AFWorkspaceMemberRow) -> Self {
type AFCollabMemberAccessLevelRow (line 249) | pub struct AFCollabMemberAccessLevelRow {
type AFCollabMemberRow (line 256) | pub struct AFCollabMemberRow {
type AFBlobStatus (line 264) | pub enum AFBlobStatus {
method from (line 272) | fn from(value: i16) -> Self {
type AFBlobSource (line 285) | pub enum AFBlobSource {
method from (line 291) | fn from(value: i16) -> Self {
type AFBlobMetadataRow (line 301) | pub struct AFBlobMetadataRow {
type AFUserNotification (line 316) | pub struct AFUserNotification {
type AFPermissionRow (line 321) | pub struct AFPermissionRow {
type AFSnapshotRow (line 329) | pub struct AFSnapshotRow {
type AFWorkspaceInvitationMinimal (line 341) | pub struct AFWorkspaceInvitationMinimal {
type AFCollabRowMeta (line 350) | pub struct AFCollabRowMeta {
type AFCollabData (line 360) | pub struct AFCollabData {
type AFChatRow (line 368) | pub struct AFChatRow {
type AFChatMessageRow (line 379) | pub struct AFChatMessageRow {
type AFWebUserColumn (line 387) | pub struct AFWebUserColumn {
method from (line 394) | fn from(val: AFWebUserColumn) -> Self {
type AFWebUserWithEmailColumn (line 404) | pub struct AFWebUserWithEmailColumn {
function mask_web_user_email (line 411) | fn mask_web_user_email(email: &str) -> String {
method from (line 420) | fn from(val: AFWebUserWithEmailColumn) -> Self {
type AFGlobalCommentRow (line 435) | pub struct AFGlobalCommentRow {
method from (line 447) | fn from(val: AFGlobalCommentRow) -> Self {
type AFReactionRow (line 461) | pub struct AFReactionRow {
method from (line 468) | fn from(val: AFReactionRow) -> Self {
type AFTemplateCategoryRow (line 478) | pub struct AFTemplateCategoryRow {
method from (line 489) | fn from(value: AFTemplateCategoryRow) -> Self {
type AFTemplateCategoryMinimalRow (line 504) | pub struct AFTemplateCategoryMinimalRow {
method from (line 512) | fn from(value: AFTemplateCategoryMinimalRow) -> Self {
type AFTemplateCategoryTypeColumn (line 524) | pub enum AFTemplateCategoryTypeColumn {
method from (line 539) | fn from(val: TemplateCategoryType) -> Self {
method from (line 530) | fn from(value: AFTemplateCategoryTypeColumn) -> Self {
type AccountLinkColumn (line 549) | pub struct AccountLinkColumn {
method from (line 555) | fn from(value: AccountLinkColumn) -> Self {
type AFTemplateCreatorRow (line 565) | pub struct AFTemplateCreatorRow {
method from (line 574) | fn from(value: AFTemplateCreatorRow) -> Self {
type AFTemplateCreatorMinimalColumn (line 593) | pub struct AFTemplateCreatorMinimalColumn {
method from (line 600) | fn from(value: AFTemplateCreatorMinimalColumn) -> Self {
type AFTemplateMinimalRow (line 611) | pub struct AFTemplateMinimalRow {
method from (line 625) | fn from(value: AFTemplateMinimalRow) -> Self {
type AFTemplateRow (line 642) | pub struct AFTemplateRow {
method from (line 658) | fn from(value: AFTemplateRow) -> Self {
type AFTemplateGroupRow (line 685) | pub struct AFTemplateGroupRow {
method from (line 691) | fn from(value: AFTemplateGroupRow) -> Self {
type AFImportTask (line 704) | pub struct AFImportTask {
type AFAccessRequestStatusColumn (line 717) | pub enum AFAccessRequestStatusColumn {
method from (line 724) | fn from(value: AFAccessRequestStatusColumn) -> Self {
type AFAccessRequesterColumn (line 734) | pub struct AFAccessRequesterColumn {
method from (line 743) | fn from(value: AFAccessRequesterColumn) -> Self {
type AFAccessRequestMinimalColumn (line 755) | pub struct AFAccessRequestMinimalColumn {
method from (line 763) | fn from(value: AFAccessRequestMinimalColumn) -> Self {
type AFAccessRequestWithViewIdColumn (line 774) | pub struct AFAccessRequestWithViewIdColumn {
type Error (line 784) | type Error = anyhow::Error;
method try_from (line 786) | fn try_from(value: AFAccessRequestWithViewIdColumn) -> Result<Self, Self...
type AFQuickNoteRow (line 799) | pub struct AFQuickNoteRow {
method from (line 807) | fn from(value: AFQuickNoteRow) -> Self {
type AFPublishViewWithPublishInfo (line 817) | pub struct AFPublishViewWithPublishInfo {
function test_mask_web_user_email (line 831) | fn test_mask_web_user_email() {
FILE: libs/database/src/publish.rs
function select_user_is_collab_publisher_for_all_views (line 10) | pub async fn select_user_is_collab_publisher_for_all_views(
function select_workspace_publish_namespace_exists (line 38) | pub async fn select_workspace_publish_namespace_exists<'a, E: Executor<'...
function insert_non_orginal_workspace_publish_namespace (line 59) | pub async fn insert_non_orginal_workspace_publish_namespace(
function update_non_orginal_workspace_publish_namespace (line 86) | pub async fn update_non_orginal_workspace_publish_namespace(
function update_workspace_default_publish_view (line 118) | pub async fn update_workspace_default_publish_view<'a, E: Executor<'a, D...
function update_workspace_default_publish_view_set_null (line 146) | pub async fn update_workspace_default_publish_view_set_null<
function select_workspace_publish_namespaces (line 176) | pub async fn select_workspace_publish_namespaces(
function select_workspace_publish_namespace (line 196) | pub async fn select_workspace_publish_namespace(
function delete_published_collabs (line 218) | async fn delete_published_collabs(
function insert_or_replace_publish_collabs (line 245) | pub async fn insert_or_replace_publish_collabs(
function select_publish_collab_meta (line 314) | pub async fn select_publish_collab_meta<'a, E: Executor<'a, Database = P...
function set_published_collabs_as_unpublished (line 337) | pub async fn set_published_collabs_as_unpublished<'a, E: Executor<'a, Da...
function update_published_collabs (line 370) | pub async fn update_published_collabs(
function select_published_metadata_for_view_id (line 431) | pub async fn select_published_metadata_for_view_id(
function select_published_data_for_view_id (line 449) | pub async fn select_published_data_for_view_id(
function select_published_collab_workspace_view_id (line 467) | pub async fn select_published_collab_workspace_view_id<'a, E: Executor<'...
function select_published_collab_blob (line 489) | pub async fn select_published_collab_blob<'a, E: Executor<'a, Database =...
function select_default_published_view_id_for_namespace (line 511) | pub async fn select_default_published_view_id_for_namespace<
function select_default_published_view_id (line 532) | pub async fn select_default_published_view_id<'a, E: Executor<'a, Databa...
function select_most_recent_non_original_namespace (line 550) | async fn select_most_recent_non_original_namespace(
function select_publish_info_for_view_ids (line 571) | pub async fn select_publish_info_for_view_ids(
function select_published_collab_info (line 611) | pub async fn select_published_collab_info(
function select_all_published_collab_info (line 622) | pub async fn select_all_published_collab_info(
function use_non_orginal_namespace_if_possible (line 653) | async fn use_non_orginal_namespace_if_possible(
function select_workspace_id_for_publish_namespace (line 671) | pub async fn select_workspace_id_for_publish_namespace<'a, E: Executor<'...
function select_published_view_ids_for_workspace (line 689) | pub async fn select_published_view_ids_for_workspace<'a, E: Executor<'a,...
function select_published_view_ids_with_publish_info_for_workspace (line 708) | pub async fn select_published_view_ids_with_publish_info_for_workspace<
FILE: libs/database/src/quick_note.rs
function insert_new_quick_note (line 8) | pub async fn insert_new_quick_note<'a, E: Executor<'a, Database = Postgr...
function select_quick_notes_with_one_more_than_limit (line 29) | pub async fn select_quick_notes_with_one_more_than_limit<
function update_quick_note_by_id (line 78) | pub async fn update_quick_note_by_id<'a, E: Executor<'a, Database = Post...
function delete_quick_note_by_id (line 93) | pub async fn delete_quick_note_by_id<'a, E: Executor<'a, Database = Post...
FILE: libs/database/src/resource_usage.rs
function is_blob_metadata_exists (line 13) | pub async fn is_blob_metadata_exists(
function insert_blob_metadata (line 36) | pub async fn insert_blob_metadata(
type BulkInsertMeta (line 67) | pub struct BulkInsertMeta {
function insert_blob_metadata_bulk (line 75) | pub async fn insert_blob_metadata_bulk<'a, E: Executor<'a, Database = Po...
function delete_blob_metadata (line 114) | pub async fn delete_blob_metadata(
function get_blob_metadata (line 135) | pub async fn get_blob_metadata(
function get_all_workspace_blob_metadata (line 163) | pub async fn get_all_workspace_blob_metadata(
function get_all_workspace_blob_ids (line 183) | pub async fn get_all_workspace_blob_ids(
function get_workspace_usage_size (line 205) | pub async fn get_workspace_usage_size(pool: &PgPool, workspace_id: &Uuid...
FILE: libs/database/src/tem
Condensed preview — 905 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,391K chars).
[
{
"path": ".dockerignore",
"chars": 89,
"preview": ".env\n.dockerignore\nspec.yaml\n**/target\ntarget/\ndeploy/\ntests/\ndocker/Dockerfile\nscripts/\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 17,
"preview": "ko_fi: appflowy\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 744,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[Bug] Untitled Bug Issue\"\nlabels: ''\nassignees: '"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 525,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: \"[FR] Untitled Feature Request\"\nlabels: ''\nassi"
},
{
"path": ".github/workflows/audit.yml",
"chars": 361,
"preview": "name: Security audit\non:\n schedule:\n - cron: '0 0 * * *'\n push:\n paths:\n - '**/Cargo.toml'\n - '**/Carg"
},
{
"path": ".github/workflows/build_test_docker_image.yaml",
"chars": 6526,
"preview": "name: Manually Build Selected Docker Images\n\non:\n workflow_dispatch:\n inputs:\n branch:\n description: \"Br"
},
{
"path": ".github/workflows/client_api_check.yml",
"chars": 923,
"preview": "name: ClientAPI Check\n\non:\n push:\n branches: [ main ]\n pull_request:\n types: [ opened, synchronize, reopened ]\n "
},
{
"path": ".github/workflows/commitlint.yml",
"chars": 234,
"preview": "name: Lint Commit Messages\non: [pull_request, push]\n\njobs:\n commitlint:\n runs-on: ubuntu-latest\n steps:\n - u"
},
{
"path": ".github/workflows/integration_test.yml",
"chars": 7052,
"preview": "name: AppFlowy-Cloud Integrations\n\non:\n push:\n branches: [ main ]\n paths:\n - 'src/**'\n - 'libs/**'\n "
},
{
"path": ".github/workflows/push_latest_docker.yml",
"chars": 11906,
"preview": "name: DockerHub Build and Push\n\n#`DOCKER_HUB_USERNAME` is the username you use to log in to Docker Hub at https://hub.do"
},
{
"path": ".github/workflows/rustlint.yml",
"chars": 1253,
"preview": "name: Lint\n\non:\n push:\n branches: [ main ]\n pull_request:\n types: [ opened, synchronize, reopened ]\n branches"
},
{
"path": ".github/workflows/stress_test.yml",
"chars": 2437,
"preview": "name: AppFlowy-Cloud Stress Test\n\non: [ pull_request ]\n\nconcurrency:\n group: stress-test-${{ github.workflow }}-${{ git"
},
{
"path": ".github/workflows/wasm_publish.yml",
"chars": 2104,
"preview": "name: Manual NPM Package Publish\n\non:\n workflow_dispatch:\n inputs:\n working_directory:\n description: 'Wo"
},
{
"path": ".github/workflows/web_docker.yml",
"chars": 2790,
"preview": "name: AppFlowy Web image build and push\non:\n workflow_dispatch:\n inputs:\n version:\n description: 'AppFlo"
},
{
"path": ".gitignore",
"chars": 340,
"preview": "# Generated by Cargo\n# will have compiled files and executables\n**/target/\n\n# These are backup files generated by rustfm"
},
{
"path": ".sqlx/query-0389af6b225125d09c5a75b443561dba4d97b786d040e5b8d5a76de36716beb2.json",
"chars": 484,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid\\n FROM af_collab\\n WHERE workspace_id = $1\\n "
},
{
"path": ".sqlx/query-05e89f62ff993fa2e4b0002c0022bba9706359e402b07b15ccdeb67492625064.json",
"chars": 632,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT updated_at, blob\\n FROM af_collab\\n WHERE oid = "
},
{
"path": ".sqlx/query-06096ba1131e78d3da5df25a4b0a1193f11c9782abaf91faf263a116f90e51af.json",
"chars": 808,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_collab (oid, blob, len, partition_key, owner_uid, work"
},
{
"path": ".sqlx/query-075b89cfe2572d28e7adfc29bbe52fef4afdd5013686f7294efd966739886f0d.json",
"chars": 415,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT email FROM af_user WHERE uid = $1\\n \",\n \"describe\": {\n \"c"
},
{
"path": ".sqlx/query-0781735c56d22370302beec06863dccbbb9e664b212de93e5073508a82b91609.json",
"chars": 370,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_workspace\\n SET default_published_view_id = $1\\n WH"
},
{
"path": ".sqlx/query-081abcd7f80664e8acd205833b0f9ca43bc1ccc03d992e7b1c45c3e401a6007a.json",
"chars": 501,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n database_storage_id\\n FROM public.af_works"
},
{
"path": ".sqlx/query-084655c4e26f78c9c0924ea39a099dc9c00ee73dc6ade2dcff27c03042ebe8c3.json",
"chars": 402,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_workspace_invite_code (workspace_id, invite_code, expire"
},
{
"path": ".sqlx/query-09cf032adce81ba99362b3df50ba104f4e1eb2d538350c65cf615ea13f1c37f0.json",
"chars": 312,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_template_view\\n WHERE view_id = $1\\n \",\n \"describe\""
},
{
"path": ".sqlx/query-09ff850490eab213cfa0ad88ece9ce7baa39beabee19754fd993268d29552eb9.json",
"chars": 692,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_chat_messages (chat_id, author, content, meta_data)\\n "
},
{
"path": ".sqlx/query-0affbd65859d6299c6ba736797f970b86552b83d95316ec3f54f93501e00b522.json",
"chars": 500,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id\\n FROM af_workspace\\n WHERE owner_uid = ("
},
{
"path": ".sqlx/query-0d9c62acb33b96bb81536d1ad3121174403bcd40b777eb8d384fe8e81e1db3c4.json",
"chars": 467,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT invite_code\\n FROM af_workspace_invite_code\\n WHERE wo"
},
{
"path": ".sqlx/query-0eeb2af3c6974c7e6d1c20bb4b08965eae9b0a291c7cef6451208b7740b9804c.json",
"chars": 2156,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH last_mentioned AS (\\n SELECT\\n person_id,\\n "
},
{
"path": ".sqlx/query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json",
"chars": 711,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id, namespace, is_original\\n FROM af_workspace_na"
},
{
"path": ".sqlx/query-1545a42d784a1a5fa8e9ed6128814608b9230b64ce23dcd85de444a7aa01bf9e.json",
"chars": 1706,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n au.uuid,\\n COALESCE(awmp.name, au.name) AS \\\"nam"
},
{
"path": ".sqlx/query-15613595695e2e722c45712931ce0eb8d2a3deb1bb665d1f091f354a3ad96b92.json",
"chars": 570,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM af_published_collab\\n "
},
{
"path": ".sqlx/query-16208887bc2f2ca6b5f3df8062a12b482908f9f113c0474eeae75f6784b5e0fc.json",
"chars": 467,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_published_view_reaction (comment_id, view_id, created_by"
},
{
"path": ".sqlx/query-18207c125d5f974894576ee1dcfe406b221e9119f570403ec7a41ae1359b3f6c.json",
"chars": 1080,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n workspace_id,\\n inviter AS inviter_uid,\\n ("
},
{
"path": ".sqlx/query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json",
"chars": 502,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT af.uuid\\n FROM af_published_collab apc\\n JOIN af_user "
},
{
"path": ".sqlx/query-1b1ff4352abb6dad982279ee99c8dccb3621b55a838998c1b9803982ae10f622.json",
"chars": 471,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \" SELECT uid, uuid FROM af_user\",\n \"describe\": {\n \"columns\": [\n {\n "
},
{
"path": ".sqlx/query-1bd79541a2b351b11ae94fe8a7aad408f9b563fd123099aa701a1e07ce797d2f.json",
"chars": 593,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n af_user.uuid\\n FROM public.af_workspace_member\\n "
},
{
"path": ".sqlx/query-1c8f022ff5add11376dbbc17efd874dd31fd908c4f17be1bded18dbc689e3b36.json",
"chars": 360,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE public.af_workspace\\n SET is_initialized = $2\\n WHERE worksp"
},
{
"path": ".sqlx/query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json",
"chars": 354,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_workspace\\n SET settings = $1\\n WHERE workspace_id "
},
{
"path": ".sqlx/query-21195760ea7ed2dc4eda1dc2bd0eed9afcc63651ba6e67e7db675307e3b87821.json",
"chars": 366,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE public.af_workspace\\n SET workspace_name = $1\\n WHERE "
},
{
"path": ".sqlx/query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json",
"chars": 550,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT default_published_view_id\\n FROM af_workspace\\n WHERE "
},
{
"path": ".sqlx/query-21f66ca39be3377f8c5e4b218123e266fe8e03260ecd1891c644820892dda2b2.json",
"chars": 1280,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT * FROM af_collab_snapshot\\n WHERE sid = $1 AND oid = $2 AND"
},
{
"path": ".sqlx/query-223e530f8605f6d00789344565666f57705151e3c2318519e877b22f8ffc871b.json",
"chars": 1315,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n apc.view_id,\\n apc.publish_name,\\n au.ema"
},
{
"path": ".sqlx/query-229a99b7a3a2f136babd5499c2a1047fe840903acf0d06e57fb78ca9b03e7008.json",
"chars": 909,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid, snapshot, snapshot_version, created_at\\n FROM af_s"
},
{
"path": ".sqlx/query-2394226650959b34ae80b1948b7a111720b3ea5da48934d8d7e395ecc84e6985.json",
"chars": 613,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_template_view SET\\n updated_at = NOW(),\\n name = $2,\\"
},
{
"path": ".sqlx/query-24c5fb37a4391d590e83d2710e9a2ee7f4d06efcdd6034df1f67bb0d9db45716.json",
"chars": 524,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT name, email FROM af_user WHERE uuid = $1\\n \",\n \"describe\": {\n "
},
{
"path": ".sqlx/query-2593b975fcf2dcf0129a1390fd8e2888d440e07c904d7eb3ca14957be8bc6069.json",
"chars": 750,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT * FROM public.af_permissions WHERE id = $1\\n \",\n \"describe\":"
},
{
"path": ".sqlx/query-2902fd3a9faa9481754d38b29abb543640c0b5564dca8f0141c7de2b8aab9551.json",
"chars": 1126,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid,workspace_id,owner_uid,deleted_at,created_at,updated_at\\n "
},
{
"path": ".sqlx/query-291f0916b7868f3598b50f659689b9c77d34112c2a2fff9fc04775da9f97e46d.json",
"chars": 485,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM af_workspace\\n WHERE work"
},
{
"path": ".sqlx/query-29279a0a97beb08aea84d588374c7534c28bd9c4da24b1ee20245109f5c33880.json",
"chars": 418,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_workspace_member\\n SET updated_at = $3\\n WHER"
},
{
"path": ".sqlx/query-2b0754f55889a20c294d2a77ba8d3fa34c8174856abfdede34797851183a177a.json",
"chars": 606,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS (\\n SELECT 1\\n FROM public.af_workspace\\n WHERE\\n "
},
{
"path": ".sqlx/query-2c0a776a787bc748857873b682d2fa3c549ffeaf767aa8ee05b09b3857505ded.json",
"chars": 825,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\nSELECT\\n w.settings['disable_search_indexing']::boolean as disable_search_in"
},
{
"path": ".sqlx/query-2c496e29533dd27117fbb688ba2324f04d7cc306181fcf3f82079d5639f632c4.json",
"chars": 338,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_chat\\n SET deleted_at = now()\\n WHERE chat_id"
},
{
"path": ".sqlx/query-2d6d00669ea7d598d69d848d143f33e8c144d35b3d4c5293f98344b2c62fe6c8.json",
"chars": 609,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT namespace\\n FROM af_workspace_namespace\\n WHERE worksp"
},
{
"path": ".sqlx/query-2dda0bc4d9486a49c0af00d8ee4408c970a2ba3533217c130281e7db5a4e3d6b.json",
"chars": 578,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id, metadata\\n FROM af_published_collab\\n WH"
},
{
"path": ".sqlx/query-30a592588fe20bb1444178b7ee9e73e37d1d55572f936988528178bfa10158e5.json",
"chars": 785,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT true\\n FROM af_published_collab\\n "
},
{
"path": ".sqlx/query-315840e0657ea0b8d162635b4cc21ce84a09fd7ea14ea07980869a80ee06900c.json",
"chars": 849,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_page_mention (workspace_id, view_id, view_name, person_i"
},
{
"path": ".sqlx/query-32fd3dcd1a3e02c32ddedb232b6af2e7f9ea160354528f3299cca62367af10f7.json",
"chars": 431,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_workspace_member (workspace_id, uid, role_id)\\n VAL"
},
{
"path": ".sqlx/query-340b8cef5a7676541b86505cdf103fcb5b54c40a9d6e599dc1d9dc0a95e1e862.json",
"chars": 1689,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH creator_number_of_templates AS (\\n SELECT\\n creator_id,\\"
},
{
"path": ".sqlx/query-354166a6fa147dc6e17bfc14cb68d3a72a2e7c3aa2d115686deb12086786e034.json",
"chars": 474,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT role_id FROM af_workspace_member\\n WHERE workspace_id = $1 AN"
},
{
"path": ".sqlx/query-35622d4ebede28dd28b613edcf3970ad258286f176ce86e88bd662a602e4ad58.json",
"chars": 930,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_quick_note (workspace_id, uid, data) VALUES ($1, $2, $3)"
},
{
"path": ".sqlx/query-36733444fc8fac851fb540105ea6c9dca785455ae44ae518b98d8b57082e11d8.json",
"chars": 696,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM public.af_workspace_member\\n JO"
},
{
"path": ".sqlx/query-3865d921d76ac0d0eb16065738cddf82cb71945504116b0a04da759209b9c250.json",
"chars": 599,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid, indexed_at\\n FROM af_collab\\n WHERE oid = A"
},
{
"path": ".sqlx/query-3b2daf263b4022e69c819edb55d412da8ad3fe4377155d8485fbaf186069f389.json",
"chars": 834,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n uuid,\\n email,\\n name,\\n metadata "
},
{
"path": ".sqlx/query-3bb5b82d46c55bbfd51319310a3cd065c4b796462a1ddf3c17617ee65ce9961a.json",
"chars": 402,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_chat (chat_id, name, workspace_id, rag_ids)\\n VAL"
},
{
"path": ".sqlx/query-3c2c94b9ac0a329b92847d7176a7435f894c5ef3b3b11e3e2ae03a8ec454a6d8.json",
"chars": 2335,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH af_user_row AS (\\n SELECT * FROM af_user WHERE uuid = $1\\n "
},
{
"path": ".sqlx/query-3ca587826f0598e7786c765dcb2fcd6ae08d8aa404f02920307547c769a3f91b.json",
"chars": 2240,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH\\n updated_creator AS (\\n UPDATE af_template_creator\\n "
},
{
"path": ".sqlx/query-3cfb0a6d9a798f29422bc4bf4a52d3c86c3aae98c173b83c60eb57504a3d2c7c.json",
"chars": 509,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_snapshot_meta (oid, workspace_id, snapshot, snapshot_versi"
},
{
"path": ".sqlx/query-3d3309a4ae7a88b3f7c9608dd78a1c1dc9b237a37e29722bcd2910bd23f9d873.json",
"chars": 320,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_related_template_view\\n WHERE view_id = $1\\n \",\n \"d"
},
{
"path": ".sqlx/query-3fdd28c263edf5c91ab8b770e6106d4890ec4bae2ff3c20f80c40cb4042d9e03.json",
"chars": 424,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT SUM(len) FROM af_collab WHERE workspace_id = $1\\n \",\n \"describ"
},
{
"path": ".sqlx/query-40db0a61665bdb9f7e9d1ce2a6c0eb05703e36e83c87802a72630388588de8cd.json",
"chars": 674,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id, COUNT(*) AS member_count\\n FROM af_workspace_"
},
{
"path": ".sqlx/query-4123fa8796e8b56225155f79c2ee4c4dacda5ef51e858ce7dcb9877c7d55bd53.json",
"chars": 2102,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH invited_workspace_member AS (\\n SELECT\\n invite_co"
},
{
"path": ".sqlx/query-425b0b5ffbe3f1b80aedf15b8df1640c879d8d45883eee8b1e2fbd64eaf283d6.json",
"chars": 320,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_template_category\\n WHERE category_id = $1\\n \",\n \"d"
},
{
"path": ".sqlx/query-441316f35ca8c24bf78167f9fec48e28c05969bbbbe3d0e3d9e1569a375de476.json",
"chars": 1260,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT * FROM af_blob_metadata\\n WHERE workspace_id = $1 AND f"
},
{
"path": ".sqlx/query-4476f271f4ea8c83428b4178c43ee2894e380a7c3ae3cbc782f438fabc45de8b.json",
"chars": 320,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_access_request\\n WHERE request_id = $1\\n \",\n \"d"
},
{
"path": ".sqlx/query-44e4be501db0375fbd8ad8ed923bef887e361fe466ab46bdd6663f6cf97413a8.json",
"chars": 2056,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH new_workspace AS (\\n INSERT INTO public.af_workspace (owner_uid"
},
{
"path": ".sqlx/query-4f5951e61713d04963524b84648c9ff8c7be05f0089f6fd26fc6e0e0afeae579.json",
"chars": 466,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT reply_message_id\\n FROM af_chat_messages\\n WHERE messa"
},
{
"path": ".sqlx/query-4fc0611c846f86be652d42eb8ae21a5da0353fe810856aaabe91d7963329d098.json",
"chars": 951,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n ac.oid as object_id,\\n ace.partition_key,\\n "
},
{
"path": ".sqlx/query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.json",
"chars": 598,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT metadata\\n FROM af_published_collab\\n WHERE workspace_id = ("
},
{
"path": ".sqlx/query-523087b0101a35abfc70a561272acec7a357491a86901f7927b8242173b5c8c8.json",
"chars": 1801,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH\\n new_creator AS (\\n INSERT INTO af_template_creator (na"
},
{
"path": ".sqlx/query-52b936c6adf43ec5c7e777ad9379dec30b750fefad73684e552481f709006d04.json",
"chars": 619,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO public.af_workspace_invitation (\\n id,\\n "
},
{
"path": ".sqlx/query-53d87db17bb9c1d002adc82ba9f2c07ff33ea987a1157d7f6fd2344091b98deb.json",
"chars": 1032,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n avr.comment_id,\\n avr.reaction_type,\\n AR"
},
{
"path": ".sqlx/query-594af4041e0778476a699536316007f0a264f7d3db9de6326ef8082a2a898995.json",
"chars": 605,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT id, invitee_email\\n FROM public.af_workspace_invitation\\n "
},
{
"path": ".sqlx/query-598e731078fc6417039cc16772eb5bc6c74d24c1a8018a981d2175a483dc699c.json",
"chars": 598,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_access_request (\\n workspace_id,\\n view_id"
},
{
"path": ".sqlx/query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json",
"chars": 693,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id, view_id\\n FROM af_published_collab\\n WHE"
},
{
"path": ".sqlx/query-5c2d58bfdedbb1be71337a97d5ed5a2921f83dd549507b2834a4d2582d2c361b.json",
"chars": 391,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_collab_embeddings e\\n USING af_collab c\\n "
},
{
"path": ".sqlx/query-5cce5f82c0fb9237f724478e2167243bc772c092910f07b8226431a6dd70a7da.json",
"chars": 298,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"DELETE FROM af_quick_note WHERE quick_note_id = $1\",\n \"describe\": {\n \"colum"
},
{
"path": ".sqlx/query-5d408d36790ade4da1ceeb68b4a183aa7d9abc27b0ec42c2a3c5af26ad80f128.json",
"chars": 412,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT uid FROM af_user WHERE uuid = $1\\n \",\n \"describe\": {\n \"co"
},
{
"path": ".sqlx/query-5d51aef40f7e0716338b406263240dbc5e4a64cec6f1be10a3676e4f86ce4557.json",
"chars": 331,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_template_creator_account_link\\n WHERE creator_id = $1\\n"
},
{
"path": ".sqlx/query-5e0d58f612425e1cf36dfc7f56691cfb8f6def1a3d29645922cb437d11ce62ef.json",
"chars": 461,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT COUNT(*)\\n FROM public.af_chat_messages\\n WHERE "
},
{
"path": ".sqlx/query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json",
"chars": 483,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM af_workspace_namespace\\n"
},
{
"path": ".sqlx/query-62ed61bcf92fc0c3756f57d0fe05cdd12e70072f5646fe48790ad189a6e96b12.json",
"chars": 11608,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH template_with_creator_account_link AS (\\n SELECT\\n "
},
{
"path": ".sqlx/query-6380f5a6ded2dab8f18de42541c9d77c2f3af512e3f66e1b731ca7c00c9ea8f8.json",
"chars": 521,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO public.af_workspace_member (workspace_id, uid, role_id)\\n "
},
{
"path": ".sqlx/query-63f0871525ed70bd980223de574d241c0b738cfb7b0ea1fc808f02c0e05b9a2f.json",
"chars": 1035,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n avr.reaction_type,\\n ARRAY_AGG((au.uuid, au.name"
},
{
"path": ".sqlx/query-66218110851919b05b95b008a17547547d23f6baeeff8a5521b2b246126adc34.json",
"chars": 698,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT name, meta_data, rag_ids\\n FROM af_chat\\n WHERE "
},
{
"path": ".sqlx/query-6716ec4787f7155af97a4890730f4b3fe564ead8d99f8355ac249f9b39316238.json",
"chars": 2769,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH workspace_member_count AS (\\n SELECT\\n workspace_i"
},
{
"path": ".sqlx/query-67b381fdcd20f8cfe782d939e56bf94f105cdb23a59fefb846afe8105d91d129.json",
"chars": 2382,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH request_id_workspace_member_count AS (\\n SELECT\\n "
},
{
"path": ".sqlx/query-6821f1e02da2c71cdf0566a163c85ff185bf0ba89c770254c9c15880ba76a553.json",
"chars": 467,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_name\\n FROM public.af_workspace\\n WHERE work"
},
{
"path": ".sqlx/query-6935572cb23700243fbbd3dc382cdbf56edaadc4aab7855c237bce68e29414c0.json",
"chars": 575,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid, blob\\n FROM af_collab\\n WHERE oid = ANY($1) AN"
},
{
"path": ".sqlx/query-6aca3fde126cb1761c0a5ce1fbfa793bdbac4aed137cdf60eb3f277f36d7bf7a.json",
"chars": 1291,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n category_id AS id,\\n name,\\n description,\\n "
},
{
"path": ".sqlx/query-6ca2a2fa10d5334183d98176998d41f36948fe5624e290a32d0b50bc9fb256bf.json",
"chars": 710,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n updated_at as updated_at,\\n oid as row_id\\n "
},
{
"path": ".sqlx/query-6cc4a7da11a37413c9951983ee3f30de933cc6357a66c8e10366fde27acaefea.json",
"chars": 554,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_blob_metadata\\n (workspace_id, file_id, file_ty"
},
{
"path": ".sqlx/query-6f5d6d79587d7f7a52c920acccfe338a8c001ea30b722d3a6a1a60259d47913c.json",
"chars": 579,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT content,meta_data\\n FROM af_chat_messages\\n WHER"
},
{
"path": ".sqlx/query-6fbcd1c32c638530461c74f8c8195a5b1e1e6f7a389a6a60d889c88c5f47302a.json",
"chars": 495,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS (\\n SELECT 1 FROM af_collab\\n WHE"
},
{
"path": ".sqlx/query-71c15686124c05a4fdef066738eadd0ab17d6af1bfeffc480c8fe52a4e6edab8.json",
"chars": 443,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT file_id FROM af_blob_metadata\\n WHERE workspace_id = $1\\n \","
},
{
"path": ".sqlx/query-74de473589a405c3ab567e72a881869321095e2de497b2c1866c547f939c359c.json",
"chars": 1227,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT * FROM af_blob_metadata\\n WHERE workspace_id = $1\\n "
},
{
"path": ".sqlx/query-75dc8578510ae696bf4bcdd780f7cefc666b4436cf53edf30a98dd2ff7926799.json",
"chars": 1666,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n au.uuid,\\n COALESCE(awmp.name, au.name) AS \\\"nam"
},
{
"path": ".sqlx/query-770a4979e137ca08c5ea625259221f9d397a56defb8e498eb92da7b3a8af612b.json",
"chars": 344,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"UPDATE af_quick_note SET data = $1, updated_at = NOW() WHERE quick_note_id = $2"
},
{
"path": ".sqlx/query-786a59b28265397658aecf0318beeedece2a7f5bea80b9189f3989721035c593.json",
"chars": 2818,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH user_workspace_id AS (\\n SELECT workspace_id\\n FROM "
},
{
"path": ".sqlx/query-78a191e21a7e7a07eee88ed02c7fbf7035f908b8e4057f7ace1b3b5d433424fe.json",
"chars": 361,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_collab\\n SET deleted_at = $2\\n WHERE oid = $1"
},
{
"path": ".sqlx/query-794c4ced16801b3e98a62eb44c18c14137dd09b11be73442a7f46b2f938b8445.json",
"chars": 1123,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT message_id, content, created_at, author, meta_data, reply_mess"
},
{
"path": ".sqlx/query-7a4c7da16e99ff3875bdd7e0d189e26c3c1ab49672bace41992aecc446061850.json",
"chars": 421,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"SElECT settings FROM af_workspace WHERE workspace_id = $1\",\n \"describe\": {\n "
},
{
"path": ".sqlx/query-7a86f93afe6e77d4481920b08ed38926446f6473107d68dfcd82ffecddcee890.json",
"chars": 1775,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n awn.namespace,\\n apc.publish_name,\\n apc."
},
{
"path": ".sqlx/query-7aa6e41c80f0b2906d46e73ae05e8e70e133b7edd450b102715b8a487d6055ac.json",
"chars": 563,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT metadata, blob\\n FROM af_published_collab\\n WHERE view"
},
{
"path": ".sqlx/query-7f6b1db5fd7b4e235f1e04d9d990fa2d47edfed23e692fbab778d387b2861a22.json",
"chars": 414,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT name FROM af_user WHERE uuid = $1\\n \",\n \"describe\": {\n \"c"
},
{
"path": ".sqlx/query-811b6b01de4fdb06ad58185a5c49dfaa31aef8ea30ab3421d4afc13822fc0a9c.json",
"chars": 985,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT c.oid, c.partition_key, c.updated_at, c.blob\\n FROM af_"
},
{
"path": ".sqlx/query-816a026ca4c25329b2fb24d59efde9ab71798ff8b31ce7320e02344d4e8b3e42.json",
"chars": 443,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_published_view_reaction\\n WHERE comment_id = $1 AND"
},
{
"path": ".sqlx/query-834638eb3c38eb2c220aa23ac928874d87606b47ef3bb80540614ce2f8453936.json",
"chars": 522,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_snapshot_state (oid, workspace_id, doc_state, doc_state_ve"
},
{
"path": ".sqlx/query-842243ea6ca59135ae539060ff37b80791e76aa268a44642ede515f315e80c01.json",
"chars": 325,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_chat_messages\\n WHERE message_id = $1\\n \","
},
{
"path": ".sqlx/query-84c224af99f654e2e0ba11a411376794855483eedb0c30b1873ed660ca8d10cd.json",
"chars": 700,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n uuid,\\n name,\\n metadata ->> 'icon_url' AS avatar"
},
{
"path": ".sqlx/query-84e600f13d61c56a45133e7458d5152e68dec72030e5789bf4149a333b6ebdf5.json",
"chars": 330,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_template_view_template_category\\n WHERE view_id = $1\\n "
},
{
"path": ".sqlx/query-852c729791d5b5eb2dde5772ccbcd24579486e43886d95a11481991fdf28efa8.json",
"chars": 679,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_collab (oid, blob, len, partition_key, owner_uid, worksp"
},
{
"path": ".sqlx/query-85e9688218913dee85480932273ff6cf75d29af45638b195e73d73b6048806bf.json",
"chars": 811,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_workspace_member_profile (workspace_id, uid, name, avata"
},
{
"path": ".sqlx/query-865fe86df6d04f8abb6d477af13f8a2392a742f4027d99c290f0f156df48be07.json",
"chars": 1409,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n fragment_id,\\n content_type,\\n content,\\n em"
},
{
"path": ".sqlx/query-87628d6739441a22229d08832d09cbf4598c36204a6885b2e279c848cedcfa75.json",
"chars": 590,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT COUNT(*)\\n FROM af_published_collab\\n WHERE workspace_"
},
{
"path": ".sqlx/query-88516b9a2a424bc7697337d6f16b0d6e94b919597d709f930467423c5b4c0ec2.json",
"chars": 1298,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT * FROM af_collab_snapshot\\n WHERE workspace_id = $1 AND oid"
},
{
"path": ".sqlx/query-8cd79c307813a509119230c7673f86471463a06ad9a84764da8d5bb1e6168e1c.json",
"chars": 1359,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n af_user.uid,\\n af_user.name,\\n af_user.email,\\n "
},
{
"path": ".sqlx/query-90a302af791eeb5c5f60c3f95145e0e73c2a1652c5b547e4118bac1d005300de.json",
"chars": 524,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id\\n FROM af_workspace_invite_code\\n WHERE i"
},
{
"path": ".sqlx/query-90afca9cc8b6d4ca31e8ddf1ce466411b5034639df91b739f5cbe2af0ffb6811.json",
"chars": 590,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid, fragment_id\\n FROM af_collab_embeddings\\n W"
},
{
"path": ".sqlx/query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json",
"chars": 442,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_published_collab\\n SET\\n blob = E''::bytea,\\n "
},
{
"path": ".sqlx/query-936faba4e3c8fc3685d68f561a2c2d4f386c77cffde6f25702c19758a12669ce.json",
"chars": 475,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_workspace_member\\n SET\\n role_id = $1\\n "
},
{
"path": ".sqlx/query-93f6a59171d7cd08d321c777f24255621280fbcf6a2c009afd601eac16c9ba3a.json",
"chars": 488,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT view_id\\n FROM af_published_collab\\n WHERE workspace_i"
},
{
"path": ".sqlx/query-94555a25b986992bd3cfb67bd36ff015d39bdd78ac20d56570306616bf10faf3.json",
"chars": 1147,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_published_collab (workspace_id, view_id, publish_name, p"
},
{
"path": ".sqlx/query-95b1b405028c45c074121110d046f42f8229f150c2384671802ee7c1ef9e376d.json",
"chars": 354,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_access_request\\n SET status = $2\\n WHERE request_id"
},
{
"path": ".sqlx/query-95b4d7508569cac38c78d21a0a471772d3703e5678ee7ca0cd32d60f5343be91.json",
"chars": 662,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_chat_messages (chat_id, author, content)\\n VALU"
},
{
"path": ".sqlx/query-95c00cd1ce7cdb8f5c8f45d5262d371b1b3c3f903f4eab9c0070d9916e3f8c12.json",
"chars": 1754,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n avc.comment_id,\\n avc.created_at,\\n avc.u"
},
{
"path": ".sqlx/query-9ab1ff2abc6d51bc5a48a1dc6c294bbfdbe0d5f11a5e2ffc8c1973217b80307b.json",
"chars": 466,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_published_view_comment (view_id, created_by, content, re"
},
{
"path": ".sqlx/query-9b2a8297fa991418b255fc5cb6ad70d695c4dceed20bdc557bfedfc820511126.json",
"chars": 1559,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_template_category\\n SET\\n name = $2,\\n description"
},
{
"path": ".sqlx/query-a18d0c9536dba734715903c8e8f0b7be30d3e7a477c4ddd03533b781df2fb2c7.json",
"chars": 1801,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n awn.namespace,\\n apc.publish_name,\\n apc."
},
{
"path": ".sqlx/query-a3ab30d48e4a10aff1fbfa9dbc5d275a06598610bc471893c8c0febfc36c4737.json",
"chars": 461,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"SELECT EXISTS(SELECT 1 FROM af_chat_messages WHERE chat_id = $1 AND message_id "
},
{
"path": ".sqlx/query-a3c235bd5df50f80ec93c3d9f6da8db7e17e89788f30c5b6432c582992b6a009.json",
"chars": 539,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_published_collab\\n WHERE workspace_id = $1\\n "
},
{
"path": ".sqlx/query-a527a90fcb69c58a5e711555b6ee56e7b92ceabe746279eccd7ae3e9fa918e96.json",
"chars": 1322,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n af_user.uid,\\n af_user.name,\\n af_user.email,\\n "
},
{
"path": ".sqlx/query-a75bf8b11d832d154716d4618595b117da583a31b51baaf7b84e9ee0d0e3109c.json",
"chars": 510,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n person_id\\n FROM af_page_mention\\n WHERE work"
},
{
"path": ".sqlx/query-a7c03becdf9954611ac7ad96e1f5bb5e8364f095f1cc4dc23719b218eb032973.json",
"chars": 475,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT deleted_at IS NOT NULL AS is_deleted\\n FROM af_collab\\n"
},
{
"path": ".sqlx/query-aa75996ca6aa12f0bcaa5fb092ac279f8a94aadcc29d0e2b652dc420506835e7.json",
"chars": 674,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id, role_id\\n FROM af_workspace_member\\n WHE"
},
{
"path": ".sqlx/query-b16f38d563d4d0b35f06978a8b2c76dc5121b0e59f8b5992c9dad05dd101c8ad.json",
"chars": 2203,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n i.id AS invite_id,\\n i.workspace_id,\\n w."
},
{
"path": ".sqlx/query-b5024138772e13557df973c1c021daf74aab97b5874d7366c478c18ae2e89e58.json",
"chars": 413,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT uid FROM af_user WHERE email = $1\\n \",\n \"describe\": {\n \"c"
},
{
"path": ".sqlx/query-b509712055858af398fd12ddd1a8c3da54280cf55f0c53f340bddbf4bf09b3e0.json",
"chars": 438,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_related_template_view (view_id, related_view_id)\\n SELE"
},
{
"path": ".sqlx/query-ba815f67aab3f302a2982225b72c6113bbd9bc87326e4f0a3b44dadbb5f47920.json",
"chars": 619,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"SELECT uid, role_id as role, workspace_id FROM af_workspace_member\",\n \"describ"
},
{
"path": ".sqlx/query-bbb3c31ea7e9c0a3bdabbc23b2730ee0254f38a7c1457f917c8f37f1e1aefa12.json",
"chars": 371,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_chat_messages\\n SET reply_message_id = $2\\n W"
},
{
"path": ".sqlx/query-bd34e351ea1adc0d12d4f1cce5a855089b7f39a431dea2903c3e0b9a220640b8.json",
"chars": 1670,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH creator_number_of_templates AS (\\n SELECT\\n creator_id,\\"
},
{
"path": ".sqlx/query-bde2b88ffb1b59362c7ae82369892c79131c175924f95e5d48d75931fb846f41.json",
"chars": 416,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT email FROM af_user WHERE uuid = $1\\n \",\n \"describe\": {\n \""
},
{
"path": ".sqlx/query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json",
"chars": 755,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id, namespace, is_original\\n FROM af_workspace_na"
},
{
"path": ".sqlx/query-c335b73ad499b67100e4ce3131a526ddf1745488597c3392ae05e4b398a8715e.json",
"chars": 318,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_template_creator\\n WHERE creator_id = $1\\n \",\n \"des"
},
{
"path": ".sqlx/query-c360ec37792d567535ccd2a5011d92c7a201f516e92e204db855167f381c58b1.json",
"chars": 1921,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n workspace_id,\\n database_storage_id,\\n ow"
},
{
"path": ".sqlx/query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json",
"chars": 441,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_workspace_namespace\\n SET namespace = $1\\n WHERE wo"
},
{
"path": ".sqlx/query-c81848346ed2ff85f1d5fb8041fba648137a927762b385b97054552c00793a50.json",
"chars": 329,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_workspace_invite_code\\n WHERE workspace_id = $1\\n "
},
{
"path": ".sqlx/query-c843fb8517b1e364016b85a9e94927673bf8311bfbf723b610d59ecfef3fafce.json",
"chars": 721,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM public.af_workspace_member\\n WHERE\\n workspace_id = $1\\"
},
{
"path": ".sqlx/query-c8b1f57c5ddce8006a8e137be07f13b455f59657f5fcef67d69905ecec4cb063.json",
"chars": 2435,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n w.workspace_name AS \\\"workspace_name!\\\",\\n pm.wo"
},
{
"path": ".sqlx/query-ca2a21db67716e3f12b9f9240c1dba1b7cbe0bec1f59ef132fed53942ebad317.json",
"chars": 596,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_template_view (\\n view_id,\\n name,\\n descri"
},
{
"path": ".sqlx/query-cb2375ad0094baefed417645b781f40dcabfbfe4a4738c99bb4efff649e6a0e6.json",
"chars": 1451,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_template_category (name, description, icon, bg_color, cate"
},
{
"path": ".sqlx/query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json",
"chars": 537,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT view_id\\n FROM af_published_collab\\n WHERE workspace_i"
},
{
"path": ".sqlx/query-cbf1d3d9fdeb672eacd4b008879787bc1f0b22a554fb249d4e12a665d9767cbd.json",
"chars": 961,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n ac.oid as object_id,\\n ace.partition_key,\\n "
},
{
"path": ".sqlx/query-cce2abeed3399ad0b8867901735c5883c8d35fa82d6e0596c56eaf02c36a7e4f.json",
"chars": 593,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid, deleted_at IS NOT NULL AS is_deleted\\n FROM af_col"
},
{
"path": ".sqlx/query-d0a24b554fe420d7ebf856ae7f1525aff3695fc97e2f43041dc54a4e62a88746.json",
"chars": 362,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM af_blob_metadata\\n WHERE workspace_id = $1 AND fil"
},
{
"path": ".sqlx/query-d0e5f5097b35a15f19e9e7faf2c62336d5f130e939331e84c7d834f6028ea673.json",
"chars": 389,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_collab\\n SET indexed_at = $1\\n WHERE oid = $2 AND p"
},
{
"path": ".sqlx/query-d1ab621e0b6e8bc24f8fa8cbb975ae3b7f9f366cac02d66b5291d7207295ca29.json",
"chars": 1077,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT message_id, content, created_at, author, meta_data, reply_mess"
},
{
"path": ".sqlx/query-d1f845717b19636e61d1d96d7a5629754f3ded9bda9116953bd1b40bd80551ae.json",
"chars": 440,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_collab_snapshot (oid, blob, len, encrypt, workspace_id"
},
{
"path": ".sqlx/query-d2e87c077e5702cd57a88e23e1eabe4b0badd98ef99da1b185bffa8d5c9ed298.json",
"chars": 461,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"SELECT EXISTS(SELECT 1 FROM af_chat_messages WHERE chat_id = $1 AND message_id "
},
{
"path": ".sqlx/query-d366aca6b187f086e5a8281081adec190bbb3cd5256c5a77ed321b99cd34bbbc.json",
"chars": 1311,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n af_user.uid,\\n af_user.name,\\n af_user.email,\\n "
},
{
"path": ".sqlx/query-d388782f755f0b164ef36c168af142baeb9bbd3cc2b8b7cd736b346580be8790.json",
"chars": 437,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS (SELECT 1 FROM af_collab WHERE oid = $1 LIMIT 1)\\n \",\n"
},
{
"path": ".sqlx/query-d492c20dec54c7335744dcc139b95f30a80f06d9fd48de644630adf183e1ac34.json",
"chars": 500,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT COUNT(*)\\n FROM public.af_workspace_member\\n WHERE wor"
},
{
"path": ".sqlx/query-d4fa2c5f3c455be4694235009e82efdd99d366e3b0374f78efec8dd560f88d95.json",
"chars": 477,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT uid\\n FROM af_workspace_member\\n WHERE workspace_id = "
},
{
"path": ".sqlx/query-d61523de25986b47a382d36a1f18e590420f1b1285d024f5554cc02c375d6476.json",
"chars": 472,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM af_user\\n WHERE uuid = $1"
},
{
"path": ".sqlx/query-d756ec630d5b75dd0dc7df2339847e28bdf07a790e65fd40a64d7f9022f430bd.json",
"chars": 356,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE public.af_workspace\\n SET icon = $1\\n WHERE workspace_"
},
{
"path": ".sqlx/query-d84ab58e78653688e7c392ffad00d6e039be5ccb9c5b99b7088cc41cfe981873.json",
"chars": 1107,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT message_id, content, created_at, author, meta_data, reply_message"
},
{
"path": ".sqlx/query-d90e7efaca54b92de038b6eef20a7bd36be747dc38f7943fe299799c623038be.json",
"chars": 1315,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n af_user.uid,\\n af_user.name,\\n af_user.email,\\n "
},
{
"path": ".sqlx/query-d921f52e4bc3fef72c810e19455a2fa4fbd52f5a1f3a1838b146d001eadabd47.json",
"chars": 440,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_workspace_member\\n SET updated_at = CURRENT_TIMESTAMP\\"
},
{
"path": ".sqlx/query-da1434fe116cbb48bc5aac0b6905dd748f096bf78d3cdcfea3a576b4aaeba5fc.json",
"chars": 502,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_chat_messages\\n SET content = $2,\\n au"
},
{
"path": ".sqlx/query-dbc31936b3e79632f9c8bae449182274d9d75766bd9a5c383b96bd60e9c5c866.json",
"chars": 467,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT rag_ids\\n FROM af_chat\\n WHERE chat_id = $1 AND "
},
{
"path": ".sqlx/query-dc600fc160b55be22fb77e285fd7e5e646ef359fdbca9b62c6aefede5ebff606.json",
"chars": 7333,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH recent_template AS (\\n SELECT\\n template_template_"
},
{
"path": ".sqlx/query-e219696c80f1d4c38260ebeb50ec78e344975eef6760951dbf6201c01b8ceef0.json",
"chars": 466,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE public.af_workspace_invitation\\n SET status = 1\\n WHERE LOWE"
},
{
"path": ".sqlx/query-e2b4d66736962d1e3d0b9cf687ce5c5e653b465462f53433a28cf314e5c87d6c.json",
"chars": 846,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH ins_user AS (\\n INSERT INTO af_user (uid, uuid, email, name)\\"
},
{
"path": ".sqlx/query-e38e66d89806471f358b317778de35a68da4b9e6ca6e4b6a7c437ca7493b858c.json",
"chars": 413,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT uuid FROM af_user WHERE uid = $1\\n \",\n \"describe\": {\n \"co"
},
{
"path": ".sqlx/query-e6159a03f1521b44de59858cd95c48e62cabefba6cac629c104eec75d2868bf3.json",
"chars": 2846,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n WITH user_workspace_id AS (\\n SELECT workspace_id\\n FROM "
},
{
"path": ".sqlx/query-e6a0e771ffacfdec95ef8c36de769448384fda4350aa630becebd0e5add632f4.json",
"chars": 352,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n UPDATE af_published_view_comment\\n SET is_deleted = true\\n WH"
},
{
"path": ".sqlx/query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json",
"chars": 342,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_workspace_namespace\\n VALUES ($1, $2, FALSE)\\n \""
},
{
"path": ".sqlx/query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json",
"chars": 464,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT workspace_id\\n FROM af_workspace_namespace\\n WHERE nam"
},
{
"path": ".sqlx/query-ed9bce7f35c4dd8d41427bc56db67adf175044a8d31149b3745ceb8f9b3c82fa.json",
"chars": 866,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT oid, snapshot, snapshot_version, created_at\\n FROM af_snapshot_"
},
{
"path": ".sqlx/query-ef947984b00fdd32271e7e76d8b5d035cd4ca211b600787fda18d62a34b4c04b.json",
"chars": 643,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM public.af_workspace_member\\n "
},
{
"path": ".sqlx/query-f05042dd22f862603e63f63d47b93e579545c79cabe15d32304a47ca7665a55f.json",
"chars": 858,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT p.id, p.name, p.access_level, p.description FROM af_permissions p\\"
},
{
"path": ".sqlx/query-f18d6e075a522b0ce5935351dd57ab0dda4d8b4ed3881c2ad0bc09c07c43e6fe.json",
"chars": 843,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_collab_snapshot (oid, blob, len, encrypt, workspace_id)\\"
},
{
"path": ".sqlx/query-f409626142553d4496d15b5dfa7da8a5a238da86f56c930c09a261f2efa1f55c.json",
"chars": 771,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT sid as \\\"snapshot_id\\\", oid as \\\"object_id\\\", created_at\\n FROM"
},
{
"path": ".sqlx/query-f54ced785b4fdd22c9236b566996d5d9d4a8c91902e4029fe8f8f30f3af39b39.json",
"chars": 433,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n INSERT INTO af_template_view_template_category (view_id, category_id)\\n "
},
{
"path": ".sqlx/query-f58a2f05efbda0698d27d83be5c6816fc46e3de33f926c6343bcbfa90a387b07.json",
"chars": 324,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n DELETE FROM public.af_workspace\\n WHERE workspace_id = $1\\n \",\n"
},
{
"path": ".sqlx/query-f68cc2042d6aa78feeb33640e9ef13f46c5e10ee269ea0bd965b0e57dee6cf94.json",
"chars": 955,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT c.workspace_id, c.oid, c.partition_key\\n FROM af_collab"
},
{
"path": ".sqlx/query-f78c2c56568dcee0b93e759ee517fb87d6d115a02856a756d481ea4c863c0327.json",
"chars": 1207,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT snapshot_id, oid, doc_state, doc_state_version, deps_snapshot_"
},
{
"path": ".sqlx/query-f9c28d0fa124ef543259c6869d7c517deabda3af9a67c6e59d8e15c0245c83a0.json",
"chars": 482,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT default_published_view_id\\n FROM af_workspace\\n WHERE "
},
{
"path": ".sqlx/query-fa92aff963d9a0c69fb203f76f54728c67d52a68eada59ba3bd445c4b8aeceef.json",
"chars": 571,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT EXISTS(\\n SELECT 1\\n FROM af_workspace_invitation\\"
},
{
"path": ".sqlx/query-faf37892741717680e9a8d8e7d8decaba571d0dd129b57334aad7c63e2a2ef59.json",
"chars": 2173,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT\\n i.id AS invite_id,\\n i.workspace_id,\\n w."
},
{
"path": ".sqlx/query-fb21df2827de97055cdc1c493b079b29667f75b18169c909c4c8341697fd0105.json",
"chars": 1127,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT *\\n FROM af_chat\\n WHERE chat_id = $1 AND delete"
},
{
"path": ".sqlx/query-fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f.json",
"chars": 600,
"preview": "{\n \"db_name\": \"PostgreSQL\",\n \"query\": \"\\n SELECT blob\\n FROM af_published_collab\\n WHERE workspace_id ="
}
]
// ... and 705 more files (download for full content)
About this extraction
This page contains the full source code of the AppFlowy-IO/AppFlowy-Server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 905 files (4.0 MB), approximately 1.1M tokens, and a symbol index with 4805 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.