Files
Brooke Kuhlmann 3603e65961 Added screen migration to drop device ID and kind unique index
Necessary since this index wasn't unique enough and was causing conflicts with device IDs associated with extensions. There is no equivalent down action for this migration since you could get a unique index violation (as mentioned).

Issue: 360
Milestone: minor
2026-08-10 10:36:44 -06:00

1814 lines
48 KiB
PL/PgSQL

--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: citext; Type: EXTENSION; Schema: -; Owner: -
--
CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
--
-- Name: EXTENSION citext; Type: COMMENT; Schema: -; Owner: -
--
COMMENT ON EXTENSION citext IS 'data type for case-insensitive character strings';
--
-- Name: device_log_level_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.device_log_level_enum AS ENUM (
'debug',
'info',
'warn',
'error',
'fatal',
'any'
);
--
-- Name: device_sensor_kind; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.device_sensor_kind AS ENUM (
'carbon_dioxide',
'humidity',
'pressure',
'temperature'
);
--
-- Name: device_sensor_source; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.device_sensor_source AS ENUM (
'device',
'server'
);
--
-- Name: extension_exchange_verb_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.extension_exchange_verb_enum AS ENUM (
'get',
'post'
);
--
-- Name: extension_kind_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.extension_kind_enum AS ENUM (
'image',
'poll',
'secure',
'static',
'webhook'
);
--
-- Name: extension_unit_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.extension_unit_enum AS ENUM (
'none',
'minute',
'hour',
'day',
'week',
'month'
);
--
-- Name: extension_verb_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.extension_verb_enum AS ENUM (
'get',
'post'
);
--
-- Name: palette_kind; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.palette_kind AS ENUM (
'trmnl',
'terminus'
);
--
-- Name: playlist_item_repeat_type_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.playlist_item_repeat_type_enum AS ENUM (
'none',
'minute',
'hour',
'day',
'week',
'month',
'year'
);
--
-- Name: playlist_mode_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.playlist_mode_enum AS ENUM (
'automatic',
'manual'
);
--
-- Name: screen_kind_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.screen_kind_enum AS ENUM (
'error',
'general',
'notification',
'sleep',
'wake',
'welcome'
);
--
-- Name: wake_reason_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.wake_reason_enum AS ENUM (
'powercycle',
'all',
'EXT0',
'EXT1',
'timer',
'touchpad',
'ulp',
'button',
'uart',
'wifi',
'cocpu',
'cocpu_trap_trig',
'bt'
);
--
-- Name: wifi_status_enum; Type: TYPE; Schema: public; Owner: -
--
CREATE TYPE public.wifi_status_enum AS ENUM (
'no_shield',
'idle_status',
'no_ssid_avail',
'scan_completed',
'connected',
'connect_failed',
'connection_lost',
'disconnected'
);
--
-- Name: rodauth_get_salt(bigint); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.rodauth_get_salt(acct_id bigint) RETURNS text
LANGUAGE plpgsql SECURITY DEFINER
SET search_path TO 'public', 'pg_temp'
AS $$
DECLARE salt text;
BEGIN
SELECT
substr(password_hash, 0, 30) INTO salt
FROM "user_password_hash"
WHERE acct_id = id;
RETURN salt;
END;
$$;
--
-- Name: rodauth_valid_password_hash(bigint, text); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.rodauth_valid_password_hash(acct_id bigint, hash text) RETURNS boolean
LANGUAGE plpgsql SECURITY DEFINER
SET search_path TO 'public', 'pg_temp'
AS $$
DECLARE valid boolean;
BEGIN
SELECT password_hash = hash INTO valid
FROM "user_password_hash"
WHERE acct_id = id;
RETURN valid;
END;
$$;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: account; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.account (
id integer NOT NULL,
name text NOT NULL,
label text NOT NULL,
settings jsonb DEFAULT '{}'::jsonb NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: account_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.account ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.account_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: device; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.device (
id integer CONSTRAINT devices_id_not_null NOT NULL,
label text,
mac_address text,
firmware_version text,
wifi_signal integer DEFAULT 0 CONSTRAINT devices_wifi_not_null NOT NULL,
battery_voltage double precision DEFAULT 0 CONSTRAINT devices_battery_not_null NOT NULL,
refresh_rate integer DEFAULT 900 CONSTRAINT devices_refresh_rate_not_null NOT NULL,
image_timeout integer DEFAULT 0 CONSTRAINT devices_image_timeout_not_null NOT NULL,
width integer DEFAULT 0 CONSTRAINT devices_width_not_null NOT NULL,
height integer DEFAULT 0 CONSTRAINT devices_height_not_null NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP CONSTRAINT devices_created_at_not_null NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP CONSTRAINT devices_updated_at_not_null NOT NULL,
firmware_update boolean DEFAULT true CONSTRAINT devices_firmware_update_not_null NOT NULL,
sleep_start_at time without time zone,
sleep_stop_at time without time zone,
model_id integer NOT NULL,
playlist_id integer,
battery_charge double precision DEFAULT 0 NOT NULL,
wake_reason text,
synced_at timestamp without time zone,
charging boolean DEFAULT false NOT NULL,
image_cached boolean DEFAULT false NOT NULL,
wake_duration integer DEFAULT 0 NOT NULL,
display_compatibility boolean DEFAULT false NOT NULL,
display_profile text DEFAULT 'default'::text NOT NULL,
firmware_profile boolean DEFAULT false NOT NULL,
touch_bar text DEFAULT 'tap'::text NOT NULL,
wifi_band double precision DEFAULT 0 NOT NULL,
api_key text,
command text DEFAULT 'none'::text NOT NULL
);
--
-- Name: device_log; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.device_log (
id integer CONSTRAINT device_logs_id_not_null NOT NULL,
device_id integer CONSTRAINT device_logs_device_id_not_null NOT NULL,
external_id integer CONSTRAINT device_logs_external_id_not_null NOT NULL,
message text CONSTRAINT device_logs_message_not_null NOT NULL,
source_path text CONSTRAINT device_logs_source_path_not_null NOT NULL,
source_line integer CONSTRAINT device_logs_source_line_not_null NOT NULL,
retry integer DEFAULT 0 CONSTRAINT device_logs_retry_not_null NOT NULL,
wifi_signal integer DEFAULT 0 CONSTRAINT device_logs_wifi_signal_not_null NOT NULL,
wifi_status public.wifi_status_enum DEFAULT 'disconnected'::public.wifi_status_enum CONSTRAINT device_logs_wifi_status_not_null NOT NULL,
refresh_rate integer DEFAULT 0 CONSTRAINT device_logs_refresh_rate_not_null NOT NULL,
sleep_duration integer DEFAULT 0 CONSTRAINT device_logs_sleep_duration_not_null NOT NULL,
firmware_version text CONSTRAINT device_logs_firmware_version_not_null NOT NULL,
command text CONSTRAINT device_logs_special_function_not_null NOT NULL,
wake_reason public.wake_reason_enum DEFAULT 'timer'::public.wake_reason_enum CONSTRAINT device_logs_wake_reason_not_null NOT NULL,
battery_voltage double precision DEFAULT 0 CONSTRAINT device_logs_battery_voltage_not_null NOT NULL,
free_heap_size integer DEFAULT 0 CONSTRAINT device_logs_free_heap_size_not_null NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP CONSTRAINT device_logs_created_at_not_null NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP CONSTRAINT device_logs_updated_at_not_null NOT NULL,
max_alloc_size integer DEFAULT 0 CONSTRAINT device_logs_max_alloc_size_not_null NOT NULL,
level public.device_log_level_enum DEFAULT 'any'::public.device_log_level_enum NOT NULL
);
--
-- Name: device_logs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.device_log ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.device_logs_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: device_sensor; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.device_sensor (
id integer NOT NULL,
device_id integer NOT NULL,
make text NOT NULL,
model text NOT NULL,
kind public.device_sensor_kind NOT NULL,
value double precision DEFAULT 0 NOT NULL,
unit text NOT NULL,
source public.device_sensor_source DEFAULT 'device'::public.device_sensor_source NOT NULL,
created_at timestamp without time zone DEFAULT date_trunc('second'::text, CURRENT_TIMESTAMP) NOT NULL
);
--
-- Name: device_sensor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.device_sensor ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.device_sensor_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: devices_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.device ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.devices_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: extension; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.extension (
id bigint NOT NULL,
name text NOT NULL,
label text NOT NULL,
logo_data jsonb DEFAULT '{}'::jsonb NOT NULL,
description text,
kind public.extension_kind_enum DEFAULT 'poll'::public.extension_kind_enum NOT NULL,
tags text[] DEFAULT '{}'::text[] NOT NULL,
static_body jsonb DEFAULT '{}'::jsonb CONSTRAINT extension_body_not_null NOT NULL,
fields jsonb DEFAULT '{}'::jsonb NOT NULL,
template text,
data jsonb DEFAULT '{}'::jsonb NOT NULL,
"interval" integer DEFAULT 1 NOT NULL,
unit public.extension_unit_enum DEFAULT 'none'::public.extension_unit_enum NOT NULL,
days text[] DEFAULT '{}'::text[] NOT NULL,
last_day_of_month boolean DEFAULT false NOT NULL,
start_at timestamp without time zone DEFAULT date_trunc('day'::text, CURRENT_TIMESTAMP) NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
mode text DEFAULT 'text'::text NOT NULL
);
--
-- Name: extension_device; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.extension_device (
id integer NOT NULL,
extension_id integer NOT NULL,
device_id integer NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: extension_device_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.extension_device ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.extension_device_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: extension_exchange; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.extension_exchange (
id bigint NOT NULL,
extension_id integer NOT NULL,
headers jsonb DEFAULT '{}'::jsonb NOT NULL,
verb public.extension_exchange_verb_enum DEFAULT 'get'::public.extension_exchange_verb_enum NOT NULL,
template text NOT NULL,
body jsonb DEFAULT '{}'::jsonb NOT NULL,
data jsonb DEFAULT '{}'::jsonb NOT NULL,
errors jsonb DEFAULT '{}'::jsonb NOT NULL,
refreshed_at timestamp without time zone,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: extension_exchange_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.extension_exchange ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.extension_exchange_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: extension_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.extension ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.extension_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: extension_model; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.extension_model (
id integer NOT NULL,
extension_id integer NOT NULL,
model_id integer NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: extension_model_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.extension_model ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.extension_model_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: firmware; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.firmware (
id integer CONSTRAINT firmwares_id_not_null NOT NULL,
version text CONSTRAINT firmwares_version_not_null NOT NULL,
kind text DEFAULT 'terminus'::text CONSTRAINT firmwares_kind_not_null NOT NULL,
attachment_data jsonb DEFAULT '{}'::jsonb CONSTRAINT firmwares_attachment_data_not_null NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP CONSTRAINT firmwares_created_at_not_null NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP CONSTRAINT firmwares_updated_at_not_null NOT NULL
);
--
-- Name: firmwares_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.firmware ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.firmwares_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: membership; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.membership (
id integer NOT NULL,
account_id integer NOT NULL,
user_id integer NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: membership_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.membership ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.membership_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: model; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.model (
id integer NOT NULL,
name text NOT NULL,
label text NOT NULL,
description text,
width integer DEFAULT 0 NOT NULL,
height integer DEFAULT 0 NOT NULL,
mime_type text DEFAULT 'image/png'::text NOT NULL,
colors integer DEFAULT 2 NOT NULL,
bit_depth integer DEFAULT 1 NOT NULL,
rotation integer DEFAULT 0 NOT NULL,
offset_x integer DEFAULT 0 NOT NULL,
offset_y integer DEFAULT 0 NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
kind text DEFAULT 'terminus'::text NOT NULL,
scale_factor double precision DEFAULT 1 NOT NULL,
css jsonb DEFAULT '{}'::jsonb NOT NULL,
default_palette_id integer
);
--
-- Name: model_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.model ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.model_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: model_palette; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.model_palette (
id integer NOT NULL,
model_id integer NOT NULL,
palette_id integer NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: model_palette_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.model_palette ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.model_palette_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: palette; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.palette (
id integer NOT NULL,
name text NOT NULL,
label text NOT NULL,
kind public.palette_kind DEFAULT 'terminus'::public.palette_kind NOT NULL,
grays integer DEFAULT 0 NOT NULL,
colors text[] DEFAULT '{}'::text[] NOT NULL,
framework_class text,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: palette_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.palette ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.palette_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: playlist; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.playlist (
id integer NOT NULL,
name text NOT NULL,
label text NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
current_item_id integer,
mode public.playlist_mode_enum DEFAULT 'automatic'::public.playlist_mode_enum NOT NULL
);
--
-- Name: playlist_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.playlist ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.playlist_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: playlist_item; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.playlist_item (
id integer NOT NULL,
playlist_id integer NOT NULL,
screen_id integer NOT NULL,
"position" integer NOT NULL,
repeat_interval integer DEFAULT 1 NOT NULL,
repeat_type public.playlist_item_repeat_type_enum DEFAULT 'none'::public.playlist_item_repeat_type_enum NOT NULL,
repeat_days integer[] DEFAULT '{}'::integer[] NOT NULL,
last_day_of_month boolean DEFAULT false NOT NULL,
start_at timestamp without time zone,
stop_at timestamp without time zone,
hidden_at timestamp without time zone,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: playlist_item_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.playlist_item ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.playlist_item_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.schema_migrations (
filename text NOT NULL
);
--
-- Name: screen; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.screen (
id integer NOT NULL,
model_id integer NOT NULL,
label text NOT NULL,
name text NOT NULL,
image_data jsonb DEFAULT '{}'::jsonb NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
device_id integer,
kind public.screen_kind_enum DEFAULT 'general'::public.screen_kind_enum NOT NULL,
template_id integer,
extension_id integer
);
--
-- Name: screen_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.screen ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.screen_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: screen_template; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.screen_template (
id integer NOT NULL,
name text NOT NULL,
label text NOT NULL,
content text NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: screen_template_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.screen_template ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.screen_template_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: user; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public."user" (
id bigint NOT NULL,
status_id integer DEFAULT 1 CONSTRAINT user_status_id_not_null1 NOT NULL,
name text,
email public.citext NOT NULL,
settings jsonb DEFAULT '{}'::jsonb NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
CONSTRAINT valid_email CHECK ((email OPERATOR(public.~) '^[^,;@ \r\n]+@[^,@; \r\n]+\.[^,@; \r\n]+$'::public.citext))
);
--
-- Name: user_active_session_key; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_active_session_key (
user_id bigint NOT NULL,
session_id text NOT NULL,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
last_use timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: user_authentication_audit_log; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_authentication_audit_log (
id bigint NOT NULL,
user_id bigint NOT NULL,
at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
message text NOT NULL,
metadata jsonb
);
--
-- Name: user_authentication_audit_log_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.user_authentication_audit_log ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.user_authentication_audit_log_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: user_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public."user" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.user_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: user_jwt_refresh_key; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_jwt_refresh_key (
id bigint NOT NULL,
user_id bigint NOT NULL,
key text NOT NULL,
deadline timestamp without time zone DEFAULT ((CURRENT_TIMESTAMP)::timestamp without time zone + make_interval(days => 1)) NOT NULL
);
--
-- Name: user_jwt_refresh_key_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.user_jwt_refresh_key ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.user_jwt_refresh_key_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: user_password_hash; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_password_hash (
id bigint NOT NULL,
password_hash text NOT NULL
);
--
-- Name: user_recovery_code; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_recovery_code (
id bigint NOT NULL,
code text NOT NULL
);
--
-- Name: user_remember_key; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_remember_key (
id bigint NOT NULL,
key text NOT NULL,
deadline timestamp without time zone DEFAULT ((CURRENT_TIMESTAMP)::timestamp without time zone + make_interval(days => 14)) NOT NULL
);
--
-- Name: user_status; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_status (
id integer NOT NULL,
name text NOT NULL
);
--
-- Name: user_status_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
ALTER TABLE public.user_status ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
SEQUENCE NAME public.user_status_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
--
-- Name: account account_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.account
ADD CONSTRAINT account_name_key UNIQUE (name);
--
-- Name: account account_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.account
ADD CONSTRAINT account_pkey PRIMARY KEY (id);
--
-- Name: device_log device_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device_log
ADD CONSTRAINT device_logs_pkey PRIMARY KEY (id);
--
-- Name: device_sensor device_sensor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device_sensor
ADD CONSTRAINT device_sensor_pkey PRIMARY KEY (id);
--
-- Name: device devices_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device
ADD CONSTRAINT devices_pkey PRIMARY KEY (id);
--
-- Name: extension_device extension_device_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_device
ADD CONSTRAINT extension_device_pkey PRIMARY KEY (id);
--
-- Name: extension_exchange extension_exchange_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_exchange
ADD CONSTRAINT extension_exchange_pkey PRIMARY KEY (id);
--
-- Name: extension extension_label_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension
ADD CONSTRAINT extension_label_key UNIQUE (label);
--
-- Name: extension_model extension_model_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_model
ADD CONSTRAINT extension_model_pkey PRIMARY KEY (id);
--
-- Name: extension extension_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension
ADD CONSTRAINT extension_name_key UNIQUE (name);
--
-- Name: extension extension_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension
ADD CONSTRAINT extension_pkey PRIMARY KEY (id);
--
-- Name: firmware firmwares_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.firmware
ADD CONSTRAINT firmwares_pkey PRIMARY KEY (id);
--
-- Name: firmware firmwares_version_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.firmware
ADD CONSTRAINT firmwares_version_key UNIQUE (version);
--
-- Name: membership membership_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.membership
ADD CONSTRAINT membership_pkey PRIMARY KEY (id);
--
-- Name: model model_label_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model
ADD CONSTRAINT model_label_key UNIQUE (label);
--
-- Name: model model_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model
ADD CONSTRAINT model_name_key UNIQUE (name);
--
-- Name: model_palette model_palette_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model_palette
ADD CONSTRAINT model_palette_pkey PRIMARY KEY (id);
--
-- Name: model model_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model
ADD CONSTRAINT model_pkey PRIMARY KEY (id);
--
-- Name: palette palette_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.palette
ADD CONSTRAINT palette_name_key UNIQUE (name);
--
-- Name: palette palette_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.palette
ADD CONSTRAINT palette_pkey PRIMARY KEY (id);
--
-- Name: playlist_item playlist_item_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist_item
ADD CONSTRAINT playlist_item_pkey PRIMARY KEY (id);
--
-- Name: playlist playlist_label_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist
ADD CONSTRAINT playlist_label_key UNIQUE (label);
--
-- Name: playlist playlist_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist
ADD CONSTRAINT playlist_name_key UNIQUE (name);
--
-- Name: playlist playlist_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist
ADD CONSTRAINT playlist_pkey PRIMARY KEY (id);
--
-- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.schema_migrations
ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (filename);
--
-- Name: screen screen_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen
ADD CONSTRAINT screen_pkey PRIMARY KEY (id);
--
-- Name: screen_template screen_template_label_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen_template
ADD CONSTRAINT screen_template_label_key UNIQUE (label);
--
-- Name: screen_template screen_template_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen_template
ADD CONSTRAINT screen_template_name_key UNIQUE (name);
--
-- Name: screen_template screen_template_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen_template
ADD CONSTRAINT screen_template_pkey PRIMARY KEY (id);
--
-- Name: user_active_session_key user_active_session_key_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_active_session_key
ADD CONSTRAINT user_active_session_key_pkey PRIMARY KEY (user_id, session_id);
--
-- Name: user_authentication_audit_log user_authentication_audit_log_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_authentication_audit_log
ADD CONSTRAINT user_authentication_audit_log_pkey PRIMARY KEY (id);
--
-- Name: user_jwt_refresh_key user_jwt_refresh_key_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_jwt_refresh_key
ADD CONSTRAINT user_jwt_refresh_key_pkey PRIMARY KEY (id);
--
-- Name: user_password_hash user_password_hash_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_password_hash
ADD CONSTRAINT user_password_hash_pkey PRIMARY KEY (id);
--
-- Name: user user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public."user"
ADD CONSTRAINT user_pkey PRIMARY KEY (id);
--
-- Name: user_recovery_code user_recovery_code_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_recovery_code
ADD CONSTRAINT user_recovery_code_pkey PRIMARY KEY (id, code);
--
-- Name: user_remember_key user_remember_key_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_remember_key
ADD CONSTRAINT user_remember_key_pkey PRIMARY KEY (id);
--
-- Name: user_status user_status_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_status
ADD CONSTRAINT user_status_name_key UNIQUE (name);
--
-- Name: user_status user_status_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_status
ADD CONSTRAINT user_status_pkey PRIMARY KEY (id);
--
-- Name: account_settings_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX account_settings_index ON public.account USING gin (settings);
--
-- Name: audit_at_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX audit_at_idx ON public.user_authentication_audit_log USING btree (at);
--
-- Name: audit_user_at_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX audit_user_at_idx ON public.user_authentication_audit_log USING btree (user_id, at);
--
-- Name: device_api_key_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX device_api_key_index ON public.device USING btree (api_key) WHERE (api_key IS NOT NULL);
--
-- Name: device_log_level_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_log_level_index ON public.device_log USING btree (level);
--
-- Name: device_logs_device_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_logs_device_id_index ON public.device_log USING btree (device_id);
--
-- Name: device_logs_special_function_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_logs_special_function_index ON public.device_log USING btree (command);
--
-- Name: device_logs_wake_reason_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_logs_wake_reason_index ON public.device_log USING btree (wake_reason);
--
-- Name: device_logs_wifi_status_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_logs_wifi_status_index ON public.device_log USING btree (wifi_status);
--
-- Name: device_sensor_device_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_sensor_device_id_index ON public.device_sensor USING btree (device_id);
--
-- Name: device_sensor_kind_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_sensor_kind_index ON public.device_sensor USING btree (kind);
--
-- Name: device_sensor_source_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX device_sensor_source_index ON public.device_sensor USING btree (source);
--
-- Name: extension_device_extension_id_device_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX extension_device_extension_id_device_id_index ON public.extension_device USING btree (extension_id, device_id);
--
-- Name: extension_model_extension_id_model_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX extension_model_extension_id_model_id_index ON public.extension_model USING btree (extension_id, model_id);
--
-- Name: extension_name_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX extension_name_index ON public.extension USING btree (name);
--
-- Name: extension_unit_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX extension_unit_index ON public.extension USING btree (unit);
--
-- Name: firmwares_attachment_data_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX firmwares_attachment_data_index ON public.firmware USING gin (attachment_data);
--
-- Name: membership_account_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX membership_account_id_index ON public.membership USING btree (account_id);
--
-- Name: membership_user_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX membership_user_id_index ON public.membership USING btree (user_id);
--
-- Name: model_kind_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX model_kind_index ON public.model USING btree (kind);
--
-- Name: model_label_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX model_label_index ON public.model USING btree (label);
--
-- Name: model_name_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX model_name_index ON public.model USING btree (name);
--
-- Name: model_palette_model_id_palette_id_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX model_palette_model_id_palette_id_index ON public.model_palette USING btree (model_id, palette_id);
--
-- Name: palette_kind_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX palette_kind_index ON public.palette USING btree (kind);
--
-- Name: playlist_item_playlist_id_position_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX playlist_item_playlist_id_position_index ON public.playlist_item USING btree (playlist_id, "position");
--
-- Name: playlist_item_repeat_type_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX playlist_item_repeat_type_index ON public.playlist_item USING btree (repeat_type);
--
-- Name: playlist_item_start_at_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX playlist_item_start_at_index ON public.playlist_item USING btree (start_at);
--
-- Name: playlist_item_stop_at_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX playlist_item_stop_at_index ON public.playlist_item USING btree (stop_at);
--
-- Name: playlist_mode_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX playlist_mode_index ON public.playlist USING btree (mode);
--
-- Name: screen_image_data_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX screen_image_data_index ON public.screen USING gin (image_data);
--
-- Name: screen_model_id_name_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX screen_model_id_name_index ON public.screen USING btree (model_id, name);
--
-- Name: screen_template_name_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX screen_template_name_index ON public.screen_template USING btree (name);
--
-- Name: user_email_index; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX user_email_index ON public."user" USING btree (email) WHERE (status_id = ANY (ARRAY[1, 2]));
--
-- Name: user_jwt_refresh_key_user_id_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX user_jwt_refresh_key_user_id_idx ON public.user_jwt_refresh_key USING btree (user_id);
--
-- Name: user_settings_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX user_settings_index ON public."user" USING gin (settings);
--
-- Name: device_log device_logs_device_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device_log
ADD CONSTRAINT device_logs_device_id_fkey FOREIGN KEY (device_id) REFERENCES public.device(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: device_sensor device_sensor_device_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device_sensor
ADD CONSTRAINT device_sensor_device_id_fkey FOREIGN KEY (device_id) REFERENCES public.device(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: device devices_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device
ADD CONSTRAINT devices_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.model(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: device devices_playlist_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.device
ADD CONSTRAINT devices_playlist_id_fkey FOREIGN KEY (playlist_id) REFERENCES public.playlist(id) ON UPDATE CASCADE ON DELETE SET NULL;
--
-- Name: extension_device extension_device_device_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_device
ADD CONSTRAINT extension_device_device_id_fkey FOREIGN KEY (device_id) REFERENCES public.device(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: extension_device extension_device_extension_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_device
ADD CONSTRAINT extension_device_extension_id_fkey FOREIGN KEY (extension_id) REFERENCES public.extension(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: extension_exchange extension_exchange_extension_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_exchange
ADD CONSTRAINT extension_exchange_extension_id_fkey FOREIGN KEY (extension_id) REFERENCES public.extension(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: extension_model extension_model_extension_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_model
ADD CONSTRAINT extension_model_extension_id_fkey FOREIGN KEY (extension_id) REFERENCES public.extension(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: extension_model extension_model_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.extension_model
ADD CONSTRAINT extension_model_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.model(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: membership membership_account_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.membership
ADD CONSTRAINT membership_account_id_fkey FOREIGN KEY (account_id) REFERENCES public.account(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: membership membership_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.membership
ADD CONSTRAINT membership_user_id_fkey FOREIGN KEY (user_id) REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: model model_default_palette_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model
ADD CONSTRAINT model_default_palette_id_fkey FOREIGN KEY (default_palette_id) REFERENCES public.palette(id) ON UPDATE CASCADE ON DELETE SET NULL;
--
-- Name: model_palette model_palette_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model_palette
ADD CONSTRAINT model_palette_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.model(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: model_palette model_palette_palette_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.model_palette
ADD CONSTRAINT model_palette_palette_id_fkey FOREIGN KEY (palette_id) REFERENCES public.palette(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: playlist playlist_current_item_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist
ADD CONSTRAINT playlist_current_item_id_fkey FOREIGN KEY (current_item_id) REFERENCES public.playlist_item(id) ON UPDATE CASCADE ON DELETE SET NULL;
--
-- Name: playlist_item playlist_item_playlist_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist_item
ADD CONSTRAINT playlist_item_playlist_id_fkey FOREIGN KEY (playlist_id) REFERENCES public.playlist(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: playlist_item playlist_item_screen_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.playlist_item
ADD CONSTRAINT playlist_item_screen_id_fkey FOREIGN KEY (screen_id) REFERENCES public.screen(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: screen screen_device_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen
ADD CONSTRAINT screen_device_id_fkey FOREIGN KEY (device_id) REFERENCES public.device(id) ON UPDATE CASCADE ON DELETE SET NULL;
--
-- Name: screen screen_extension_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen
ADD CONSTRAINT screen_extension_id_fkey FOREIGN KEY (extension_id) REFERENCES public.extension(id) ON UPDATE CASCADE ON DELETE SET NULL;
--
-- Name: screen screen_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen
ADD CONSTRAINT screen_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.model(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: screen screen_template_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.screen
ADD CONSTRAINT screen_template_id_fkey FOREIGN KEY (template_id) REFERENCES public.screen_template(id) ON UPDATE CASCADE ON DELETE SET NULL;
--
-- Name: user_active_session_key user_active_session_key_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_active_session_key
ADD CONSTRAINT user_active_session_key_user_id_fkey FOREIGN KEY (user_id) REFERENCES public."user"(id);
--
-- Name: user_authentication_audit_log user_authentication_audit_log_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_authentication_audit_log
ADD CONSTRAINT user_authentication_audit_log_user_id_fkey FOREIGN KEY (user_id) REFERENCES public."user"(id);
--
-- Name: user_jwt_refresh_key user_jwt_refresh_key_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_jwt_refresh_key
ADD CONSTRAINT user_jwt_refresh_key_user_id_fkey FOREIGN KEY (user_id) REFERENCES public."user"(id);
--
-- Name: user_password_hash user_password_hash_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_password_hash
ADD CONSTRAINT user_password_hash_id_fkey FOREIGN KEY (id) REFERENCES public."user"(id);
--
-- Name: user_recovery_code user_recovery_code_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_recovery_code
ADD CONSTRAINT user_recovery_code_id_fkey FOREIGN KEY (id) REFERENCES public."user"(id);
--
-- Name: user_remember_key user_remember_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_remember_key
ADD CONSTRAINT user_remember_key_id_fkey FOREIGN KEY (id) REFERENCES public."user"(id);
--
-- Name: user user_status_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public."user"
ADD CONSTRAINT user_status_id_fkey FOREIGN KEY (status_id) REFERENCES public.user_status(id);
--
-- PostgreSQL database dump complete
--
SET search_path TO "$user", public;
INSERT INTO schema_migrations (filename) VALUES
('20250305150912_create_devices.rb'),
('20250324153748_create_device_logs.rb'),
('20250401150503_add_device_proxy_column.rb'),
('20250408143435_add_device_firmware_update_column.rb'),
('20250423143027_add_device_log_max_alloc_size.rb'),
('20250429114320_remove_device_setup_at_column.rb'),
('20250429115049_change_device_column_text_types.rb'),
('20250602132300_add_device_sleep_period.rb'),
('20250609143532_add_firmwares.rb'),
('20250624130848_add_model.rb'),
('20250625103300_remove_model_timestamps.rb'),
('20250625123433_add_playlist.rb'),
('20250625123558_add_device_and_model_playlist_columns.rb'),
('20250625123645_change_device_sleep_end_column.rb'),
('20250625123721_add_screen.rb'),
('20250625123745_add_playlist_item.rb'),
('20250723140212_add_playlist_current_item_foreign_key.rb'),
('20250723140455_add_model_detail_columns.rb'),
('20250730094230_change_model_scale_factor_to_float.rb'),
('20250813132657_add_model_timestamps.rb'),
('20250821094444_add_model_kind_column.rb'),
('20250904100039_drop_model_scale_factor.rb'),
('20250908152041_rename_devices.rb'),
('20250908153411_rename_firmwares.rb'),
('20250908153842_rename_device_logs.rb'),
('20250909142527_alter_model_kinds.rb'),
('20250916111723_add_citext_extension.rb'),
('20250916111947_create_account.rb'),
('20250916112018_create_rodauth_user.rb'),
('20250916112035_create_rodauth_user_password_hash.rb'),
('20250916112116_create_membership.rb'),
('20251111140836_alter_screen_indexes.rb'),
('20251111145213_create_extension.rb'),
('20251111145306_create_extension_model.rb'),
('20251124163836_alter_model_kind_column.rb'),
('20251125115051_add_model_scale_factor_column.rb'),
('20251201105349_alter_model_firmware_columns.rb'),
('20251211152911_drop_model_published_at_column.rb'),
('20251215154654_add_playlist_mode_enum.rb'),
('20260106144016_alter_firmware_kind.rb'),
('20260126141642_alter_device_table_model_id_as_non_null.rb'),
('20260209163817_add_model_palette_ids_and_css_columns.rb'),
('20260217081447_create_device_sensor.rb'),
('20260219103153_create_extension_device.rb'),
('20260318132059_rename_model_palette_ids_column.rb'),
('20260318132419_add_palette.rb'),
('20260330115025_add_extension_mode_column.rb'),
('20260330145138_alter_device_battery_columns.rb'),
('20260331102522_add_device_wake_reason_column.rb'),
('20260401162632_alter_model_width_and_height_defaults.rb'),
('20260406095627_add_extension_exchange.rb'),
('20260420112319_add_model_palette_id.rb'),
('20260420112332_create_model_palette.rb'),
('20260421140616_remove_model_palette_names_column.rb'),
('20260508102145_add_device_synced_at_column.rb'),
('20260512100558_remove_device_proxy_column.rb'),
('20260512102800_remove_extension_poll_columns.rb'),
('20260512110409_rename_extension_body_column.rb'),
('20260601143521_add_device_columns.rb'),
('20260602112926_add_device_profile_and_compatibility_columns.rb'),
('20260608161124_add_device_wifi_band_column.rb'),
('20260609142235_add_screen_device_id_and_kind_columns.rb'),
('20260610103052_remove_device_api_key_and_friendly_id_columns.rb'),
('20260615094348_create_screen_template.rb'),
('20260618094125_add_screen_template_id_column.rb'),
('20260630091508_add_device_log_level_column.rb'),
('20260714090149_add_device_api_key_column.rb'),
('20260721160734_add_device_command_column.rb'),
('20260721160742_rename_device_log_function_columan_as_command.rb'),
('20260805142625_alter_screen_device_id_constraint.rb'),
('20260810100653_add_screen_extension_id_column.rb'),
('20260810102551_drop_screen_device_id_and_kind_index.rb');