diff --git a/surrealdb/schema.surql b/surrealdb/schema.surql new file mode 100644 index 0000000..4e5da7d --- /dev/null +++ b/surrealdb/schema.surql @@ -0,0 +1,180 @@ +REMOVE NAMESPACE saleor_marketplace; +REMOVE DATABASE main; +DEFINE NAMESPACE saleor_marketplace; +DEFINE DATABASE main; +USE NS saleor_marketplace; +USE DB main; +DEFINE TABLE saleor_app TYPE ANY SCHEMALESS + PERMISSIONS + FOR select + WHERE true + FOR update, delete + WHERE id.id()[0] = $auth.id OR $auth.admin = true + FOR create + WHERE id.id()[0] = $auth.id OR $auth.admin = true //MAKE THIS QUERY FOR AMOUNT OF APPS USER HAS, LIMIT TO 20!! +; +DEFINE FIELD versions ON saleor_app TYPE array + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE versions[*] ON saleor_app TYPE string ASSERT string::is::semver($value) + PERMISSIONS FULL +; +DEFINE FIELD current_version ON saleor_app TYPE string ASSERT string::is::semver($value) + PERMISSIONS FULL +; +DEFINE FIELD last_updated ON saleor_app TYPE datetime VALUE time::now() ASSERT string::is::datetime($value) + PERMISSIONS FULL +; +DEFINE FIELD created ON saleor_app TYPE datetime VALUE time::now() ASSERT string::is::datetime($value) + PERMISSIONS FULL +; +DEFINE FIELD images ON saleor_app TYPE array + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE images[*] ON saleor_app TYPE string ASSERT string::is::url($value) + PERMISSIONS FULL +; +DEFINE FIELD manifest ON saleor_app TYPE { + about: option, + app_permissions: array<'MANAGE_USERS' | 'MANAGE_STAFF' | 'IMPERSONATE_USER' | 'MANAGE_OBSERVABILITY' | 'MANAGE_CHECKOUTS' | 'HANDLE_CHECKOUTS' | 'HANDLE_TAXES' | 'MANAGE_TAXES' | 'MANAGE_CHANNELS' | 'MANAGE_DISCOUNTS' | 'MANAGE_GIFT_CARD' | 'MANAGE_MENUS' | 'MANAGE_ORDERS' | 'MANAGE_ORDERS_IMPORT' | 'MANAGE_PAGES' | 'MANAGE_PAGE_TYPES_AND_ATTRIBUTES' | 'HANDLE_PAYMENTS' | 'MANAGE_PLUGINS' | 'MANAGE_PRODUCTS' | 'MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES' | 'MANAGE_SHIPPING' | 'MANAGE_SETTINGS' | 'MANAGE_TRANSLATIONS' | 'MANAGE_APPS'>, + app_url: string, + author: option, + brand: option<{ + logo: { + default: string + } + }>, + configuration_url: option, + data_privacy: option, + data_privacy_url: option, + extensions: option, + target: 'Popup' | 'AppPage', + url: string + }>>, + homepage_url: option, + id: string, + name: string, + required_saleor_version: option, + support_url: option, + token_target_url: string, + version: string, + webhooks: option>, + is_active: option, + name: string, + query: string, + sync_events: option>, + target_url: string + }>> +} + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.app_url ON saleor_app TYPE string ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.token_target_url ON saleor_app TYPE string ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.configuration_url ON saleor_app TYPE option ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.data_privacy_url ON saleor_app TYPE option ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.homepage_url ON saleor_app TYPE option ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.support_url ON saleor_app TYPE option ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.webhooks.target_url ON saleor_app TYPE string ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE manifest.extensions.url ON saleor_app TYPE string ASSERT $value.is_url() + PERMISSIONS FULL +; +DEFINE FIELD is_verified ON saleor_app TYPE bool + PERMISSIONS FULL +; +DEFINE FIELD supported_deployments ON saleor_app TYPE array<'Docker' | 'Podman' | 'Linux' | 'Windows' | 'MacOS' | 'WASM'> + PERMISSIONS FULL +; +DEFINE FIELD built_for_url ON saleor_app TYPE option + PERMISSIONS FULL +; +DEFINE FIELD minimal_docker_compose ON saleor_app TYPE string + PERMISSIONS FULL +; +DEFINE FIELD supported_apls ON saleor_app TYPE array<'File' | 'Redis' | 'Env' | 'Upstash'> + PERMISSIONS FULL +; +DEFINE FIELD categories ON saleor_app TYPE array<'CMS' | 'Messaging' | 'Taxes' | 'Payments' | 'CRM' | 'Monitoring' | 'Marketplaces' | 'Search' | 'SEO' | 'DashboardUtilities' | 'Other'> + PERMISSIONS FULL +; +DEFINE TABLE author TYPE ANY SCHEMALESS + PERMISSIONS + FOR select + WHERE true + FOR create, update, delete + WHERE id.id()[0] = $auth.id OR $auth.admin = true +; +DEFINE FIELD name ON author TYPE string + PERMISSIONS FULL +; +DEFINE FIELD socials ON author TYPE array + PERMISSIONS FULL +; +DEFINE FIELD OVERWRITE socials[*] ON author TYPE string ASSERT string::is::url($value) + PERMISSIONS FULL +; +DEFINE FIELD email ON author TYPE string ASSERT string::is::email($value) + PERMISSIONS FULL +; + +DELETE user:djkato; +DELETE saleor_app:[ + user:djkato, + 'stripe-payment-gateway' +]; +CREATE author:djkato SET name = 'Djkáťo', socials = [ + 'https://twitter.com/djkato_vfx' +], email = 'djkatovfx@gmail.com'; +CREATE saleor_app:[ + author:djkato, + 'stripe-payment-gateway' +] SET versions = [ + '1.0.0' +], slug = [ + author:djkato, + 'stripe-payment-gateway' +], current_version = '1.0.0', images = [ + 'https://imgur.com/g/img.jfif' +], is_verified = false, supported_deployments = [ + 'Docker' +], minimal_docker_compose = '', categories = [ + 'Payments' +], supported_apls = [ + 'Redis' +], manifest = { + about: 'cool stripe integration', + app_permissions: [ + 'MANAGE_USERS' + ], + app_url: 'https://app-payment-gateway.test.com', + author: 'Djkáťo ', + extensions: [], + id: 'stripe-payment-gateway', + name: 'Stripe Payment Gateway', + token_target_url: 'https://app-payment-gateway.test.com/api/register', + version: '1.0.0', + webhooks: [] +}; +SELECT manifest FROM saleor_app:[ + user:djkato, + NONE +]..[ + user:djkato +]; diff --git a/surrealdb/tests.surql b/surrealdb/tests.surql new file mode 100644 index 0000000..96eb455 --- /dev/null +++ b/surrealdb/tests.surql @@ -0,0 +1,30 @@ +DELETE user:djkato; +DELETE saleor_app:[user:djkato, "stripe-payment-gateway"]; + +CREATE author:djkato SET + name = "Djkáťo", + socials = ["https://twitter.com/djkato_vfx"], + email = "djkatovfx@gmail.com"; + +CREATE saleor_app:[author:djkato, "stripe-payment-gateway"] SET + versions = ["1.0.0"], + current_version = "1.0.0", + images = ["https://imgur.com/g/img.jfif"], + is_verified = false, + supported_deployments = ["Docker"], + minimal_docker_compose = "", + categories = ["Payments"], + created= d"2024-09-14T20:58:53.766Z", + last_updated = d"2024-09-14T20:58:53.766Z", + manifest = { + about: "cool stripe integration", + app_permissions: ["MANAGE_USERS"], + app_url: "https://app-payment-gateway.test.com", + author: "Djkáťo ", + token_target_url: "https://app-payment-gateway.test.com/api/register", + id: "stripe-payment-gateway", + name: "Stripe Payment Gateway", + version: "1.0", + }; + +SELECT manifest FROM saleor_app:[user:djkato, NONE]..[user:djkato];