228 lines
8.2 KiB
PL/PgSQL
228 lines
8.2 KiB
PL/PgSQL
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||
|
||
CREATE TABLE IF NOT EXISTS files (
|
||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
file_type VARCHAR(30) NOT NULL,
|
||
file_name VARCHAR(50) NOT NULL,
|
||
extension VARCHAR(10) NOT NULL,
|
||
streamer_id INTEGER NOT NULL,
|
||
entity VARCHAR(50) NOT NULL DEFAULT 'widget',
|
||
created_at TIMESTAMP DEFAULT NOW(),
|
||
size FLOAT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS widgets (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_id INTEGER NOT NULL,
|
||
template_id INTEGER,
|
||
group_id INTEGER NOT NULL DEFAULT 1,
|
||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||
name VARCHAR(50) NOT NULL,
|
||
image UUID REFERENCES files(id) ON DELETE CASCADE,
|
||
audio UUID REFERENCES files(id) ON DELETE CASCADE,
|
||
duration INTEGER NOT NULL,
|
||
min_amount INTEGER NOT NULL,
|
||
max_amount INTEGER NOT NULL,
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS targets (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_id INTEGER NOT NULL,
|
||
text TEXT NOT NULL,
|
||
amount INTEGER NOT NULL,
|
||
collected INTEGER DEFAULT 0,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS donats (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_id INTEGER NOT NULL,
|
||
widget_id INTEGER REFERENCES widgets(id) NOT NULL,
|
||
order_id UUID NOT NULL,
|
||
target_id INTEGER REFERENCES targets(id),
|
||
paid_time TIMESTAMP,
|
||
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
||
text TEXT NOT NULL,
|
||
amount INTEGER NOT NULL,
|
||
donat_user TEXT NOT NULL,
|
||
accepted_time TIMESTAMP,
|
||
rejected_time TIMESTAMP,
|
||
show_name BOOLEAN NOT NULL DEFAULT TRUE,
|
||
show_text BOOLEAN NOT NULL DEFAULT TRUE,
|
||
play_content BOOLEAN NOT NULL DEFAULT TRUE,
|
||
showed_time TIMESTAMP,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS donate_pages (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_login VARCHAR(255) NOT NULL,
|
||
streamer_id INTEGER NOT NULL,
|
||
description TEXT DEFAULT '',
|
||
text_after_donat TEXT DEFAULT '',
|
||
avatar UUID REFERENCES files(id) ON DELETE CASCADE,
|
||
background_img UUID REFERENCES files(id) ON DELETE CASCADE,
|
||
head_img UUID REFERENCES files(id) ON DELETE CASCADE,
|
||
profile_avatar BOOLEAN NOT NULL DEFAULT 'true',
|
||
page_background TEXT DEFAULT '#13161E'
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS moderation (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_id INTEGER NOT NULL,
|
||
enable BOOLEAN DEFAULT FALSE,
|
||
duration INTEGER NOT NULL DEFAULT 40
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS filters (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_id INTEGER NOT NULL,
|
||
enable_links BOOLEAN DEFAULT FALSE
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS filters_words (
|
||
id SERIAL PRIMARY KEY,
|
||
donat_filter_id INTEGER NOT NULL REFERENCES filters(id),
|
||
word TEXT NOT NULL
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS voice_settings (
|
||
id SERIAL PRIMARY KEY,
|
||
streamer_id INTEGER NOT NULL,
|
||
enable BOOLEAN DEFAULT FALSE,
|
||
voice_speed VARCHAR(20) NOT NULL DEFAULT 'medium',
|
||
scenery TEXT DEFAULT 'after_donat',
|
||
voice_sound_percent INTEGER NOT NULL,
|
||
min_price INTEGER NOT NULL
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS languages (
|
||
id SERIAL PRIMARY KEY,
|
||
iso_code TEXT DEFAULT '',
|
||
ru_name TEXT DEFAULT '',
|
||
en_name TEXT DEFAULT ''
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS voices_languages (
|
||
id SERIAL PRIMARY KEY,
|
||
voice_setting_id INTEGER NOT NULL REFERENCES voice_settings(id),
|
||
language_id INTEGER NOT NULL REFERENCES languages(id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS streamers_widgets_pages (
|
||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
streamer_id INTEGER NOT NULL
|
||
);
|
||
|
||
CREATE OR REPLACE FUNCTION update_updated_at()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
NEW.updated_at = NOW();
|
||
RETURN NEW;
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
CREATE TRIGGER widgets_updated_at_trigger
|
||
BEFORE UPDATE ON widgets
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE update_updated_at();
|
||
|
||
CREATE TRIGGER donats_updated_at_trigger
|
||
BEFORE UPDATE ON donats
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE update_updated_at();
|
||
|
||
CREATE TRIGGER targets_updated_at_trigger
|
||
BEFORE UPDATE ON targets
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE update_updated_at();
|
||
|
||
|
||
-- Вставка default_avatar.png
|
||
INSERT INTO public.files (id, file_type, file_name, extension, streamer_id, size, entity)
|
||
VALUES (
|
||
'25b2b94c-e5e6-49e4-9f40-d8814f632847',
|
||
'image/png',
|
||
'default_avatar.png',
|
||
'.png',
|
||
0,
|
||
1024, -- Пример размера файла в байтах
|
||
'donat_page' -- Опционально, если файл связан с donate_pages
|
||
);
|
||
|
||
-- Вставка default_background.png
|
||
INSERT INTO public.files (id, file_type, file_name, extension, streamer_id, size, entity)
|
||
VALUES (
|
||
'56527f54-87c0-4f4d-92b5-df6cb61b27d4',
|
||
'image/png',
|
||
'default_background.png',
|
||
'.png',
|
||
0,
|
||
2048,
|
||
'donat_page'
|
||
);
|
||
|
||
-- Вставка default_head.png
|
||
INSERT INTO public.files (id, file_type, file_name, extension, streamer_id, size, entity)
|
||
VALUES (
|
||
'fef345e0-ec9a-4c68-8f2a-dcccf660e640',
|
||
'image/png',
|
||
'default_head.png',
|
||
'.png',
|
||
0,
|
||
512,
|
||
'donat_page'
|
||
);
|
||
|
||
|
||
INSERT INTO public.files (id, file_type, file_name, extension, streamer_id, size, entity)
|
||
VALUES (
|
||
'f84afcbf-2193-48de-af18-403660b8d10c',
|
||
'image/gif',
|
||
'default_widget_img.gif',
|
||
'.gif',
|
||
0,
|
||
512,
|
||
'widget'
|
||
);
|
||
|
||
INSERT INTO public.files (id, file_type, file_name, extension, streamer_id, size, entity)
|
||
VALUES (
|
||
'7d45d22f-91e5-44da-8e3b-88caa87b0054',
|
||
'audio/mpeg',
|
||
'default_sound_widget.mp3',
|
||
'.mp3',
|
||
0,
|
||
512,
|
||
'widget'
|
||
);
|
||
|
||
INSERT INTO public.widgets (id, streamer_id, name, image, audio, duration, min_amount, max_amount)
|
||
VALUES (
|
||
0,
|
||
0,
|
||
'Default widget',
|
||
'f84afcbf-2193-48de-af18-403660b8d10c',
|
||
'fef345e0-ec9a-4c68-8f2a-dcccf660e640',
|
||
10,
|
||
0,
|
||
9999999
|
||
);
|
||
|
||
|
||
INSERT INTO languages (id, iso_code, ru_name, en_name)
|
||
VALUES
|
||
(1, 'en', 'Английский', 'English'),
|
||
(2, 'ru', 'Русский', 'Russian'),
|
||
(3, 'es', 'Испанский', 'Spanish'),
|
||
(4, 'fr', 'Французский', 'French'),
|
||
(5, 'de', 'Немецкий', 'German'),
|
||
(6, 'zh', 'Китайский', 'Chinese'),
|
||
(7, 'ja', 'Японский', 'Japanese'),
|
||
(8, 'it', 'Итальянский', 'Italian'),
|
||
(9, 'pt', 'Португальский', 'Portuguese'),
|
||
(10, 'ar', 'Арабский', 'Arabic'); |