231 lines
15 KiB
Bash
231 lines
15 KiB
Bash
#!/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:<id>, team:<id>
|
|
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"
|