From d58d92d529f6bcf1afea618c2a89191213de837a Mon Sep 17 00:00:00 2001 From: dvirlabs <114520947+dvirlabs@users.noreply.github.com> Date: Sun, 7 Dec 2025 16:45:12 +0200 Subject: [PATCH] Fix scehma db --- .../templates/db-migration-job.yaml | 95 +++++++++++++++++++ .../templates/db-schema-configmap copy.yaml | 36 +++++++ 2 files changed, 131 insertions(+) create mode 100644 charts/my-recipes-chart/templates/db-migration-job.yaml create mode 100644 charts/my-recipes-chart/templates/db-schema-configmap copy.yaml diff --git a/charts/my-recipes-chart/templates/db-migration-job.yaml b/charts/my-recipes-chart/templates/db-migration-job.yaml new file mode 100644 index 0000000..065a4e5 --- /dev/null +++ b/charts/my-recipes-chart/templates/db-migration-job.yaml @@ -0,0 +1,95 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-db-migration + namespace: {{ .Values.global.namespace }} +data: + migrate.sql: | + -- Add made_by column if it doesn't exist + DO $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'recipes' AND column_name = 'made_by' + ) THEN + ALTER TABLE recipes ADD COLUMN made_by TEXT; + END IF; + END $$; + + -- Create index if it doesn't exist + CREATE INDEX IF NOT EXISTS idx_recipes_made_by ON recipes (made_by); + + -- Verify schema + SELECT column_name, data_type + FROM information_schema.columns + WHERE table_name = 'recipes' + ORDER BY ordinal_position; +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ .Release.Name }}-db-migration-{{ .Release.Revision }} + namespace: {{ .Values.global.namespace }} + labels: + app: {{ .Release.Name }}-db-migration + component: migration + annotations: + "helm.sh/hook": post-upgrade,post-install + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": before-hook-creation +spec: + ttlSecondsAfterFinished: 300 + template: + metadata: + labels: + app: {{ .Release.Name }}-db-migration + spec: + restartPolicy: Never + containers: + - name: migrate + image: postgres:16-alpine + command: + - /bin/sh + - -c + - | + echo "Waiting for database to be ready..." + until pg_isready -h $DB_HOST -U $DB_USER; do + echo "Database not ready, waiting..." + sleep 2 + done + echo "Database is ready, running migration..." + PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -U $DB_USER -d $DB_NAME -f /migration/migrate.sql + echo "Migration completed successfully" + env: + - name: DB_HOST + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-credentials + key: DB_HOST + - name: DB_PORT + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-credentials + key: DB_PORT + - name: DB_NAME + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-credentials + key: DB_NAME + - name: DB_USER + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-credentials + key: DB_USER + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-credentials + key: DB_PASSWORD + volumeMounts: + - name: migration-script + mountPath: /migration + volumes: + - name: migration-script + configMap: + name: {{ .Release.Name }}-db-migration diff --git a/charts/my-recipes-chart/templates/db-schema-configmap copy.yaml b/charts/my-recipes-chart/templates/db-schema-configmap copy.yaml new file mode 100644 index 0000000..85b798b --- /dev/null +++ b/charts/my-recipes-chart/templates/db-schema-configmap copy.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-db-schema + namespace: {{ .Values.global.namespace }} +data: + schema.sql: | + -- Create recipes table + CREATE TABLE IF NOT EXISTS recipes ( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL, + meal_type TEXT NOT NULL, -- breakfast / lunch / dinner / snack + time_minutes INTEGER NOT NULL, + made_by TEXT, -- Person who created this recipe version + tags JSONB NOT NULL DEFAULT '[]', -- ["מהיר", "בריא"] + ingredients JSONB NOT NULL DEFAULT '[]', -- ["ביצה", "עגבניה", "מלח"] + steps JSONB NOT NULL DEFAULT '[]', -- ["לחתוך", "לבשל", ...] + image TEXT -- Base64-encoded image or image URL + ); + + -- Optional: index for filters + CREATE INDEX IF NOT EXISTS idx_recipes_meal_type + ON recipes (meal_type); + + CREATE INDEX IF NOT EXISTS idx_recipes_time_minutes + ON recipes (time_minutes); + + CREATE INDEX IF NOT EXISTS idx_recipes_made_by + ON recipes (made_by); + + CREATE INDEX IF NOT EXISTS idx_recipes_tags_jsonb + ON recipes USING GIN (tags); + + CREATE INDEX IF NOT EXISTS idx_recipes_ingredients_jsonb + ON recipes USING GIN (ingredients); +