#!/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 -p < $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"