Add missing Resos tables to schema.sql
resos_custom_field_mapping, resos_opening_hours_mapping, resos_manual_breakfast_periods, resos_bookings_data, resos_bookings_stats, resos_booking_pace were never added to the schema — they only existed in the original standalone Postgres instance. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7dfaa5a9fb
commit
9761e88e9b
1 changed files with 130 additions and 0 deletions
|
|
@ -1001,3 +1001,133 @@ INSERT INTO system_config (config_key, config_value, description) VALUES
|
||||||
('recon_sales_breakdown_columns', '[]', 'Sales breakdown column configuration (JSON)'),
|
('recon_sales_breakdown_columns', '[]', 'Sales breakdown column configuration (JSON)'),
|
||||||
('recon_safe_cash_target', '0.00', 'Target amount for safe cash float')
|
('recon_safe_cash_target', '0.00', 'Target amount for safe cash float')
|
||||||
ON CONFLICT (config_key) DO NOTHING;
|
ON CONFLICT (config_key) DO NOTHING;
|
||||||
|
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- WEATHER DATA (Open-Meteo ERA5 archive)
|
||||||
|
-- Location: Stow on the Wold, GL54 1JX (51.9253°N, -1.7272°W, 230m)
|
||||||
|
-- ============================================
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS weather_data (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
date DATE NOT NULL UNIQUE,
|
||||||
|
temperature_max DECIMAL(5,2), -- °C
|
||||||
|
temperature_min DECIMAL(5,2), -- °C
|
||||||
|
temperature_mean DECIMAL(5,2), -- °C
|
||||||
|
precipitation_sum DECIMAL(7,2), -- mm total (rain + snow)
|
||||||
|
rain_sum DECIMAL(7,2), -- mm rain only
|
||||||
|
snowfall_sum DECIMAL(7,2), -- cm snowfall
|
||||||
|
snow_depth_max DECIMAL(7,3), -- m snow depth
|
||||||
|
windspeed_max DECIMAL(6,2), -- km/h
|
||||||
|
sunshine_hours DECIMAL(5,2), -- hours (converted from seconds)
|
||||||
|
weathercode SMALLINT, -- WMO weather interpretation code
|
||||||
|
fetched_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_weather_data_date ON weather_data(date);
|
||||||
|
|
||||||
|
INSERT INTO system_config (config_key, config_value, description) VALUES
|
||||||
|
('weather_sync_enabled', 'true', 'Enable daily weather data sync from Open-Meteo'),
|
||||||
|
('weather_sync_time', '05:15', 'Daily weather sync time (HH:MM)'),
|
||||||
|
('weather_location_name', 'Stow on the Wold, GL54 1JX', 'Human-readable location name for weather data'),
|
||||||
|
('weather_latitude', '51.9253', 'Latitude for weather data fetch (decimal degrees)'),
|
||||||
|
('weather_longitude', '-1.7272', 'Longitude for weather data fetch (decimal degrees)'),
|
||||||
|
('weather_timezone', 'Europe/London', 'Timezone for weather data (IANA tz name)')
|
||||||
|
ON CONFLICT (config_key) DO NOTHING;
|
||||||
|
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- RESOS RESTAURANT INTEGRATION
|
||||||
|
-- ============================================
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS resos_custom_field_mapping (
|
||||||
|
field_id TEXT PRIMARY KEY,
|
||||||
|
field_name TEXT NOT NULL DEFAULT '',
|
||||||
|
field_type TEXT NOT NULL DEFAULT '',
|
||||||
|
maps_to TEXT NOT NULL,
|
||||||
|
value_for_true TEXT,
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS resos_opening_hours_mapping (
|
||||||
|
opening_hour_id TEXT PRIMARY KEY,
|
||||||
|
opening_hour_name TEXT NOT NULL DEFAULT '',
|
||||||
|
period_type TEXT NOT NULL,
|
||||||
|
display_name TEXT,
|
||||||
|
is_regular BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS resos_manual_breakfast_periods (
|
||||||
|
day_of_week INTEGER PRIMARY KEY,
|
||||||
|
start_time TIME,
|
||||||
|
end_time TIME,
|
||||||
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS resos_bookings_data (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
resos_id TEXT NOT NULL UNIQUE,
|
||||||
|
booking_date DATE NOT NULL,
|
||||||
|
booking_time TEXT,
|
||||||
|
opening_hour_id TEXT,
|
||||||
|
period_type TEXT,
|
||||||
|
covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
status TEXT,
|
||||||
|
source TEXT,
|
||||||
|
table_name TEXT,
|
||||||
|
table_area TEXT,
|
||||||
|
is_hotel_guest BOOLEAN,
|
||||||
|
is_dbb BOOLEAN,
|
||||||
|
is_package BOOLEAN,
|
||||||
|
hotel_booking_number TEXT,
|
||||||
|
group_exclude_field BOOLEAN,
|
||||||
|
total_guests INTEGER,
|
||||||
|
booking_placed TIMESTAMPTZ,
|
||||||
|
notes TEXT,
|
||||||
|
raw_json JSONB,
|
||||||
|
fetched_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_resos_bookings_date ON resos_bookings_data (booking_date);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_resos_bookings_status ON resos_bookings_data (status);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_resos_bookings_period ON resos_bookings_data (period_type);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS resos_bookings_stats (
|
||||||
|
date DATE PRIMARY KEY,
|
||||||
|
breakfast_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
lunch_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
afternoon_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
dinner_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
other_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
total_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
breakfast_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
lunch_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
afternoon_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
dinner_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
other_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
total_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
covers_by_source JSONB NOT NULL DEFAULT '{}',
|
||||||
|
covers_by_period JSONB NOT NULL DEFAULT '{}',
|
||||||
|
hotel_guest_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
non_hotel_guest_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
dbb_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
package_covers INTEGER NOT NULL DEFAULT 0,
|
||||||
|
hotel_booking_numbers JSONB NOT NULL DEFAULT '{}',
|
||||||
|
distinct_hotel_bookings INTEGER NOT NULL DEFAULT 0,
|
||||||
|
bookings_with_hotel_link INTEGER NOT NULL DEFAULT 0,
|
||||||
|
avg_party_size DECIMAL(5,2),
|
||||||
|
avg_party_size_by_period JSONB NOT NULL DEFAULT '{}',
|
||||||
|
aggregated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS resos_booking_pace (
|
||||||
|
booking_date DATE NOT NULL,
|
||||||
|
pace_type TEXT NOT NULL,
|
||||||
|
d0 INTEGER DEFAULT 0, d1 INTEGER DEFAULT 0, d2 INTEGER DEFAULT 0,
|
||||||
|
d3 INTEGER DEFAULT 0, d7 INTEGER DEFAULT 0, d14 INTEGER DEFAULT 0,
|
||||||
|
d21 INTEGER DEFAULT 0, d28 INTEGER DEFAULT 0, d60 INTEGER DEFAULT 0,
|
||||||
|
d90 INTEGER DEFAULT 0,
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
PRIMARY KEY (booking_date, pace_type)
|
||||||
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue