diff --git a/backend/prisma/maintenance/clean-database.sql b/backend/prisma/maintenance/clean-database.sql new file mode 100644 index 00000000..b2121641 --- /dev/null +++ b/backend/prisma/maintenance/clean-database.sql @@ -0,0 +1,24 @@ +-- Rensar applikationsdata men behaller kategorier. +-- Uppdatera den har filen nar nya tabeller tillkommer i schema.prisma. + +SET FOREIGN_KEY_CHECKS = 0; + +DELETE FROM `FlyerSelection`; +DELETE FROM `FlyerItem`; +DELETE FROM `FlyerSession`; + +DELETE FROM `ShoppingListItem`; +DELETE FROM `ShoppingList`; + +DELETE FROM `InventoryTransaction`; +DELETE FROM `InventoryItem`; + +DELETE FROM `RecipeIngredient`; +DELETE FROM `Recipe`; + +DELETE FROM `PantryItem`; +DELETE FROM `MealPlanItem`; + +DELETE FROM `Product`; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/deploy.sh b/deploy.sh index 12003286..9d4091e5 100755 --- a/deploy.sh +++ b/deploy.sh @@ -9,6 +9,8 @@ # ./deploy.sh --flutter – bygg bara flutter web-app # ./deploy.sh --importer – bygg bara importer-microservice # ./deploy.sh --seed – kör full seed på databasen (opt-in) +# ./deploy.sh --migrate – kör Prisma-migrationer (opt-in) +# ./deploy.sh --clean-database – kör underhålls-SQL som rensar data men behåller kategorier # ./deploy.sh --pull-always – kontrollera uppdateringar för basimages (flutter:3.41.9, node:24.15.0 etc) # ./deploy.sh --backend --seed – kombinera flaggor fritt (git pull körs alltid) @@ -22,6 +24,8 @@ BUILD_BACKEND=false BUILD_FLUTTER=false BUILD_IMPORTER=false RUN_SEED=false +RUN_MIGRATE=false +RUN_CLEAN_DATABASE=false PULL_IMAGES=false # --pull=false är standard (snabbt) BUILD_ALL=true # om inga specifika tjänster anges, bygg allt @@ -31,6 +35,8 @@ for arg in "$@"; do --flutter) BUILD_FLUTTER=true; BUILD_ALL=false ;; --importer) BUILD_IMPORTER=true; BUILD_ALL=false ;; --seed) RUN_SEED=true ;; + --migrate) RUN_MIGRATE=true; BUILD_BACKEND=true; BUILD_ALL=false ;; + --clean-database) RUN_CLEAN_DATABASE=true; BUILD_BACKEND=true; BUILD_ALL=false ;; --pull-always) PULL_IMAGES=true ;; --help|-h) sed -n '/^# Användning:/,/^[^#]/p' "$0" | grep '^#' | sed 's/^# \?//' @@ -81,6 +87,42 @@ fi echo "Startar tjänster..." $COMPOSE up -d +# ── Prisma migreringar och databasrensning (opt-in) ─────────────────────────── +if [ "$RUN_MIGRATE" = true ] || [ "$RUN_CLEAN_DATABASE" = true ]; then + CLEAN_SQL_FILE="backend/prisma/maintenance/clean-database.sql" + + echo "Väntar på att backend är redo för Prisma-kommandon..." + for i in $(seq 1 30); do + if docker exec recipe-api sh -lc "test -f /app/prisma/schema.prisma" >/dev/null 2>&1; then + break + fi + echo " ...försök $i/30" + sleep 2 + done + + if [ "$RUN_MIGRATE" = true ]; then + echo "Kör Prisma-migrationer (deploy)..." + docker exec recipe-api sh -lc "cd /app && npx prisma migrate deploy --schema prisma/schema.prisma" + fi + + if [ "$RUN_CLEAN_DATABASE" = true ]; then + if [ ! -f "$CLEAN_SQL_FILE" ]; then + echo "Fel: saknar $CLEAN_SQL_FILE" + exit 1 + fi + + MARIADB_ROOT_PASSWORD=$(grep MARIADB_ROOT_PASSWORD .env | cut -d '=' -f2 | tr -d '"' | tr -d "'") + MARIADB_DATABASE=$(grep MARIADB_DATABASE .env | cut -d '=' -f2 | tr -d '"' | tr -d "'") + + echo "Kör databasrensning från $CLEAN_SQL_FILE ..." + docker exec -i recipe-db mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE" < "$CLEAN_SQL_FILE" + echo "Databasrensning klar (kategorier bevarade enligt SQL-filen)." + fi + + echo "Uppdaterar Prisma Client..." + docker exec recipe-api sh -lc "cd /app && npx prisma generate --schema prisma/schema.prisma" +fi + # ── Seed (opt-in) ───────────────────────────────────────────────────────────── if [ "$RUN_SEED" = true ]; then MARIADB_ROOT_PASSWORD=$(grep MARIADB_ROOT_PASSWORD .env | cut -d '=' -f2 | tr -d '"' | tr -d "'")