240 lines
12 KiB
Text
240 lines
12 KiB
Text
#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
|
|
# [-] root user
|
|
|
|
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<string>
|
|
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<string>
|
|
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<string>
|
|
PERMISSIONS FULL
|
|
;
|
|
DEFINE FIELD minimal_docker_compose ON dashboard TYPE option<string>
|
|
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<string>
|
|
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<string>
|
|
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<string>
|
|
PERMISSIONS FULL
|
|
;
|
|
DEFINE FIELD minimal_docker_compose ON storefront TYPE option<string>
|
|
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<string>
|
|
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<string>
|
|
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<string>,
|
|
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<string>,
|
|
brand: option<{
|
|
logo: {
|
|
default: string
|
|
}
|
|
}>,
|
|
configuration_url: option<string>,
|
|
data_privacy: option<string>,
|
|
data_privacy_url: option<string>,
|
|
extensions: option<array<{
|
|
label: string,
|
|
mount: 'PRODUCT_DETAILS_MORE_ACTIONS' | 'PRODUCT_OVERVIEW_CREATE' | 'PRODUCT_OVERVIEW_MORE_ACTIONS' | 'NAVIGATION_CATALOG' | 'NAVIGATION_ORDERS' | 'NAVIGATION_CUSTOMERS' | 'NAVIGATION_DISCOUNTS' | 'NAVIGATION_TRANSLATIONS' | 'NAVIGATION_PAGES' | 'ORDER_DETAILS_MORE_ACTIONS' | 'ORDER_OVERVIEW_CREATE' | 'ORDER_OVERVIEW_MORE_ACTIONS',
|
|
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'>,
|
|
target: 'Popup' | 'AppPage',
|
|
url: string
|
|
}>>,
|
|
homepage_url: option<string>,
|
|
id: string,
|
|
name: string,
|
|
required_saleor_version: option<string>,
|
|
support_url: option<string>,
|
|
token_target_url: string,
|
|
version: string,
|
|
webhooks: option<array<{
|
|
async_events: option<array<'ANY_EVENTS' | 'ACCOUNT_CONFIRMATION_REQUESTED' | 'ACCOUNT_CHANGE_EMAIL_REQUESTED' | 'ACCOUNT_EMAIL_CHANGED' | 'ACCOUNT_SET_PASSWORD_REQUESTED' | 'ACCOUNT_CONFIRMED' | 'ACCOUNT_DELETE_REQUESTED' | 'ACCOUNT_DELETED' | 'ADDRESS_CREATED' | 'ADDRESS_UPDATED' | 'ADDRESS_DELETED' | 'APP_INSTALLED' | 'APP_UPDATED' | 'APP_DELETED' | 'APP_STATUS_CHANGED' | 'ATTRIBUTE_CREATED' | 'ATTRIBUTE_UPDATED' | 'ATTRIBUTE_DELETED' | 'ATTRIBUTE_VALUE_CREATED' | 'ATTRIBUTE_VALUE_UPDATED' | 'ATTRIBUTE_VALUE_DELETED' | 'CATEGORY_CREATED' | 'CATEGORY_UPDATED' | 'CATEGORY_DELETED' | 'CHANNEL_CREATED' | 'CHANNEL_UPDATED' | 'CHANNEL_DELETED' | 'CHANNEL_STATUS_CHANGED' | 'CHANNEL_METADATA_UPDATED' | 'GIFT_CARD_CREATED' | 'GIFT_CARD_UPDATED' | 'GIFT_CARD_DELETED' | 'GIFT_CARD_SENT' | 'GIFT_CARD_STATUS_CHANGED' | 'GIFT_CARD_METADATA_UPDATED' | 'GIFT_CARD_EXPORT_COMPLETED' | 'MENU_CREATED' | 'MENU_UPDATED' | 'MENU_DELETED' | 'MENU_ITEM_CREATED' | 'MENU_ITEM_UPDATED' | 'MENU_ITEM_DELETED' | 'ORDER_CREATED' | 'ORDER_CONFIRMED' | 'ORDER_PAID' | 'ORDER_FULLY_PAID' | 'ORDER_REFUNDED' | 'ORDER_FULLY_REFUNDED' | 'ORDER_UPDATED' | 'ORDER_CANCELLED' | 'ORDER_EXPIRED' | 'ORDER_FULFILLED' | 'ORDER_METADATA_UPDATED' | 'ORDER_BULK_CREATED' | 'FULFILLMENT_CREATED' | 'FULFILLMENT_CANCELED' | 'FULFILLMENT_APPROVED' | 'FULFILLMENT_METADATA_UPDATED' | 'FULFILLMENT_TRACKING_NUMBER_UPDATED' | 'DRAFT_ORDER_CREATED' | 'DRAFT_ORDER_UPDATED' | 'DRAFT_ORDER_DELETED' | 'SALE_CREATED' | 'SALE_UPDATED' | 'SALE_DELETED' | 'SALE_TOGGLE' | 'PROMOTION_CREATED' | 'PROMOTION_UPDATED' | 'PROMOTION_DELETED' | 'PROMOTION_STARTED' | 'PROMOTION_ENDED' | 'PROMOTION_RULE_CREATED' | 'PROMOTION_RULE_UPDATED' | 'PROMOTION_RULE_DELETED' | 'INVOICE_REQUESTED' | 'INVOICE_DELETED' | 'INVOICE_SENT' | 'CUSTOMER_CREATED' | 'CUSTOMER_UPDATED' | 'CUSTOMER_DELETED' | 'CUSTOMER_METADATA_UPDATED' | 'COLLECTION_CREATED' | 'COLLECTION_UPDATED' | 'COLLECTION_DELETED' | 'COLLECTION_METADATA_UPDATED' | 'PRODUCT_CREATED' | 'PRODUCT_UPDATED' | 'PRODUCT_DELETED' | 'PRODUCT_METADATA_UPDATED' | 'PRODUCT_EXPORT_COMPLETED' | 'PRODUCT_MEDIA_CREATED' | 'PRODUCT_MEDIA_UPDATED' | 'PRODUCT_MEDIA_DELETED' | 'PRODUCT_VARIANT_CREATED' | 'PRODUCT_VARIANT_UPDATED' | 'PRODUCT_VARIANT_DELETED' | 'PRODUCT_VARIANT_METADATA_UPDATED' | 'PRODUCT_VARIANT_OUT_OF_STOCK' | 'PRODUCT_VARIANT_BACK_IN_STOCK' | 'PRODUCT_VARIANT_STOCK_UPDATED' | 'CHECKOUT_CREATED' | 'CHECKOUT_UPDATED' | 'CHECKOUT_FULLY_PAID' | 'CHECKOUT_METADATA_UPDATED' | 'NOTIFY_USER' | 'PAGE_CREATED' | 'PAGE_UPDATED' | 'PAGE_DELETED' | 'PAGE_TYPE_CREATED' | 'PAGE_TYPE_UPDATED' | 'PAGE_TYPE_DELETED' | 'PERMISSION_GROUP_CREATED' | 'PERMISSION_GROUP_UPDATED' | 'PERMISSION_GROUP_DELETED' | 'SHIPPING_PRICE_CREATED' | 'SHIPPING_PRICE_UPDATED' | 'SHIPPING_PRICE_DELETED' | 'SHIPPING_ZONE_CREATED' | 'SHIPPING_ZONE_UPDATED' | 'SHIPPING_ZONE_DELETED' | 'SHIPPING_ZONE_METADATA_UPDATED' | 'STAFF_CREATED' | 'STAFF_UPDATED' | 'STAFF_DELETED' | 'STAFF_SET_PASSWORD_REQUESTED' | 'TRANSACTION_ITEM_METADATA_UPDATED' | 'TRANSLATION_CREATED' | 'TRANSLATION_UPDATED' | 'WAREHOUSE_CREATED' | 'WAREHOUSE_UPDATED' | 'WAREHOUSE_DELETED' | 'WAREHOUSE_METADATA_UPDATED' | 'VOUCHER_CREATED' | 'VOUCHER_UPDATED' | 'VOUCHER_DELETED' | 'VOUCHER_METADATA_UPDATED' | 'VOUCHER_CODE_EXPORT_COMPLETED' | 'OBSERVABILITY' | 'THUMBNAIL_CREATED' | 'SHOP_METADATA_UPDATED'>>,
|
|
is_active: option<bool>,
|
|
name: string,
|
|
query: string,
|
|
sync_events: option<array<'PAYMENT_LIST_GATEWAYS' | 'PAYMENT_AUTHORIZE' | 'PAYMENT_CAPTURE' | 'PAYMENT_REFUND' | 'PAYMENT_VOID' | 'PAYMENT_CONFIRM' | 'PAYMENT_PROCESS' | 'CHECKOUT_CALCULATE_TAXES' | 'ORDER_CALCULATE_TAXES' | 'TRANSACTION_CHARGE_REQUESTED' | 'TRANSACTION_REFUND_REQUESTED' | 'TRANSACTION_CANCELATION_REQUESTED' | 'SHIPPING_LIST_METHODS_FOR_CHECKOUT' | 'CHECKOUT_FILTER_SHIPPING_METHODS' | 'ORDER_FILTER_SHIPPING_METHODS' | 'PAYMENT_GATEWAY_INITIALIZE_SESSION' | 'TRANSACTION_INITIALIZE_SESSION' | 'TRANSACTION_PROCESS_SESSION' | 'LIST_STORED_PAYMENT_METHODS' | 'STORED_PAYMENT_METHOD_DELETE_REQUESTED' | 'PAYMENT_GATEWAY_INITIALIZE_TOKENIZATION_SESSION' | 'PAYMENT_METHOD_INITIALIZE_TOKENIZATION_SESSION' | 'PAYMENT_METHOD_PROCESS_TOKENIZATION_SESSION'>>,
|
|
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<string> ASSERT $value.is_url()
|
|
PERMISSIONS FULL
|
|
;
|
|
DEFINE FIELD OVERWRITE manifest.data_privacy_url ON app TYPE option<string> ASSERT $value.is_url()
|
|
PERMISSIONS FULL
|
|
;
|
|
DEFINE FIELD OVERWRITE manifest.homepage_url ON app TYPE option<string> ASSERT $value.is_url()
|
|
PERMISSIONS FULL
|
|
;
|
|
DEFINE FIELD OVERWRITE manifest.support_url ON app TYPE option<string> 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<string>
|
|
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<string>
|
|
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
|
|
;
|