#!/usr/bin/env bash set -euo pipefail # Appwrite schema bootstrap (4 tables) for Appwrite Server 1.8.1 # Tables: users, accounts, products, product_details # # Notes: # - Appwrite CLI is compatible with Appwrite Server 1.8.x. (see sdk-for-cli README) :contentReference[oaicite:0]{index=0} # - The CLI supports "tables" (create-table, create-*-column, create-index). :contentReference[oaicite:1]{index=1} # # Prereqs: # appwrite login # appwrite init project # # Run: # chmod +x appwrite_schema_v1_8_1.sh # ./appwrite_schema_v1_8_1.sh # ---------------- CONFIG ---------------- DATABASE_ID="YOUR_DATABASE_ID" T_USERS="users" T_ACCOUNTS="accounts" T_PRODUCTS="products" T_PRODUCT_DETAILS="product_details" # Permissions: keep minimal for now. Adjust later. # Example roles: any, users, user:, team: PERMS_ANY_CRUD='["create(\\"any\\")","read(\\"any\\")","update(\\"any\\")","delete(\\"any\\")"]' # If you want more locked down defaults later, tell me your exact access model. # ---------------- HELPERS ---------------- try_cmd() { # Run command, do not fail script if it errors (idempotent-ish). # Print what we tried for easy debugging. echo "+ $*" set +e "$@" local rc=$? set -e if [ $rc -ne 0 ]; then echo " (ignored error, rc=$rc)" fi return 0 } # ---------------- CREATE TABLES ---------------- # Tip: If any of these fail because option names differ in your CLI build, # run: appwrite databases create-table --help # and replace flags accordingly. try_cmd appwrite databases create-table \ --database-id "$DATABASE_ID" \ --table-id "$T_USERS" \ --name "users" \ --permissions "$PERMS_ANY_CRUD" \ --row-security false try_cmd appwrite databases create-table \ --database-id "$DATABASE_ID" \ --table-id "$T_ACCOUNTS" \ --name "accounts" \ --permissions "$PERMS_ANY_CRUD" \ --row-security false try_cmd appwrite databases create-table \ --database-id "$DATABASE_ID" \ --table-id "$T_PRODUCTS" \ --name "products" \ --permissions "$PERMS_ANY_CRUD" \ --row-security false try_cmd appwrite databases create-table \ --database-id "$DATABASE_ID" \ --table-id "$T_PRODUCT_DETAILS" \ --name "product_details" \ --permissions "$PERMS_ANY_CRUD" \ --row-security false # ---------------- USERS COLUMNS ---------------- # You originally wanted basically no fields here. Some people keep this table empty # (using only system fields), but depending on tooling, an empty table can be annoying. # Keep one optional column for future user settings/notes. try_cmd appwrite databases create-string-column \ --database-id "$DATABASE_ID" \ --table-id "$T_USERS" \ --key "user_note" \ --size 255 \ --required false \ --array false # ---------------- ACCOUNTS COLUMNS ---------------- try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_owner_user_id" --size 64 --required false --array false try_cmd appwrite databases create-boolean-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_managed" --required true --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_platform" --elements '["amazon","ebay"]' --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_platform_account_id" --size 255 --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_platform_market" --size 32 --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_shop_name" --size 255 --required false --array false try_cmd appwrite databases create-url-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_url" --required false --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_ACCOUNTS" --key "account_status" --elements '["active","unknown","disabled"]' --required false --array false # ---------------- ACCOUNTS INDEXES ---------------- try_cmd appwrite databases create-index \ --database-id "$DATABASE_ID" \ --table-id "$T_ACCOUNTS" \ --key "accounts_unique_platform_market_accountid" \ --type "unique" \ --columns '["account_platform","account_platform_market","account_platform_account_id"]' try_cmd appwrite databases create-index \ --database-id "$DATABASE_ID" \ --table-id "$T_ACCOUNTS" \ --key "accounts_by_owner_user" \ --type "key" \ --columns '["account_owner_user_id"]' # ---------------- PRODUCTS COLUMNS ---------------- try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_account_id" --size 64 --required true --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_platform" --elements '["amazon","ebay"]' --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_platform_market" --size 32 --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_platform_product_id" --size 255 --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_title" --size 1024 --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_category" --size 255 --required false --array false try_cmd appwrite databases create-float-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_price" --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_currency" --size 8 --required true --array false try_cmd appwrite databases create-integer-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_quantity" --required false --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_condition" --elements '["new","used_like_new","used_good","used_ok","parts"]' --required false --array false try_cmd appwrite databases create-url-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_url" --required false --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCTS" --key "product_status" --elements '["active","ended","unknown"]' --required false --array false # ---------------- PRODUCTS INDEXES ---------------- try_cmd appwrite databases create-index \ --database-id "$DATABASE_ID" \ --table-id "$T_PRODUCTS" \ --key "products_by_account" \ --type "key" \ --columns '["product_account_id"]' try_cmd appwrite databases create-index \ --database-id "$DATABASE_ID" \ --table-id "$T_PRODUCTS" \ --key "products_unique_account_platformproductid" \ --type "unique" \ --columns '["product_account_id","product_platform_product_id"]' # ---------------- PRODUCT_DETAILS COLUMNS ---------------- # 1:1 to products try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_product_id" --size 64 --required true --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_platform" --elements '["amazon","ebay"]' --required true --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_platform_market" --size 32 --required false --array false # Identifiers try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_gtin" --size 32 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_ean" --size 32 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_upc" --size 32 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_isbn" --size 32 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_mpn" --size 64 --required false --array false # Platform IDs try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_amazon_asin" --size 32 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_ebay_epid" --size 64 --required false --array false # Brand / model try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_brand" --size 255 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_manufacturer" --size 255 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_model_name" --size 255 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_model_number" --size 255 --required false --array false # Content try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_short_description" --size 2048 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_long_description" --size 8192 --required false --array false # Bullet points (no arrays, no JSON) try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_1" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_2" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_3" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_4" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_5" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_6" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_7" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_bullet_8" --size 512 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_search_terms" --size 1024 --required false --array false # Variants / item specifics (common) try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_color" --size 128 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_size" --size 128 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_material" --size 128 --required false --array false try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_pattern" --size 128 --required false --array false # Shipping measurements try_cmd appwrite databases create-float-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_length" --required false --array false try_cmd appwrite databases create-float-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_width" --required false --array false try_cmd appwrite databases create-float-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_height" --required false --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_dimension_unit" --elements '["mm","cm","m","in"]' --required false --array false try_cmd appwrite databases create-float-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_weight" --required false --array false try_cmd appwrite databases create-enum-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_weight_unit" --elements '["g","kg","oz","lb"]' --required false --array false # Misc try_cmd appwrite databases create-string-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_country_of_origin" --size 64 --required false --array false try_cmd appwrite databases create-integer-column --database-id "$DATABASE_ID" --table-id "$T_PRODUCT_DETAILS" --key "product_detail_package_quantity" --required false --array false # ---------------- PRODUCT_DETAILS INDEXES ---------------- # One details row per product try_cmd appwrite databases create-index \ --database-id "$DATABASE_ID" \ --table-id "$T_PRODUCT_DETAILS" \ --key "product_details_unique_product_id" \ --type "unique" \ --columns '["product_detail_product_id"]' try_cmd appwrite databases create-index \ --database-id "$DATABASE_ID" \ --table-id "$T_PRODUCT_DETAILS" \ --key "product_details_by_platform" \ --type "key" \ --columns '["product_detail_platform"]' echo "Done. 4 tables ensured: users, accounts, products, product_details"