114 lines
4.0 KiB
Bash
114 lines
4.0 KiB
Bash
#!/bin/bash
|
|
# ============================================================================
|
|
# EF Core Scaffolding Script for StellaOps Modules
|
|
# ============================================================================
|
|
# Usage: ./scaffold-module.sh <Module> [Schema] [ConnectionString]
|
|
#
|
|
# Examples:
|
|
# ./scaffold-module.sh Unknowns
|
|
# ./scaffold-module.sh Unknowns unknowns
|
|
# ./scaffold-module.sh PacksRegistry packs "Host=localhost;..."
|
|
# ============================================================================
|
|
|
|
set -e
|
|
|
|
MODULE=$1
|
|
SCHEMA=${2:-$(echo "$MODULE" | tr '[:upper:]' '[:lower:]')}
|
|
CONNECTION_STRING=$3
|
|
|
|
if [ -z "$MODULE" ]; then
|
|
echo "Usage: $0 <Module> [Schema] [ConnectionString]"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 Unknowns"
|
|
echo " $0 Unknowns unknowns"
|
|
echo " $0 PacksRegistry packs \"Host=localhost;Database=stellaops_platform;Username=packs_user;Password=packs_dev\""
|
|
exit 1
|
|
fi
|
|
|
|
# Resolve repository root
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
|
|
# Default connection string
|
|
if [ -z "$CONNECTION_STRING" ]; then
|
|
USER="${SCHEMA}_user"
|
|
PASSWORD="${SCHEMA}_dev"
|
|
CONNECTION_STRING="Host=localhost;Port=5432;Database=stellaops_platform;Username=$USER;Password=$PASSWORD;SearchPath=$SCHEMA"
|
|
fi
|
|
|
|
PROJECT_DIR="$REPO_ROOT/src/$MODULE/__Libraries/StellaOps.$MODULE.Persistence.EfCore"
|
|
CONTEXT_DIR="Context"
|
|
ENTITIES_DIR="Entities"
|
|
COMPILED_DIR="CompiledModels"
|
|
|
|
echo ""
|
|
echo "============================================================================"
|
|
echo " EF Core Scaffolding for Module: $MODULE"
|
|
echo "============================================================================"
|
|
echo " Schema: $SCHEMA"
|
|
echo " Project: $PROJECT_DIR"
|
|
echo " Connection: Host=localhost;Database=stellaops_platform;Username=${SCHEMA}_user;..."
|
|
echo ""
|
|
|
|
# Verify project exists
|
|
if [ ! -f "$PROJECT_DIR"/*.csproj ]; then
|
|
echo "ERROR: Project not found at: $PROJECT_DIR"
|
|
echo "Create the project first with: dotnet new classlib -n StellaOps.$MODULE.Persistence.EfCore"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 1: Clean existing generated files
|
|
echo "[1/4] Cleaning existing generated files..."
|
|
rm -rf "$PROJECT_DIR/$ENTITIES_DIR"
|
|
rm -rf "$PROJECT_DIR/$COMPILED_DIR"
|
|
rm -f "$PROJECT_DIR/$CONTEXT_DIR/${MODULE}DbContext.cs"
|
|
|
|
mkdir -p "$PROJECT_DIR/$ENTITIES_DIR"
|
|
mkdir -p "$PROJECT_DIR/$COMPILED_DIR"
|
|
mkdir -p "$PROJECT_DIR/$CONTEXT_DIR"
|
|
|
|
echo " Cleaned: $ENTITIES_DIR, $COMPILED_DIR, ${MODULE}DbContext.cs"
|
|
|
|
# Step 2: Scaffold DbContext and entities
|
|
echo "[2/4] Scaffolding DbContext and entities from schema '$SCHEMA'..."
|
|
dotnet ef dbcontext scaffold \
|
|
"$CONNECTION_STRING" \
|
|
Npgsql.EntityFrameworkCore.PostgreSQL \
|
|
--project "$PROJECT_DIR" \
|
|
--schema "$SCHEMA" \
|
|
--context "${MODULE}DbContext" \
|
|
--context-dir "$CONTEXT_DIR" \
|
|
--output-dir "$ENTITIES_DIR" \
|
|
--namespace "StellaOps.$MODULE.Persistence.EfCore.Entities" \
|
|
--context-namespace "StellaOps.$MODULE.Persistence.EfCore.Context" \
|
|
--data-annotations \
|
|
--no-onconfiguring \
|
|
--force
|
|
|
|
echo " Scaffolded entities to: $ENTITIES_DIR"
|
|
|
|
# Step 3: Generate compiled models
|
|
echo "[3/4] Generating compiled models..."
|
|
dotnet ef dbcontext optimize \
|
|
--project "$PROJECT_DIR" \
|
|
--context "StellaOps.$MODULE.Persistence.EfCore.Context.${MODULE}DbContext" \
|
|
--output-dir "$COMPILED_DIR" \
|
|
--namespace "StellaOps.$MODULE.Persistence.EfCore.CompiledModels"
|
|
|
|
echo " Generated compiled models to: $COMPILED_DIR"
|
|
|
|
# Step 4: Summary
|
|
echo "[4/4] Scaffolding complete!"
|
|
echo ""
|
|
echo "Generated files:"
|
|
echo " Context: $PROJECT_DIR/$CONTEXT_DIR/${MODULE}DbContext.cs"
|
|
echo " Entities: $(ls -1 "$PROJECT_DIR/$ENTITIES_DIR"/*.cs 2>/dev/null | wc -l) files"
|
|
echo " Compiled Models: $(ls -1 "$PROJECT_DIR/$COMPILED_DIR"/*.cs 2>/dev/null | wc -l) files"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Review generated entities for any customization needs"
|
|
echo " 2. Create repository implementations in Repositories/"
|
|
echo " 3. Add DI registration in Extensions/"
|
|
echo ""
|