diff --git a/update_from_git.sh b/update_from_git.sh index a3bc4ca..d01caa1 100755 --- a/update_from_git.sh +++ b/update_from_git.sh @@ -108,39 +108,57 @@ fi if [ "$UPDATE_DB" = true ]; then echo -e "\n${BLUE}🗄️ Sincronizzazione schema database...${NC}" - SCHEMA_FILE="$IDS_DIR/database-schema/schema.sql" + SCHEMA_DIR="$IDS_DIR/database-schema" - if [ -f "$SCHEMA_FILE" ]; then - # Carica configurazione database - if [ -f "$IDS_DIR/.env" ]; then - source "$IDS_DIR/.env" - - echo -e "${YELLOW}⚠️ Applicazione schema da git al database${NC}" - echo -e "${YELLOW} Database: ${PGDATABASE}${NC}" - read -p "Confermi? (y/n) " -n 1 -r - echo - - if [[ $REPLY =~ ^[Yy]$ ]]; then - # Applica schema - export PGPASSWORD="$PGPASSWORD" - psql -h "${PGHOST:-127.0.0.1}" -p "${PGPORT:-5432}" -U "${PGUSER}" -d "${PGDATABASE}" < "$SCHEMA_FILE" + # Carica configurazione database + if [ ! -f "$IDS_DIR/.env" ]; then + echo -e "${RED}❌ File .env non trovato${NC}" + exit 1 + fi + + source "$IDS_DIR/.env" + export PGPASSWORD="$PGPASSWORD" + + # Trova tutti gli script SQL (escludi schema.sql che è solo snapshot) + SQL_SCRIPTS=$(find "$SCHEMA_DIR" -maxdepth 1 -name "*.sql" ! -name "schema.sql" -type f | sort) + + if [ -z "$SQL_SCRIPTS" ]; then + echo -e "${YELLOW}⚠️ Nessuno script SQL trovato in database-schema/${NC}" + echo -e "${YELLOW} (schema.sql è solo uno snapshot, non viene applicato)${NC}" + else + echo -e "${YELLOW}⚠️ APPLICAZIONE MODIFICHE AL DATABASE${NC}" + echo -e "${YELLOW} Database: ${PGDATABASE}@${PGHOST}${NC}" + echo -e "${YELLOW} Script da applicare:${NC}" + + # Mostra lista script + for script in $SQL_SCRIPTS; do + echo -e "${YELLOW} • $(basename $script)${NC}" + done + + read -p "Confermi applicazione modifiche? (y/n) " -n 1 -r + echo + + if [[ $REPLY =~ ^[Yy]$ ]]; then + # Applica tutti gli script in ordine + for script in $SQL_SCRIPTS; do + SCRIPT_NAME=$(basename "$script") + echo -e "\n${BLUE}📄 Applicando $SCRIPT_NAME...${NC}" + + psql -h "${PGHOST:-127.0.0.1}" -p "${PGPORT:-5432}" -U "${PGUSER}" -d "${PGDATABASE}" -f "$script" if [ $? -eq 0 ]; then - echo -e "${GREEN}✅ Schema database sincronizzato${NC}" + echo -e "${GREEN}✅ $SCRIPT_NAME applicato con successo${NC}" else - echo -e "${RED}❌ Errore sincronizzazione schema${NC}" + echo -e "${RED}❌ Errore applicando $SCRIPT_NAME${NC}" + echo -e "${YELLOW}⚠️ Gli script successivi NON saranno applicati${NC}" exit 1 fi - else - echo -e "${YELLOW}⏭️ Sincronizzazione schema saltata${NC}" - fi + done + + echo -e "\n${GREEN}✅ Tutti gli script SQL applicati con successo${NC}" else - echo -e "${RED}❌ File .env non trovato${NC}" - exit 1 + echo -e "${YELLOW}⏭️ Sincronizzazione database saltata${NC}" fi - else - echo -e "${YELLOW}⚠️ File schema.sql non trovato in database-schema/${NC}" - echo -e "${YELLOW} Esegui ./deployment/export_db_schema.sh sul server di riferimento${NC}" fi fi