133 lines
3.9 KiB
Bash
Executable File
133 lines
3.9 KiB
Bash
Executable File
#!/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
|
|
|
|
# Link generated CRUD directories
|
|
for d in "$MODULE_DIR/wwwroot"/*/; do
|
|
[ -d "$d" ] || continue
|
|
dname=$(basename "$d")
|
|
# Skip api/, styles/, scripts/ - handled separately
|
|
case "$dname" in
|
|
api|styles|scripts) continue ;;
|
|
esac
|
|
if [ ! -e "$MODULE_WWWROOT/$dname" ]; then
|
|
ln -sf "$d" "$MODULE_WWWROOT/$dname"
|
|
echo " Linked CRUD dir: $dname/"
|
|
fi
|
|
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"
|