#!/usr/bin/env bash set -Eeuo pipefail # ---------------------------------------- # Config # ---------------------------------------- APP_DIR="${1:-/opt/containers/recipe-app}" COMPOSE_FILES=(-f compose.yml -f compose.flutter.yml) DB_CONTAINER="recipe-db" IMPORTER_DIR="../microservice-importer" SEED_FILE="db/seeds/seed_all.sql" # ---------------------------------------- # Helpers # ---------------------------------------- log() { echo "[reset] $*"; } fail() { echo "[reset][ERROR] $*" >&2; exit 1; } require_cmd() { command -v "$1" >/dev/null 2>&1 || fail "Saknar kommando: $1" } # ---------------------------------------- # Preflight # ---------------------------------------- require_cmd docker require_cmd git require_cmd grep require_cmd cut require_cmd tr cd "$APP_DIR" || fail "Kunde inte byta till katalog: $APP_DIR" [ -f ".env" ] || fail ".env saknas i $APP_DIR" [ -f "compose.yml" ] || fail "compose.yml saknas" [ -f "compose.flutter.yml" ] || fail "compose.flutter.yml saknas" [ -f "$SEED_FILE" ] || fail "$SEED_FILE saknas" [ -d "$IMPORTER_DIR/.git" ] || fail "Importer-repot hittades inte i $IMPORTER_DIR" # Läs DB-variabler från .env (samma stil som manuella seed-kommandon) DB_PASS="$(grep '^MARIADB_ROOT_PASSWORD=' .env | cut -d '=' -f2 | tr -d '"' | tr -d "'")" DB_NAME="$(grep '^MARIADB_DATABASE=' .env | cut -d '=' -f2 | tr -d '"' | tr -d "'")" [ -n "${DB_PASS:-}" ] || fail "MARIADB_ROOT_PASSWORD är tom i .env" [ -n "${DB_NAME:-}" ] || fail "MARIADB_DATABASE är tom i .env" echo echo "VARNING: Detta gör en full reset av databasen." echo "All data i DB-volymen försvinner (användare, inventarie, pantry, historik)." echo read -r -p "Fortsätt? Skriv JA för att bekräfta: " CONFIRM [ "$CONFIRM" = "JA" ] || fail "Avbrutet av användare" # ---------------------------------------- # Pull latest code # ---------------------------------------- log "Hämtar senaste kod för recipe-app" git pull origin main log "Hämtar senaste kod för microservice-importer" (cd "$IMPORTER_DIR" && git pull origin main) # ---------------------------------------- # Full reset + rebuild # ---------------------------------------- log "Stoppar stacken och tar bort volymer" docker compose "${COMPOSE_FILES[@]}" down -v --remove-orphans log "Bygger och startar stacken igen" docker compose "${COMPOSE_FILES[@]}" up -d --build # ---------------------------------------- # Wait for DB # ---------------------------------------- log "Väntar på databasen" for i in $(seq 1 60); do if docker exec "$DB_CONTAINER" mariadb-admin ping -h 127.0.0.1 -uroot -p"$DB_PASS" --silent >/dev/null 2>&1; then log "Databasen är redo" break fi if [ "$i" -eq 60 ]; then fail "Databasen blev inte redo i tid" fi sleep 2 done # ---------------------------------------- # Run full seed # ---------------------------------------- log "Kör full seed från $SEED_FILE" docker exec -i "$DB_CONTAINER" mariadb -uroot -p"$DB_PASS" "$DB_NAME" < "$SEED_FILE" # ---------------------------------------- # Post-checks # ---------------------------------------- log "Visar container-status" docker compose "${COMPOSE_FILES[@]}" ps log "Kontrollerar kategori-kopplingar på produkter" docker exec -i "$DB_CONTAINER" mariadb -uroot -p"$DB_PASS" "$DB_NAME" -e " SELECT COUNT(*) AS total_products FROM Product; SELECT COUNT(*) AS products_with_category FROM Product WHERE categoryId IS NOT NULL; SELECT COUNT(*) AS products_without_category FROM Product WHERE categoryId IS NULL; " log "Klart"