119 lines
3.5 KiB
Bash

#!/bin/bash
# Product Management Module Build Script
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
MODULE_NAME="product_management"
# Find Sage root directory
SAGE_ROOT=""
for candidate in "$SCRIPT_DIR/../.." "$HOME/repos/sage" "$HOME/sage"; do
if [ -d "$candidate/wwwroot" ] && [ -d "$candidate/py3" ]; then
SAGE_ROOT="$(cd "$candidate" && pwd)"
break
fi
done
if [ -z "$SAGE_ROOT" ]; then
echo "ERROR: Cannot find Sage root directory"
exit 1
fi
SAGE_PYTHON="$SAGE_ROOT/py3/bin/python"
SAGE_WWWROOT="$SAGE_ROOT/wwwroot"
MODULE_DIR="$SCRIPT_DIR"
echo "=== Building $MODULE_NAME ==="
echo "Sage root: $SAGE_ROOT"
echo "Module dir: $MODULE_DIR"
# Step 1: Install the module
echo "--- Installing module ---"
cd "$MODULE_DIR"
$SAGE_PYTHON -m pip install -e . --quiet
# Step 2: Generate DDL from models
if [ -d "$MODULE_DIR/models" ]; then
echo "--- Generating DDL ---"
cd "$MODULE_DIR/models"
# Check for xlsx files
xlsx_files=$(find . -name "*.xlsx" 2>/dev/null)
if [ -n "$xlsx_files" ]; then
echo "Found xlsx files, running xls2ddl..."
$SAGE_ROOT/py3/bin/xls2ddl mysql . > "$MODULE_DIR/mysql.ddl.sql" 2>/dev/null || true
fi
# Check for json files
json_files=$(find . -name "*.json" -not -path "./.git/*" 2>/dev/null)
if [ -n "$json_files" ]; then
echo "Found json model files, running json2ddl..."
$SAGE_ROOT/py3/bin/json2ddl mysql . > "$MODULE_DIR/mysql.ddl.sql" 2>/dev/null || true
fi
if [ -f "$MODULE_DIR/mysql.ddl.sql" ]; then
echo "DDL generated at $MODULE_DIR/mysql.ddl.sql"
echo "Execute this SQL to create/update tables:"
echo " $SAGE_ROOT/py3/bin/mysql -u <user> -p <database> < $MODULE_DIR/mysql.ddl.sql"
fi
fi
# Step 3: Generate UI from CRUD JSON
if [ -d "$MODULE_DIR/json" ] && [ -d "$MODULE_DIR/models" ]; then
echo "--- Generating CRUD UI ---"
cd "$MODULE_DIR/json"
json_files=$(find . -name "*.json" -not -path "./.git/*" 2>/dev/null)
if [ -n "$json_files" ]; then
$SAGE_ROOT/py3/bin/xls2ui -m ../models -o ../wwwroot "$MODULE_NAME" *.json 2>/dev/null || true
echo "CRUD UI files generated in wwwroot/"
fi
fi
# Step 4: Create wwwroot symlinks
echo "--- Creating wwwroot symlinks ---"
MODULE_WWWROOT="$SAGE_WWWROOT/$MODULE_NAME"
mkdir -p "$MODULE_WWWROOT"
mkdir -p "$MODULE_WWWROOT/api"
# Link .ui files
for f in "$MODULE_DIR/wwwroot"/*.ui; do
[ -f "$f" ] || continue
fname=$(basename "$f")
ln -sf "$f" "$MODULE_WWWROOT/$fname"
echo " Linked: $fname"
done
# Link .dspy API files
for f in "$MODULE_DIR/wwwroot/api"/*.dspy; do
[ -f "$f" ] || continue
fname=$(basename "$f")
ln -sf "$f" "$MODULE_WWWROOT/api/$fname"
echo " Linked API: api/$fname"
done
# Link .js files at root level (not in scripts/)
for f in "$MODULE_DIR/wwwroot"/*.js; do
[ -f "$f" ] || continue
fname=$(basename "$f")
ln -sf "$f" "$MODULE_WWWROOT/$fname"
echo " Linked JS: $fname"
done
# Link .css files at root level (not in styles/)
for f in "$MODULE_DIR/wwwroot"/*.css; do
[ -f "$f" ] || continue
fname=$(basename "$f")
ln -sf "$f" "$MODULE_WWWROOT/$fname"
echo " Linked CSS: $fname"
done
echo ""
echo "=== Build complete ==="
echo ""
echo "Next steps:"
echo "1. Execute DDL: $MODULE_DIR/mysql.ddl.sql"
echo "2. Add to app/sage.py: from product_management.init import load_product_management"
echo "3. Add to app/sage.py init(): load_product_management()"
echo "4. Add to load_path.py: /product_management logined"
echo "5. Restart Sage: ./stop.sh && ./start.sh"