134 lines
8.3 KiB
PL/PgSQL
134 lines
8.3 KiB
PL/PgSQL
-- Migration 00005: Seed Demo Data Function
|
|
|
|
CREATE OR REPLACE FUNCTION public.seed_household_demo_data(p_household_id UUID)
|
|
RETURNS VOID
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
DECLARE
|
|
v_user_id UUID;
|
|
v_cat_gewuerze UUID;
|
|
v_cat_kuehl UUID;
|
|
v_cat_tiefkuehl UUID;
|
|
v_cat_getraenke UUID;
|
|
v_cat_konserven UUID;
|
|
v_cat_back UUID;
|
|
v_cat_grund UUID;
|
|
v_cat_obst_gemuese UUID;
|
|
v_cat_haushalt UUID;
|
|
|
|
v_loc_kuehlschrank UUID;
|
|
v_loc_gefrierschrank UUID;
|
|
v_loc_gewuerzschrank UUID;
|
|
v_loc_vorratsschrank UUID;
|
|
v_loc_getraenkelager UUID;
|
|
|
|
v_unit_stueck UUID;
|
|
v_unit_packung UUID;
|
|
v_unit_flasche UUID;
|
|
v_unit_dose UUID;
|
|
v_unit_g UUID;
|
|
v_unit_kg UUID;
|
|
v_unit_l UUID;
|
|
BEGIN
|
|
v_user_id := auth.uid();
|
|
IF NOT public.has_household_role(p_household_id, ARRAY['MEMBER', 'ADMIN', 'OWNER']::public.household_role[]) THEN
|
|
RAISE EXCEPTION 'PERMISSION_DENIED: User is not authorized to seed household %', p_household_id;
|
|
END IF;
|
|
|
|
-- Categories
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Gewürze', 1) RETURNING id INTO v_cat_gewuerze;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Kühlwaren', 2) RETURNING id INTO v_cat_kuehl;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Tiefkühlprodukte', 3) RETURNING id INTO v_cat_tiefkuehl;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Getränke', 4) RETURNING id INTO v_cat_getraenke;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Konserven', 5) RETURNING id INTO v_cat_konserven;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Backzutaten', 6) RETURNING id INTO v_cat_back;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Grundnahrungsmittel', 7) RETURNING id INTO v_cat_grund;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Obst und Gemüse', 8) RETURNING id INTO v_cat_obst_gemuese;
|
|
INSERT INTO public.categories (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Haushalt', 9) RETURNING id INTO v_cat_haushalt;
|
|
|
|
-- Locations
|
|
INSERT INTO public.locations (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Kühlschrank', 1) RETURNING id INTO v_loc_kuehlschrank;
|
|
INSERT INTO public.locations (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Gefrierschrank', 2) RETURNING id INTO v_loc_gefrierschrank;
|
|
INSERT INTO public.locations (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Gewürzschrank', 3) RETURNING id INTO v_loc_gewuerzschrank;
|
|
INSERT INTO public.locations (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Vorratsschrank', 4) RETURNING id INTO v_loc_vorratsschrank;
|
|
INSERT INTO public.locations (household_id, name, sort_order) VALUES
|
|
(p_household_id, 'Getränkelager', 5) RETURNING id INTO v_loc_getraenkelager;
|
|
|
|
-- Units
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Stück', 'Stk.', 'COUNT', false) RETURNING id INTO v_unit_stueck;
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Packung', 'Pk.', 'COUNT', false) RETURNING id INTO v_unit_packung;
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Flasche', 'Fl.', 'COUNT', false) RETURNING id INTO v_unit_flasche;
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Dose', 'Ds.', 'COUNT', false) RETURNING id INTO v_unit_dose;
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Gramm', 'g', 'WEIGHT', true) RETURNING id INTO v_unit_g;
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Kilogramm', 'kg', 'WEIGHT', true) RETURNING id INTO v_unit_kg;
|
|
INSERT INTO public.units (household_id, name, abbreviation, unit_type, allows_decimals) VALUES
|
|
(p_household_id, 'Liter', 'l', 'VOLUME', true) RETURNING id INTO v_unit_l;
|
|
|
|
-- Standard Products with Batches
|
|
-- Paprikapulver
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_gewuerze, v_loc_gewuerzschrank, v_unit_dose, 'Paprikapulver', 'Ostmann', 1, 'Dose', 1, 199, true, v_user_id);
|
|
|
|
-- Salz
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_gewuerze, v_loc_gewuerzschrank, v_unit_packung, 'Salz', 'Bad Reichenhaller', 500, 'g', 1, 99, false, v_user_id);
|
|
|
|
-- Pfeffer
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_gewuerze, v_loc_gewuerzschrank, v_unit_dose, 'Pfeffer schwarz', 'Ostmann', 1, 'Dose', 1, 249, false, v_user_id);
|
|
|
|
-- Mehl
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_back, v_loc_vorratsschrank, v_unit_kg, 'Weizenmehl Type 405', 'Diamant', 1000, 'g', 2, 129, false, v_user_id);
|
|
|
|
-- Nudeln
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_grund, v_loc_vorratsschrank, v_unit_packung, 'Spaghetti', 'Barilla', 500, 'g', 2, 189, true, v_user_id);
|
|
|
|
-- Reis
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_grund, v_loc_vorratsschrank, v_unit_packung, 'Basmati Reis', 'Uncle Ben''s', 1000, 'g', 1, 349, false, v_user_id);
|
|
|
|
-- Milch
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_kuehl, v_loc_kuehlschrank, v_unit_l, 'Vollmilch 3.5%', 'Weihenstephan', 1, 'l', 2, 119, true, v_user_id);
|
|
|
|
-- Cola Zero
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_getraenke, v_loc_getraenkelager, v_unit_flasche, 'Coca-Cola Zero', 'Coca-Cola', 1.5, 'l', 4, 129, false, v_user_id);
|
|
|
|
-- Tomaten
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_obst_gemuese, v_loc_kuehlschrank, v_unit_packung, 'Strauchtomaten', 'Bio', 500, 'g', 1, 229, true, v_user_id);
|
|
|
|
-- Kartoffeln
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_obst_gemuese, v_loc_vorratsschrank, v_unit_kg, 'Speisekartoffeln festkochend', 'Regional', 2.5, 'kg', 1, 299, false, v_user_id);
|
|
|
|
-- Zwiebeln
|
|
INSERT INTO public.products (household_id, category_id, default_location_id, default_unit_id, name, brand, package_size, package_unit, minimum_quantity, estimated_price_cents, favorite, created_by)
|
|
VALUES (p_household_id, v_cat_obst_gemuese, v_loc_vorratsschrank, v_unit_packung, 'Speisezwiebeln', 'Regional', 1, 'kg', 1, 149, true, v_user_id);
|
|
END;
|
|
$$;
|