Files
eship/db.txt
2026-01-17 17:07:46 +01:00

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"