#TODO: # - precomputed view for landing page https://surrealdb.com/docs/surrealql/statements/define/table#pre-computed-table-views # - Oauth for github # - passwords and sign in # - system user for frontend with EDITOR role scoped to only this db https://surrealdb.com/docs/surrealql/statements/define/user#roles # - search function https://surrealdb.com/learn/fundamentals/performance/index-data-model#full-text-search-indexes REMOVE NAMESPACE saleor_marketplace; REMOVE DATABASE main; DEFINE NAMESPACE saleor_marketplace; DEFINE DATABASE main; USE NS saleor_marketplace; USE DB main; DEFINE TABLE dashboard TYPE ANY SCHEMALESS PERMISSIONS FOR select WHERE true FOR create, update, delete WHERE id.id()[0] = $auth.id OR $auth.admin = true ; DEFINE FIELD versions ON dashboard TYPE array PERMISSIONS FULL ; DEFINE FIELD OVERWRITE versions[*] ON dashboard TYPE string ASSERT string::is::semver($value) PERMISSIONS FULL ; DEFINE FIELD current_version ON dashboard TYPE string ASSERT string::is::semver($value) PERMISSIONS FULL ; DEFINE FIELD updated_at ON dashboard TYPE datetime VALUE time::now() ASSERT string::is::datetime($value) PERMISSIONS FULL ; DEFINE FIELD created_at ON dashboard TYPE datetime DEFAULT time::now() ASSERT string::is::datetime($value) PERMISSIONS FULL ; DEFINE FIELD images ON dashboard TYPE array PERMISSIONS FULL ; DEFINE FIELD OVERWRITE images[*] ON dashboard TYPE string ASSERT string::is::url($value) PERMISSIONS FULL ; DEFINE FIELD is_verified ON dashboard TYPE bool PERMISSIONS FULL ; DEFINE FIELD supported_deployments ON dashboard TYPE array<'Docker' | 'Podman' | 'Linux' | 'Windows' | 'MacOS' | 'WASM'> PERMISSIONS FULL ; DEFINE FIELD built_for_url ON dashboard TYPE option PERMISSIONS FULL ; DEFINE FIELD minimal_docker_compose ON dashboard TYPE option PERMISSIONS FULL ; DEFINE TABLE storefront TYPE ANY SCHEMALESS PERMISSIONS FOR select WHERE true FOR create, update, delete WHERE id.id()[0] = $auth.id OR $auth.admin = true ; DEFINE FIELD versions ON storefront TYPE array PERMISSIONS FULL ; DEFINE FIELD OVERWRITE versions[*] ON storefront TYPE string ASSERT string::is::semver($value) PERMISSIONS FULL ; DEFINE FIELD current_version ON storefront TYPE string ASSERT string::is::semver($value) PERMISSIONS FULL ; DEFINE FIELD updated_at ON storefront TYPE datetime VALUE time::now() ASSERT string::is::datetime($value) PERMISSIONS FULL ; DEFINE FIELD created_at ON storefront TYPE datetime DEFAULT time::now() ASSERT string::is::datetime($value) PERMISSIONS FULL ; DEFINE FIELD images ON storefront TYPE array PERMISSIONS FULL ; DEFINE FIELD OVERWRITE images[*] ON storefront TYPE string ASSERT string::is::url($value) PERMISSIONS FULL ; DEFINE FIELD is_verified ON storefront TYPE bool PERMISSIONS FULL ; DEFINE FIELD supported_deployments ON storefront TYPE array<'Docker' | 'Podman' | 'Linux' | 'Windows' | 'MacOS' | 'WASM'> PERMISSIONS FULL ; DEFINE FIELD built_for_url ON storefront TYPE option PERMISSIONS FULL ; DEFINE FIELD minimal_docker_compose ON storefront TYPE option PERMISSIONS FULL ; DEFINE TABLE app TYPE ANY SCHEMALESS PERMISSIONS FOR select WHERE true FOR create, update, delete WHERE id.id()[0] = $auth.id OR $auth.admin = true ; DEFINE FIELD versions ON app TYPE array PERMISSIONS FULL ; DEFINE FIELD OVERWRITE versions[*] ON app TYPE string ASSERT string::is::semver($value) PERMISSIONS FULL ; DEFINE FIELD current_version ON app TYPE string ASSERT string::is::semver($value) PERMISSIONS FULL ; DEFINE FIELD updated_at ON app TYPE datetime VALUE time::now() ASSERT string::is::datetime($value) PERMISSIONS FULL ; DEFINE FIELD created_at ON app TYPE datetime DEFAULT time::now() ASSERT string::is::datetime($value) PERMISSIONS FULL ; DEFINE FIELD images ON app TYPE array PERMISSIONS FULL ; DEFINE FIELD OVERWRITE images[*] ON app TYPE string ASSERT string::is::url($value) PERMISSIONS FULL ; DEFINE FIELD manifest ON 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 app TYPE string ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.token_target_url ON app TYPE string ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.configuration_url ON app TYPE option ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.data_privacy_url ON app TYPE option ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.homepage_url ON app TYPE option ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.support_url ON app TYPE option ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.webhooks.target_url ON app TYPE string ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD OVERWRITE manifest.extensions.url ON app TYPE string ASSERT $value.is_url() PERMISSIONS FULL ; DEFINE FIELD is_verified ON app TYPE bool PERMISSIONS FULL ; DEFINE FIELD supported_deployments ON app TYPE array<'Docker' | 'Podman' | 'Linux' | 'Windows' | 'MacOS' | 'WASM'> PERMISSIONS FULL ; DEFINE FIELD built_for_url ON app TYPE option PERMISSIONS FULL ; DEFINE FIELD minimal_docker_compose ON app TYPE string PERMISSIONS FULL ; DEFINE FIELD supported_apls ON app TYPE array<'File' | 'Redis' | 'Env' | 'Upstash'> PERMISSIONS FULL ; DEFINE FIELD categories ON 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 ; DEFINE INDEX email ON author FIELDS email UNIQUE; DEFINE ACCESS author ON DATABASE TYPE RECORD SIGNUP ( CREATE author CONTENT { name: $name, email: $email, socials: $socials, password: crypto::argon2::generate($password), } ) SIGNIN ( SELECT * FROM user WHERE email = $email AND crypto::argon2::compare(password, $password) ) AUTHENTICATE { RETURN $auth; } DURATION FOR SESSION 12h, FOR TOKEN 5s ; DELETE author:djkato; DELETE app:[ author:djkato, 'stripe-payment-gateway' ]; CREATE author:djkato SET name = 'Djkáťo', socials = [ 'https://twitter.com/djkato_vfx' ], email = 'djkatovfx@gmail.com'; CREATE 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 app:[ author:djkato, NONE ]..[ author:djkato ];