-- Seed data for Seminarhof Drawehn dev environment. -- Idempotent: existing rows with matching primary keys are left untouched. -- ─── Venue ─────────────────────────────────────────────────────────── INSERT OR IGNORE INTO venue (venue_id, name, slug) VALUES ('v_drawehn', 'Seminarhof Drawehn', 'drawehn'); -- ─── Bathrooms ─────────────────────────────────────────────────────── INSERT OR IGNORE INTO bathroom (bathroom_id, venue_id, label) VALUES ('bath_1', 'v_drawehn', 'Bad Zi 1'), ('bath_2', 'v_drawehn', 'Bad Zi 2'), ('bath_3', 'v_drawehn', 'Bad Zi 3'), ('bath_4', 'v_drawehn', 'Bad Zi 4'), ('bath_5', 'v_drawehn', 'Bad Zi 5'), ('bath_6', 'v_drawehn', 'Bad Zi 6'), ('bath_7', 'v_drawehn', 'Bad Zi 7'), ('bath_8_9','v_drawehn', 'Bad Zi 8+9 (shared)'), ('bath_10', 'v_drawehn', 'Bad Zi 10'), ('bath_11', 'v_drawehn', 'Bad Zi 11'), ('bath_12', 'v_drawehn', 'Bad Zi 12'), ('bath_13', 'v_drawehn', 'Bad Zi 13'), ('bath_14', 'v_drawehn', 'Bad Zi 14'), ('bath_15', 'v_drawehn', 'Bad Zi 15'), ('bath_16', 'v_drawehn', 'Bad Zi 16'), ('bath_17', 'v_drawehn', 'Bad Zi 17'), ('bath_18', 'v_drawehn', 'Bad Zi 18'), ('bath_19_20','v_drawehn','Bad Zi 19+20 (shared)'), ('bath_21', 'v_drawehn', 'Bad Zi 21'), ('bath_22', 'v_drawehn', 'Bad Zi 22'), ('bath_23', 'v_drawehn', 'Bad Zi 23'); -- ─── Rooms ─────────────────────────────────────────────────────────── INSERT OR IGNORE INTO room (room_id, venue_id, number, beds, room_type, building, floor, bathroom_id, wheelchair, ground_floor, quiet, shared_bath, dogs_allowed, double_bed_140, surcharge_eur_cents) VALUES ('r_1', 'v_drawehn', 1, 1, 'EZ_only', 'gaestehaus', 'eg', 'bath_1', 1, 1, 0, 0, 0, 0, 0), ('r_2', 'v_drawehn', 2, 2, 'DZ', 'gaestehaus', 'eg', 'bath_2', 1, 1, 0, 0, 0, 0, 0), ('r_3', 'v_drawehn', 3, 2, 'DZ', 'gaestehaus', 'eg', 'bath_3', 0, 1, 0, 0, 0, 0, 0), ('r_4', 'v_drawehn', 4, 2, 'DZ', 'gaestehaus', 'eg', 'bath_4', 0, 1, 0, 0, 0, 0, 0), ('r_5', 'v_drawehn', 5, 3, 'MBZ', 'gaestehaus', 'eg', 'bath_5', 0, 1, 0, 0, 0, 0, 0), ('r_6', 'v_drawehn', 6, 1, 'EZ_only', 'gaestehaus', 'eg', 'bath_6', 0, 1, 0, 0, 0, 0, 0), ('r_7', 'v_drawehn', 7, 3, 'MBZ', 'gaestehaus', 'eg', 'bath_7', 0, 1, 1, 0, 0, 0, 0), ('r_8', 'v_drawehn', 8, 2, 'DZ', 'gaestehaus', 'eg', 'bath_8_9',0, 1, 1, 1, 0, 0, 0), ('r_9', 'v_drawehn', 9, 2, 'DZ', 'gaestehaus', 'eg', 'bath_8_9',0, 1, 1, 1, 0, 0, 0), ('r_10', 'v_drawehn', 10, 2, 'DZ', 'gaestehaus', 'eg', 'bath_10', 0, 1, 1, 0, 1, 0, 2000), ('r_11', 'v_drawehn', 11, 2, 'DZ', 'gaestehaus', 'eg', 'bath_11', 0, 1, 1, 0, 0, 0, 0), ('r_12', 'v_drawehn', 12, 2, 'DZ', 'gaestehaus', 'eg', 'bath_12', 0, 1, 1, 0, 0, 0, 0), ('r_13', 'v_drawehn', 13, 1, 'EZ_only', 'gaestehaus', 'og', 'bath_13', 0, 0, 0, 0, 0, 0, 0), ('r_14', 'v_drawehn', 14, 1, 'EZ_only', 'gaestehaus', 'og', 'bath_14', 0, 0, 0, 0, 0, 1, 0), ('r_15', 'v_drawehn', 15, 2, 'DZ', 'gaestehaus', 'og', 'bath_15', 0, 0, 0, 0, 0, 0, 0), ('r_16', 'v_drawehn', 16, 2, 'DZ', 'gaestehaus', 'og', 'bath_16', 0, 0, 0, 0, 0, 0, 0), ('r_17', 'v_drawehn', 17, 2, 'DZ', 'gaestehaus', 'og', 'bath_17', 0, 0, 0, 0, 0, 0, 0), ('r_18', 'v_drawehn', 18, 2, 'DZ', 'gaestehaus', 'og', 'bath_18', 0, 0, 0, 0, 0, 0, 0), ('r_19', 'v_drawehn', 19, 2, 'DZ', 'haupthaus', 'eg', 'bath_19_20',0, 1, 0, 1, 0, 0, 0), ('r_20', 'v_drawehn', 20, 3, 'DZ', 'haupthaus', 'eg', 'bath_19_20',0, 1, 0, 1, 0, 1, 0), ('r_21', 'v_drawehn', 21, 2, 'DZ', 'haupthaus', 'og', 'bath_21', 0, 0, 0, 0, 0, 0, 0), ('r_22', 'v_drawehn', 22, 1, 'EZ_only', 'haupthaus', 'og', 'bath_22', 0, 0, 0, 0, 0, 1, 0), ('r_23', 'v_drawehn', 23, 2, 'DZ', 'haupthaus', 'og', 'bath_23', 0, 0, 0, 0, 0, 0, 0); -- ─── Seminar rooms ─────────────────────────────────────────────────── INSERT OR IGNORE INTO seminar_room (seminar_room_id, venue_id, name) VALUES ('sr_mandala', 'v_drawehn', 'Mandala'), ('sr_yogaraum', 'v_drawehn', 'Yogaraum'); -- ─── Demo client ───────────────────────────────────────────────────── -- Users are created via better-auth sign-up (not seeded here). -- Demo credentials (sign up via /api/auth/sign-up/email): -- sarah@seminarhof.example → owner1234 -- christina@seminarhof.example → admin1234 -- demo@yoga-retreat.example → demo1234 INSERT OR IGNORE INTO client (client_id, venue_id, name, is_stammgruppe, contact_email, website) VALUES ('client_yoga', 'v_drawehn', 'Yoga Retreat e.V.', 1, 'demo@yoga-retreat.example', 'https://yoga-retreat.example'); -- ─── Demo bookings ────────────────────────────────────────────────── INSERT OR IGNORE INTO booking (booking_id, venue_id, client_id, event_name, start_date, end_date, status, half_house, online_ad, expected_persons, description, meal_time_breakfast, meal_time_lunch, meal_time_dinner, payment_method, agb_year, agb_accepted_at, privacy_accepted_at) VALUES ('b_yoga_2026_summer', 'v_drawehn', 'client_yoga', 'Summer Yoga Retreat 2026', '2026-07-12', '2026-07-19', 'confirmed', 0, 1, 28, 'A week of yoga, breath work, and quiet meals in Lower Saxony.', '08:00', '13:00', '19:00', 'transfer', 2026, '2026-02-14T10:30:00Z', '2026-02-14T10:30:00Z'), ('b_yoga_2026_winter', 'v_drawehn', 'client_yoga', 'Winter Stille 2026', '2026-12-27', '2027-01-02', 'confirmed', 0, 0, 18, 'Year-end silent retreat.', '08:30', '13:00', '18:30', 'transfer', 2026, '2026-04-01T09:00:00Z', '2026-04-01T09:00:00Z'), ('b_lc_enquiry', 'v_drawehn', 'client_yoga', 'Lifecycle Test Retreat', '2026-12-20', '2026-12-27', 'enquiry', 0, 0, 10, 'Lifecycle e2e test booking.', '08:00', '13:00', '19:00', 'transfer', NULL, NULL, NULL), ('b_lc_reserved', 'v_drawehn', 'client_yoga', 'Lifecycle Test Retreat (Reserved)', '2026-12-20', '2026-12-27', 'reserved', 0, 0, 10, 'Reserved - contract not yet sent.', '08:00', '13:00', '19:00', 'transfer', NULL, NULL, NULL), ('b_lc_contract_sent', 'v_drawehn', 'client_yoga', 'Lifecycle Test Retreat (Contract Sent)', '2026-12-20', '2026-12-27', 'reserved', 0, 0, 10, 'Reserved - contract sent 8 days ago.', '08:00', '13:00', '19:00', 'transfer', NULL, NULL, NULL), ('b_lc_confirmed', 'v_drawehn', 'client_yoga', 'Lifecycle Test Retreat (Confirmed)', '2026-05-26', '2026-06-02', 'confirmed', 0, 0, 10, 'Confirmed - ended yesterday, ready for auto-complete.', '08:00', '13:00', '19:00', 'transfer', NULL, NULL, NULL); -- ─── Sample participants for the summer retreat ───────────────────── INSERT OR IGNORE INTO participant (participant_id, booking_id, name, kind, dietary_tag) VALUES ('p_s_01', 'b_yoga_2026_summer', 'Anja Weber', 'overnight', 'vegan'), ('p_s_02', 'b_yoga_2026_summer', 'Bernd Krause', 'overnight', 'vegetarian'), ('p_s_03', 'b_yoga_2026_summer', 'Clara Hoffmann', 'overnight', 'vegan'), ('p_s_04', 'b_yoga_2026_summer', 'Dieter Lange', 'overnight', 'omnivore'), ('p_s_05', 'b_yoga_2026_summer', 'Eva Richter', 'overnight', 'gluten_free'), ('p_s_06', 'b_yoga_2026_summer', 'Frank Müller', 'overnight', NULL), ('p_s_07', 'b_yoga_2026_summer', 'Greta Schulz', 'overnight', 'vegan'), ('p_s_08', 'b_yoga_2026_summer', 'Hans Becker', 'day_guest', 'vegetarian'); INSERT OR IGNORE INTO participant_allergy (participant_id, allergen, severity) VALUES ('p_s_01', 'nuts', 'standard'), ('p_s_05', 'gluten_strict', 'separate_prep'); -- ─── Sample invoices ──────────────────────────────────────────────── INSERT OR IGNORE INTO invoice (invoice_id, booking_id, kind, invoice_number, issued_on, due_on, paid_on, amount_cents, status) VALUES ('inv_s_dep', 'b_yoga_2026_summer', 'deposit', '2026-001', '2026-02-15', '2026-03-01', '2026-02-22', 30000, 'paid'), ('inv_w_dep', 'b_yoga_2026_winter', 'deposit', '2026-002', '2026-04-02', '2026-04-16', '2026-04-10', 30000, 'paid'), ('inv_lc_dep', 'b_lc_contract_sent', 'deposit', 'LC-DEP-001', '2026-05-26', '2026-06-09', NULL, 30000, 'outstanding'); -- ─── Additional clients ──────────────────────────────────────────── INSERT OR IGNORE INTO client (client_id, venue_id, name, is_stammgruppe, contact_email, contact_phone, billing_address, website) VALUES ('client_breath', 'v_drawehn', 'Breath & Body Collective', 1, 'hi@breath-body.example', '+49 30 22221111', 'Hauptstr. 22, 10115 Berlin', 'https://breath-body.example'), ('client_silent', 'v_drawehn', 'Silent Path Sangha', 0, 'team@silent-path.example','+49 40 33334444', 'Mönckebergstr. 7, 20095 Hamburg', 'https://silent-path.example'), ('client_dance', 'v_drawehn', '5Rhythms Nord', 0, 'kontakt@5r-nord.example', '+49 511 5556677', 'Lister Meile 14, 30161 Hannover','https://5r-nord.example'), ('client_writers', 'v_drawehn', 'Schreibwerkstatt Lüneburger Heide', 0, 'mail@schreiben-heide.example', '+49 5841 991122', 'Lange Str. 4, 29410 Salzwedel', NULL), ('client_qigong', 'v_drawehn', 'Qigong Verein Hamburg e.V.', 1, 'verein@qigong-hh.example','+49 40 88991122', 'Eppendorfer Weg 12, 20259 Hamburg', NULL), ('client_workation','v_drawehn', 'Remote First GmbH', 0, 'ops@remotefirst.example', '+49 30 99887766', 'Linienstr. 3, 10119 Berlin', 'https://remotefirst.example'), ('client_choir', 'v_drawehn', 'Heide Vocal Ensemble', 0, 'info@heide-vocal.example',NULL, NULL, NULL); -- ─── Additional users (clients linked to orgs) ───────────────────── -- Inserted into user table (better-auth schema). Passwords must be set via /api/auth/sign-up/email. INSERT OR IGNORE INTO "user" (id, email, name, locale, role, email_verified, created_at, updated_at) VALUES ('u_breath', 'lea@breath-body.example', 'Lea Breath', 'de', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_silent', 'tom@silent-path.example', 'Tom Silent', 'en', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_dance', 'jana@5r-nord.example', 'Jana Dance', 'de', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_writers', 'paula@schreiben-heide.example', 'Paula Schreiber','de', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_qigong', 'kai@qigong-hh.example', 'Kai Wu', 'de', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_workation','noah@remotefirst.example', 'Noah Remote', 'en', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_choir', 'sofia@heide-vocal.example', 'Sofia Vocal', 'de', 'client', 0, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'); INSERT OR IGNORE INTO client_member (client_id, user_id, role) VALUES ('client_breath', 'u_breath', 'organiser'), ('client_silent', 'u_silent', 'organiser'), ('client_dance', 'u_dance', 'organiser'), ('client_writers', 'u_writers', 'organiser'), ('client_qigong', 'u_qigong', 'organiser'), ('client_workation','u_workation','organiser'), ('client_choir', 'u_choir', 'organiser'); -- ─── Additional bookings spanning the year ───────────────────────── INSERT OR IGNORE INTO booking (booking_id, venue_id, client_id, event_name, start_date, end_date, status, half_house, online_ad, expected_persons, description, meal_time_breakfast, meal_time_lunch, meal_time_dinner, payment_method, agb_year, agb_accepted_at, privacy_accepted_at, organiser_website, cover_image_url, notes) VALUES -- past, ended ('b_breath_spring', 'v_drawehn', 'client_breath', 'Spring Breath Intensive', '2026-03-15', '2026-03-22', 'ended', 0, 1, 24, 'Pranayama and somatic breath work in the early bloom of spring.', '08:00','13:00','19:00','transfer', 2026, '2025-11-12T09:00:00Z','2025-11-12T09:00:00Z', 'https://breath-body.example', NULL, NULL), ('b_qigong_easter', 'v_drawehn', 'client_qigong', 'Qigong Osterklausur', '2026-04-03','2026-04-09', 'ended', 1, 0, 14, 'Half-house qigong retreat over the Easter break.', '07:30','12:30','18:30','transfer', 2026, '2025-12-01T10:00:00Z','2025-12-01T10:00:00Z', NULL, NULL, 'Stammgruppe — repeat client'), -- in-flight, current ('b_writers_may', 'v_drawehn', 'client_writers', 'Schreibwoche Mai', '2026-05-08','2026-05-14', 'confirmed', 0, 1, 16, 'A writing week with morning prompts and afternoon silence.', '08:30','13:00','19:00','transfer', 2026, '2026-01-20T11:00:00Z','2026-01-20T11:00:00Z', NULL, NULL, NULL), -- upcoming, deposit paid ('b_dance_june', 'v_drawehn', 'client_dance', '5Rhythms Solstice', '2026-06-19','2026-06-22', 'confirmed', 1, 1, 22, 'Long-weekend movement intensive at the start of summer.', '08:30','13:30','19:30','transfer', 2026, '2026-02-02T14:00:00Z','2026-02-02T14:00:00Z', 'https://5r-nord.example', NULL, NULL), -- shares the solstice weekend with 5Rhythms (both half-house) → the -- availability calendar renders Jun 20–22 as a diagonal split. ('b_writers_solstice', 'v_drawehn', 'client_writers', 'Solstice Schreibzirkel', '2026-06-20','2026-06-22', 'confirmed', 1, 1, 10, 'A small writing circle taking the other half of the house over the solstice.', '08:30','13:00','19:00','transfer', 2026, '2026-02-10T10:00:00Z','2026-02-10T10:00:00Z', NULL, NULL, 'Half-house — shares the weekend with 5Rhythms Solstice'), -- upcoming, reserved ('b_workation_aug', 'v_drawehn', 'client_workation', 'Remote First Workation', '2026-08-10','2026-08-17', 'reserved', 0, 0, 12, 'Engineering team offsite — co-working with daily morning movement.', '08:00','13:00','19:00','transfer', 2026, '2026-03-12T16:00:00Z','2026-03-12T16:00:00Z', 'https://remotefirst.example', NULL, 'Needs strong wifi and 2nd seminar room'), ('b_silent_sept', 'v_drawehn', 'client_silent', 'Silent Autumn Sangha', '2026-09-21','2026-09-28', 'confirmed', 0, 1, 26, 'Seven days of noble silence, sitting and walking meditation.', '07:30','12:30','18:30','transfer', 2026, '2026-04-04T09:30:00Z','2026-04-04T09:30:00Z', 'https://silent-path.example', NULL, NULL), ('b_choir_october', 'v_drawehn', 'client_choir', 'Vocal Ensemble Probenwoche', '2026-10-12','2026-10-18', 'confirmed', 0, 1, 20, 'Choir rehearsal week preparing the winter programme.', '08:30','13:00','19:30','transfer', 2026, '2026-04-15T10:00:00Z','2026-04-15T10:00:00Z', NULL, NULL, NULL), -- new enquiry, awaiting admin approve/decline ('b_qigong_nov', 'v_drawehn', 'client_qigong', 'Qigong Spätherbst', '2026-11-08','2026-11-13', 'enquiry', 1, 0, 12, NULL, '08:00','13:00','18:30','transfer', 2026, NULL, NULL, NULL, NULL, NULL), -- reserved, contract sent + signed, deposit pending (day 8 of 14) ('b_breath_dec', 'v_drawehn', 'client_breath', 'Atemarbeit zum Jahreswechsel', '2026-12-12','2026-12-19', 'reserved', 0, 1, 22, 'Year-end breath work for the dark half of the year.', '08:30','13:00','19:00','transfer', 2026, '2026-05-01T09:00:00Z','2026-05-01T09:00:00Z', 'https://breath-body.example', NULL, NULL), -- cancelled (was reserved, fell through) ('b_dance_cancelled', 'v_drawehn', 'client_dance', '5Rhythms Sommerfest (cancelled)', '2026-07-25','2026-07-28', 'cancelled', 1, 0, 18, 'Cancelled due to overlap with Solstice retreat.', '08:00','13:00','19:00','transfer', 2026, '2026-02-10T09:00:00Z','2026-02-10T09:00:00Z', NULL, NULL, NULL); -- ─── Additional participants for the new bookings ────────────────── INSERT OR IGNORE INTO participant (participant_id, booking_id, name, kind, dietary_tag) VALUES -- breath spring (ended) — 12 named ('p_b_01','b_breath_spring','Lea Breath', 'overnight','vegan'), ('p_b_02','b_breath_spring','Mara Lehmann', 'overnight','vegetarian'), ('p_b_03','b_breath_spring','Niko Petrov', 'overnight','omnivore'), ('p_b_04','b_breath_spring','Olga Schmidt', 'overnight','vegan'), ('p_b_05','b_breath_spring','Pia Brandt', 'overnight','gluten_free'), ('p_b_06','b_breath_spring','Quentin Ross', 'overnight','vegetarian'), ('p_b_07','b_breath_spring','Rosa Jung', 'overnight','vegan'), ('p_b_08','b_breath_spring','Stefan Kühn', 'overnight','omnivore'), ('p_b_09','b_breath_spring','Tara Singh', 'overnight','lactose_free'), ('p_b_10','b_breath_spring','Ulla Berger', 'day_guest','vegetarian'), ('p_b_11','b_breath_spring','Vincent Aydin', 'day_guest','vegan'), ('p_b_12','b_breath_spring','Wenke Otto', 'overnight','vegetarian'), -- writers may (confirmed, in-flight) — 9 named ('p_w_01','b_writers_may','Paula Schreiber','overnight','vegetarian'), ('p_w_02','b_writers_may','Annika Born', 'overnight','vegan'), ('p_w_03','b_writers_may','Bjarne Holm', 'overnight','omnivore'), ('p_w_04','b_writers_may','Conny Dittmer', 'overnight','vegan'), ('p_w_05','b_writers_may','Detlef Vogel', 'overnight','gluten_free'), ('p_w_06','b_writers_may','Erika Pohl', 'overnight','vegetarian'), ('p_w_07','b_writers_may','Falk Reuter', 'overnight','omnivore'), ('p_w_08','b_writers_may','Gesa Mahler', 'day_guest','pescatarian'), ('p_w_09','b_writers_may','Henrik Lass', 'overnight','vegan'), -- dance june — 8 named ('p_d_01','b_dance_june','Jana Dance', 'overnight','vegan'), ('p_d_02','b_dance_june','Karim Yilmaz', 'overnight','omnivore'), ('p_d_03','b_dance_june','Lena Frey', 'overnight','vegetarian'), ('p_d_04','b_dance_june','Mira Hoch', 'overnight','vegan'), ('p_d_05','b_dance_june','Nils Roth', 'overnight','vegetarian'), ('p_d_06','b_dance_june','Olaf Heim', 'overnight','omnivore'), ('p_d_07','b_dance_june','Petra Wenz', 'overnight','vegan'), ('p_d_08','b_dance_june','Quirin Albers', 'overnight','gluten_free'), -- silent sept — 10 named ('p_si_01','b_silent_sept','Tom Silent', 'overnight','vegan'), ('p_si_02','b_silent_sept','Ute Mendel', 'overnight','vegetarian'), ('p_si_03','b_silent_sept','Vera Klein', 'overnight','vegan'), ('p_si_04','b_silent_sept','Walter Frey', 'overnight','omnivore'), ('p_si_05','b_silent_sept','Xenia Adler', 'overnight','vegan'), ('p_si_06','b_silent_sept','Yannick Bauer', 'overnight','vegetarian'), ('p_si_07','b_silent_sept','Zoe Maier', 'overnight','gluten_free'), ('p_si_08','b_silent_sept','Ada Friese', 'overnight','vegan'), ('p_si_09','b_silent_sept','Bo Tillmann', 'overnight','vegetarian'), ('p_si_10','b_silent_sept','Carla Hess', 'overnight','vegan'), -- workation aug — 10 named ('p_wa_01','b_workation_aug','Noah Remote', 'overnight','vegetarian'), ('p_wa_02','b_workation_aug','Aisha Khan', 'overnight','vegan'), ('p_wa_03','b_workation_aug','Bruno Sá', 'overnight','omnivore'), ('p_wa_04','b_workation_aug','Chen Wei', 'overnight','pescatarian'), ('p_wa_05','b_workation_aug','Dani Lopez', 'overnight','vegan'), ('p_wa_06','b_workation_aug','Elif Demir', 'overnight','vegetarian'), ('p_wa_07','b_workation_aug','Felix Andersen','overnight','omnivore'), ('p_wa_08','b_workation_aug','Gita Rao', 'overnight','vegan'), ('p_wa_09','b_workation_aug','Henri Dubois', 'overnight','gluten_free'), ('p_wa_10','b_workation_aug','Ivy Park', 'overnight','vegan'), -- choir october — 8 named ('p_c_01','b_choir_october','Sofia Vocal', 'overnight','vegetarian'), ('p_c_02','b_choir_october','Toni Krug', 'overnight','vegan'), ('p_c_03','b_choir_october','Una Berg', 'overnight','omnivore'), ('p_c_04','b_choir_october','Vlad Olar', 'overnight','vegan'), ('p_c_05','b_choir_october','Wim de Jong', 'overnight','vegetarian'), ('p_c_06','b_choir_october','Yuna Park', 'overnight','vegan'), ('p_c_07','b_choir_october','Zara Mahmood', 'overnight','gluten_free'), ('p_c_08','b_choir_october','Ali Khalil', 'overnight','omnivore'), -- qigong easter (ended, half-house) — 6 named ('p_qe_01','b_qigong_easter','Kai Wu', 'overnight','vegan'), ('p_qe_02','b_qigong_easter','Sun Park', 'overnight','vegetarian'), ('p_qe_03','b_qigong_easter','Marek Liu', 'overnight','vegan'), ('p_qe_04','b_qigong_easter','Hannah Lee', 'overnight','pescatarian'), ('p_qe_05','b_qigong_easter','Iris Wang', 'overnight','vegetarian'), ('p_qe_06','b_qigong_easter','Jonas Meier','overnight','omnivore'); -- ─── Allergies sprinkled across new participants ────────────────── INSERT OR IGNORE INTO participant_allergy (participant_id, allergen, severity) VALUES ('p_b_05','gluten_strict','separate_prep'), ('p_b_09','lactose','standard'), ('p_w_05','gluten_strict','separate_prep'), ('p_d_08','gluten_strict','separate_prep'), ('p_si_07','gluten_strict','separate_prep'), ('p_wa_04','shellfish','standard'), ('p_wa_09','gluten_strict','separate_prep'), ('p_c_07','gluten_strict','separate_prep'), ('p_c_03','peanuts','severe'); -- ─── Invoices for new bookings ───────────────────────────────────── INSERT OR IGNORE INTO invoice (invoice_id, booking_id, kind, invoice_number, issued_on, due_on, paid_on, amount_cents, status) VALUES ('inv_b_dep','b_breath_spring','deposit','2026-010','2025-12-01','2025-12-15','2025-12-08', 36000,'paid'), ('inv_b_fin','b_breath_spring','final', '2026-011','2026-03-23','2026-04-06','2026-04-02',144000,'paid'), ('inv_qe_dep','b_qigong_easter','deposit','2026-012','2025-12-10','2025-12-24','2025-12-20', 21000,'paid'), ('inv_qe_fin','b_qigong_easter','final', '2026-013','2026-04-10','2026-04-24','2026-04-22', 84000,'paid'), ('inv_w_dep_writers','b_writers_may','deposit','2026-014','2026-02-01','2026-02-15','2026-02-09', 24000,'paid'), ('inv_d_dep','b_dance_june','deposit','2026-015','2026-02-15','2026-03-01','2026-02-22', 33000,'paid'), ('inv_si_dep','b_silent_sept','deposit','2026-016','2026-04-15','2026-04-29',NULL, 39000,'outstanding'), ('inv_c_dep','b_choir_october','deposit','2026-017','2026-04-20','2026-05-04','2026-04-30', 30000,'paid'), ('inv_wa_dep','b_workation_aug','deposit','2026-018','2026-03-20','2026-04-03',NULL, 18000,'outstanding'), ('inv_bd_dep','b_breath_dec','deposit','2026-019','2026-05-13','2026-05-27',NULL, 33000,'outstanding'); -- ─── Lifecycle milestone state ──────────────────────────────────── -- Status-transition timestamps (migration 0007) and contract milestones. -- confirmed bookings: reserved → contract → deposit → confirmed UPDATE booking SET reserved_at = '2026-02-15T10:00:00Z', contract_sent_at = '2026-02-15T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-02-18T14:00:00Z', confirmed_at = '2026-02-22T09:00:00Z' WHERE booking_id = 'b_yoga_2026_summer'; UPDATE booking SET reserved_at = '2026-04-02T10:00:00Z', contract_sent_at = '2026-04-02T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-04-05T14:00:00Z', confirmed_at = '2026-04-10T09:00:00Z' WHERE booking_id = 'b_yoga_2026_winter'; UPDATE booking SET reserved_at = '2025-11-13T10:00:00Z', contract_sent_at = '2025-11-13T10:00:00Z', contract_response = 'approved', contract_response_at = '2025-11-16T14:00:00Z', confirmed_at = '2025-12-08T09:00:00Z', ended_at = '2026-03-23T12:00:00Z' WHERE booking_id = 'b_breath_spring'; UPDATE booking SET reserved_at = '2025-12-02T10:00:00Z', contract_sent_at = '2025-12-02T10:00:00Z', contract_response = 'approved', contract_response_at = '2025-12-05T14:00:00Z', confirmed_at = '2025-12-20T09:00:00Z', ended_at = '2026-04-10T12:00:00Z' WHERE booking_id = 'b_qigong_easter'; UPDATE booking SET reserved_at = '2026-01-21T10:00:00Z', contract_sent_at = '2026-01-21T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-01-24T14:00:00Z', confirmed_at = '2026-02-09T09:00:00Z' WHERE booking_id = 'b_writers_may'; UPDATE booking SET reserved_at = '2026-02-03T10:00:00Z', contract_sent_at = '2026-02-03T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-02-06T14:00:00Z', confirmed_at = '2026-02-22T09:00:00Z' WHERE booking_id = 'b_dance_june'; UPDATE booking SET reserved_at = '2026-04-05T10:00:00Z', contract_sent_at = '2026-04-05T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-04-08T14:00:00Z', confirmed_at = '2026-04-15T09:00:00Z' WHERE booking_id = 'b_silent_sept'; UPDATE booking SET reserved_at = '2026-04-16T10:00:00Z', contract_sent_at = '2026-04-16T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-04-19T14:00:00Z', confirmed_at = '2026-04-30T09:00:00Z' WHERE booking_id = 'b_choir_october'; UPDATE booking SET reserved_at = '2026-06-03T10:00:00Z' WHERE booking_id = 'b_lc_reserved'; UPDATE booking SET reserved_at = '2026-06-03T10:00:00Z', contract_sent_at = '2026-05-26' WHERE booking_id = 'b_lc_contract_sent'; UPDATE booking SET reserved_at = '2026-05-19T10:00:00Z', contract_sent_at = '2026-05-19T10:00:00Z', contract_response = 'approved', contract_response_at = '2026-05-22T14:00:00Z', confirmed_at = '2026-05-26T09:00:00Z', ended_at = '2026-06-02T12:00:00Z' WHERE booking_id = 'b_lc_confirmed'; -- reserved booking: contract sent + signed, deposit pending, day 8 of 14 (healthy) UPDATE booking SET reserved_at = '2026-05-02T10:00:00Z', contract_sent_at = '2026-05-13T09:00:00Z', contract_response = 'approved', contract_response_at = '2026-05-15T14:00:00Z', deposit_reminder_sent_at = '2026-05-20T06:00:00Z' WHERE booking_id = 'b_breath_dec'; -- reserved booking: contract sent + signed, deposit overdue → flagged UPDATE booking SET reserved_at = '2026-03-13T10:00:00Z', contract_sent_at = '2026-03-20T09:00:00Z', contract_response = 'approved', contract_response_at = '2026-03-24T11:00:00Z', deposit_reminder_sent_at = '2026-03-27T06:00:00Z', flagged_at = '2026-04-03T06:00:00Z', flag_reason = 'deposit_overdue' WHERE booking_id = 'b_workation_aug'; -- cancelled booking UPDATE booking SET reserved_at = '2026-02-11T10:00:00Z', cancelled_at = '2026-02-25T09:00:00Z' WHERE booking_id = 'b_dance_cancelled'; -- ─── Sample room assignments (so the room-map view is populated) ──── INSERT OR IGNORE INTO room_assignment (booking_id, participant_id, room_id) VALUES ('b_writers_may','p_w_01','r_1'), ('b_writers_may','p_w_02','r_2'), ('b_writers_may','p_w_03','r_3'), ('b_writers_may','p_w_04','r_4'), ('b_writers_may','p_w_05','r_5'), ('b_writers_may','p_w_06','r_6'), ('b_writers_may','p_w_07','r_7'), ('b_writers_may','p_w_09','r_15'); -- ─── Audit log — status transition history for seeded bookings ─────── -- Audit log — status transition history for seeded bookings. Stored as -- pikku AuditEvents: the domain payload lives in the `data` JSON column, -- which get-booking-audit-log reads back via json_extract. INSERT OR IGNORE INTO audit (audit_id, occurred_at, type, source, actor_user_id, data) VALUES -- b_yoga_2026_summer: enquiry → reserved → confirmed ('al_ys_1', '2026-02-15T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_yoga_2026_summer","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_ys_2', '2026-02-22T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_yoga_2026_summer","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), -- b_yoga_2026_winter: enquiry → reserved → confirmed ('al_yw_1', '2026-04-02T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_yoga_2026_winter","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_yw_2', '2026-04-10T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_yoga_2026_winter","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), -- b_breath_spring: enquiry → reserved → confirmed → ended ('al_bs_1', '2025-11-13T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_breath_spring","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_bs_2', '2025-12-08T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_breath_spring","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), ('al_bs_3', '2026-03-23T12:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_breath_spring","action":"update","field":"status","before":"confirmed","after":"ended","venueId":"v_drawehn"}'), -- b_qigong_easter: enquiry → reserved → confirmed → ended ('al_qe_1', '2025-12-02T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_qigong_easter","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_qe_2', '2025-12-20T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_qigong_easter","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), ('al_qe_3', '2026-04-10T12:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_qigong_easter","action":"update","field":"status","before":"confirmed","after":"ended","venueId":"v_drawehn"}'), -- b_writers_may: enquiry → reserved → confirmed ('al_wm_1', '2026-01-21T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_writers_may","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_wm_2', '2026-02-09T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_writers_may","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), -- b_dance_june: enquiry → reserved → confirmed ('al_dj_1', '2026-02-03T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_dance_june","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_dj_2', '2026-02-22T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_dance_june","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), -- b_workation_aug: enquiry → reserved ('al_wa_1', '2026-03-13T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_workation_aug","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), -- b_silent_sept: enquiry → reserved → confirmed ('al_ss_1', '2026-04-05T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_silent_sept","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_ss_2', '2026-04-15T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_silent_sept","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), -- lifecycle fixtures ('al_lcr_1', '2026-06-03T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_lc_reserved","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_lcc_1', '2026-06-03T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_lc_contract_sent","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_lcf_1', '2026-05-19T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_lc_confirmed","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_lcf_2', '2026-05-26T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_lc_confirmed","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), ('al_lcf_3', '2026-06-02T12:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_lc_confirmed","action":"update","field":"status","before":"confirmed","after":"ended","venueId":"v_drawehn"}'), -- b_choir_october: enquiry → reserved → confirmed ('al_co_1', '2026-04-16T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_choir_october","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_co_2', '2026-04-30T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_choir_october","action":"update","field":"status","before":"reserved","after":"confirmed","venueId":"v_drawehn"}'), -- b_breath_dec: enquiry → reserved ('al_bd_1', '2026-05-02T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_breath_dec","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), -- b_dance_cancelled: enquiry → reserved → cancelled ('al_dc_1', '2026-02-11T10:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_dance_cancelled","action":"update","field":"status","before":"enquiry","after":"reserved","venueId":"v_drawehn"}'), ('al_dc_2', '2026-02-25T09:00:00Z', 'booking.update', 'explicit', NULL, '{"entity":"booking","entityId":"b_dance_cancelled","action":"update","field":"status","before":"reserved","after":"cancelled","venueId":"v_drawehn"}'); -- ─── Public enquiries — awaiting admin triage ────────────────────── -- Dates live in enquiry_date_option (priority-ordered), not on the enquiry. INSERT OR IGNORE INTO enquiry (enquiry_id, venue_id, contact_name, contact_email, contact_phone, website, event_name, event_outline, description, expected_persons, half_house, notes, privacy_accepted_at, status, waitlisted_at, approved_at, declined_at, created_at) VALUES -- Fresh pending enquiry with a single date option ('enq_pottery', 'v_drawehn', 'Lena Hoffmann', 'lena.hoffmann@example.com', '+49 170 1112233', 'https://tonundton.example.com', 'Pottery & Clay Retreat', 'A hands-on weekend of wheel-throwing and glazing.', 'Small group ceramics retreat with daily guided sessions.', 12, 0, 'Would need kiln access if possible.', '2026-05-18T14:30:00Z', 'pending', NULL, NULL, NULL, '2026-05-18T14:30:00Z'), -- Pending enquiry, no dates yet (flexible) — zero date options ('enq_songwriting', 'v_drawehn', 'Marco Velten', 'marco@vamp-music.example.com', NULL, NULL, 'Songwriting Intensive', 'Collaborative songwriting and recording.', 'Looking for a quiet space, flexible on timing in autumn.', 8, 1, NULL, '2026-05-20T09:10:00Z', 'pending', NULL, NULL, NULL, '2026-05-20T09:10:00Z'), -- Waitlisted (dates clash with an existing booking) — two date options ('enq_breathwork', 'v_drawehn', 'Sophie Klar', 'sophie.klar@example.com', '+49 151 9988776', NULL, 'Breathwork Weekend', 'Guided breathwork and cold exposure.', 'Preferred dates may overlap another group.', 20, 0, 'Flexible by a week either side.', '2026-05-12T16:45:00Z', 'pending', '2026-05-15T11:00:00Z', NULL, NULL, '2026-05-12T16:45:00Z'); INSERT OR IGNORE INTO enquiry_date_option (option_id, enquiry_id, start_date, end_date, priority) VALUES ('edo_pottery_1', 'enq_pottery', '2026-09-18', '2026-09-20', 0), ('edo_breath_1', 'enq_breathwork', '2026-10-09', '2026-10-11', 0), ('edo_breath_2', 'enq_breathwork', '2026-10-16', '2026-10-18', 1); -- ─── Demo auth accounts (better-auth credentials) ────────────────────── -- Generated by .tmp-gen-seed-accounts.mjs. These let demo users log in -- directly from the seed; passwords are documented below. The account.password -- is a better-auth scrypt hash (salt:hash, self-contained → portable). -- sarah@seminarhof.example → owner1234 -- christina@seminarhof.example → admin1234 -- demo@yoga-retreat.example → demo1234 -- → client1234 INSERT OR IGNORE INTO "user" (id, email, name, locale, role, email_verified, created_at, updated_at) VALUES ('u_sarah', 'sarah@seminarhof.example', 'Sarah Drawehn', 'de', 'owner', 1, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_christina', 'christina@seminarhof.example', 'Christina Admin', 'de', 'admin', 1, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('u_demo', 'demo@yoga-retreat.example', 'Demo Organiser', 'en', 'client', 1, '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'); INSERT OR IGNORE INTO account (id, account_id, provider_id, user_id, password, created_at, updated_at) VALUES ('acct_u_sarah', 'u_sarah', 'credential', 'u_sarah', '3d22bc6eefcbad9f528ec3b3138a9520:c084a3eec4a456ed966e78e77b0f0e3b8cfc1531eb8d06379e8831fc9b97426feacde413767f4a765c7eb907bfe15c84b6ccba26bb3048adc711811f0e45af31', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_christina', 'u_christina', 'credential', 'u_christina', '7d8cccdd9a221d22c77163cf5f386c0b:f0e8f680914ffab822d2ceaf172469c15352c5e5470397d149079c1c077915812beabc8a167f85b59e506f33e769bb1b1018a55820e7b66c13c35965a6ccde71', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_demo', 'u_demo', 'credential', 'u_demo', '8048a18c1e5f5174f7d6741401d0e5da:6cceb3546aec90ad4e27c3fcea0da435eab4d85ecc3deb68f288acc01774b9fe85c1a2d514804d047e01df56435a5bff1affde91196b18883a43e0dea79dbceb', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_breath', 'u_breath', 'credential', 'u_breath', '3042ba9c3b893b91f28cb45fccdd6766:7ddbe83af827f84e83dea9302388d007b96ab484025339eb70260849531d5897f4128bbf3a789bf6b49ddc1997659ccdcd9239e1e5e2dfe1a9f482913f3050c6', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_silent', 'u_silent', 'credential', 'u_silent', 'ebbf8f286058ddf0023424706daed7cd:04286f7173acdc6c6e146eba2b47a21631a964cb7987f354c1a12958379abb74fc89f2c34f6ccb15aa557de969c0b88f88f6169eb380c66c6d75bedd37ee3d95', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_dance', 'u_dance', 'credential', 'u_dance', 'aea4f8e5cd2abb13d4bd311762279a17:67f8a7435161108bd4561c60e8eac1c5ddccac31bdac3b66fb465dee0dd6787feec5a84ca3d2a8fb94370ccdfeac44d3d7417d7c2e1d5e0bc6582c7670b97fdd', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_writers', 'u_writers', 'credential', 'u_writers', 'fdb4f899224c45faaad0eebcc119047a:99107e9232e7114a653bcf29702312ef1ceeb4277135fcc6ff0a69034076a8cb066d3a247478b7844446a5466d32b6402995dfff9efbfa6194e1a8369ed90bf0', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_qigong', 'u_qigong', 'credential', 'u_qigong', '61b26a60ec6ffa7a8c06e21c160a05d3:0dbe469c60e36268152bb32629a14b3502ac88cf812191f92d886d9080e8807e8820dcb8c34999ff6dc9d5fbf109731dfcfc1e483dd9f4d5e2ed3cb0f23edc0a', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_workation', 'u_workation', 'credential', 'u_workation', '6fca2b7798eb61b72f70935fdd8fcd78:8160b10d86917d3e0a36910cc930a47989ca998a5ed3af688873b2ee8dbd82ada7fde4f71578c0a141ae2525d5b1f766ca6616a38b411b841b7d31bd28369580', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), ('acct_u_choir', 'u_choir', 'credential', 'u_choir', '129e67fd24ef2bb88126febc0bf9a951:3e0700ae7f90a1a623ccac1748fb2d928dd56b0a0b3bb8a84647eda17ac726690b89bdabb9e215d85fb5db2c496e93c51d3e784a6c1096b197080ac4a8507fa9', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z');