581 lines
14 KiB
Go
581 lines
14 KiB
Go
package sql
|
|
|
|
import (
|
|
"donat-widget/internal/model"
|
|
"fmt"
|
|
)
|
|
|
|
var CreateWidget = `
|
|
INSERT INTO widgets (streamer_id, template_id, image, audio, duration, min_amount, max_amount, name)
|
|
VALUES (@streamer_id, @template_id, @image, @audio, @duration, @min_amount, @max_amount, @name)
|
|
RETURNING id;
|
|
`
|
|
|
|
var GetWidgetByStreamerID = `
|
|
SELECT * FROM widgets
|
|
WHERE streamer_id = (@streamer_id);
|
|
`
|
|
|
|
func UpdateMediaUrl(mediaType model.MediaType) string {
|
|
query := fmt.Sprintf(`
|
|
UPDATE widgets
|
|
SET %s = (@%s)
|
|
WHERE id = (@id)
|
|
`, mediaType, mediaType)
|
|
return query
|
|
}
|
|
|
|
var GetAllWidget = `
|
|
SELECT * FROM widgets
|
|
WHERE streamer_id = (@streamer_id);
|
|
`
|
|
|
|
func GetMediaUrl(mediaType model.MediaType) string {
|
|
query := fmt.Sprintf(`
|
|
SELECT %s
|
|
FROM widgets
|
|
WHERE id = (@id)
|
|
`, mediaType)
|
|
return query
|
|
}
|
|
|
|
var CreateDonat = `
|
|
INSERT INTO donats (streamer_id, widget_id, text, amount, donat_user, order_id, target_id)
|
|
VALUES (@streamer_id, @widget_id, @text, @amount, @donat_user, @order_id, @target_id)
|
|
RETURNING id;
|
|
`
|
|
var MarkDonatView = `
|
|
UPDATE donats
|
|
SET showed_time = now(), status = 'showed'
|
|
WHERE order_id = (@order_id);
|
|
`
|
|
var MarkDonatPaid = `
|
|
UPDATE donats
|
|
SET paid_time = now(), status = 'moderation'
|
|
WHERE order_id = (@order_id);
|
|
`
|
|
var GetDonatByStreamerID = `
|
|
SELECT
|
|
id,
|
|
widget_id,
|
|
streamer_id,
|
|
order_id,
|
|
target_id,
|
|
status,
|
|
text,
|
|
amount,
|
|
donat_user,
|
|
accepted_time,
|
|
show_name,
|
|
show_text,
|
|
paid_time,
|
|
play_content,
|
|
showed_time,
|
|
created_at,
|
|
updated_at
|
|
FROM donats
|
|
WHERE streamer_id = @streamer_id
|
|
AND rejected_time IS NULL
|
|
AND paid_time IS NOT NULL
|
|
ORDER BY created_at DESC
|
|
LIMIT @limit OFFSET @offset;
|
|
|
|
`
|
|
|
|
var GetDonatByOrderID = `
|
|
SELECT
|
|
id,
|
|
widget_id,
|
|
streamer_id,
|
|
order_id,
|
|
target_id,
|
|
status,
|
|
text,
|
|
amount,
|
|
donat_user,
|
|
accepted_time,
|
|
show_name,
|
|
show_text,
|
|
play_content,
|
|
showed_time,
|
|
created_at,
|
|
updated_at
|
|
FROM donats
|
|
WHERE order_id = (@order_id);
|
|
`
|
|
|
|
var CreateTarget = `
|
|
INSERT INTO targets (streamer_id, text, amount)
|
|
VALUES (@streamer_id, @text, @amount)
|
|
RETURNING id;
|
|
`
|
|
|
|
var GetAllTarget = `
|
|
SELECT * FROM targets
|
|
WHERE streamer_id = (@streamer_id);
|
|
`
|
|
var AddAmountToTarget = `
|
|
UPDATE targets
|
|
SET collected = collected + (@amount)
|
|
WHERE id = (@target_id);
|
|
`
|
|
|
|
var GetDonationPage = `
|
|
SELECT
|
|
dp.id,
|
|
dp.streamer_id,
|
|
dp.description,
|
|
dp.text_after_donat,
|
|
dp.streamer_login,
|
|
dp.profile_avatar,
|
|
dp.page_background,
|
|
|
|
-- Поля для хед-изображения
|
|
head_img.id AS head_img_id,
|
|
head_img.file_name AS head_img_file_name,
|
|
head_img.file_type AS head_img_type,
|
|
head_img.size AS head_img_size,
|
|
|
|
-- Поля для аватара
|
|
avatar.id AS avatar_id,
|
|
avatar.file_name AS avatar_file_name,
|
|
avatar.file_type AS avatar_type,
|
|
avatar.size AS avatar_img_size,
|
|
|
|
-- Поля для фона
|
|
background_img.id AS background_img_id,
|
|
background_img.file_name AS background_img_file_name,
|
|
background_img.file_type AS background_img_type,
|
|
background_img.size AS background_img_size
|
|
|
|
FROM donate_pages dp
|
|
LEFT JOIN files head_img ON dp.head_img = head_img.id
|
|
LEFT JOIN files avatar ON dp.avatar = avatar.id
|
|
LEFT JOIN files background_img ON dp.background_img = background_img.id
|
|
WHERE dp.streamer_id = (@streamer_id);
|
|
`
|
|
|
|
var GetDonationPageByLogin = `
|
|
SELECT
|
|
dp.id,
|
|
dp.streamer_id,
|
|
dp.description,
|
|
dp.text_after_donat,
|
|
dp.streamer_login,
|
|
dp.profile_avatar,
|
|
|
|
-- Поля для хед-изображения
|
|
head_img.id AS head_img_id,
|
|
head_img.file_name AS head_img_file_name,
|
|
head_img.file_type AS head_img_type,
|
|
head_img.size AS head_img_size,
|
|
|
|
-- Поля для аватара
|
|
avatar.id AS avatar_id,
|
|
avatar.file_name AS avatar_file_name,
|
|
avatar.file_type AS avatar_type,
|
|
avatar.size AS avatar_img_size,
|
|
|
|
-- Поля для фона
|
|
background_img.id AS background_img_id,
|
|
background_img.file_name AS background_img_file_name,
|
|
background_img.file_type AS background_img_type,
|
|
background_img.size AS background_img_size
|
|
|
|
FROM donate_pages dp
|
|
LEFT JOIN files head_img ON dp.head_img = head_img.id
|
|
LEFT JOIN files avatar ON dp.avatar = avatar.id
|
|
LEFT JOIN files background_img ON dp.background_img = background_img.id
|
|
WHERE dp.streamer_login = (@streamer_login);
|
|
`
|
|
|
|
var GetWidgetsByStreamerID = `
|
|
SELECT
|
|
w.id,
|
|
w.streamer_id,
|
|
w.template_id,
|
|
w.group_id,
|
|
w.name,
|
|
w.is_active,
|
|
img.id AS image_id,
|
|
img.file_name AS image_file_name,
|
|
img.file_type AS image_type,
|
|
audio.id AS audio_id,
|
|
audio.file_name AS audio_file_name,
|
|
audio.file_type AS audio_type,
|
|
w.duration,
|
|
w.min_amount,
|
|
w.max_amount,
|
|
w.created_at,
|
|
w.updated_at
|
|
FROM widgets w
|
|
LEFT JOIN files img ON w.image = img.id
|
|
LEFT JOIN files audio ON w.audio = audio.id
|
|
WHERE w.streamer_id = (@streamer_id);
|
|
`
|
|
|
|
var GetWidgetByID = `
|
|
SELECT
|
|
w.id,
|
|
w.streamer_id,
|
|
w.template_id,
|
|
w.group_id,
|
|
w.name,
|
|
img.id AS image_id,
|
|
img.file_name AS image_file_name,
|
|
img.file_type AS image_type,
|
|
audio.id AS audio_id,
|
|
audio.file_name AS audio_file_name,
|
|
audio.file_type AS audio_type,
|
|
w.duration,
|
|
w.min_amount,
|
|
w.created_at,
|
|
w.updated_at
|
|
FROM widgets w
|
|
LEFT JOIN files img ON w.image = img.id
|
|
LEFT JOIN files audio ON w.audio = audio.id
|
|
WHERE w.id = (@widget_id);
|
|
`
|
|
|
|
var AddNewFile = `
|
|
INSERT INTO files (streamer_id, file_name, file_type, extension, entity, size)
|
|
VALUES
|
|
(@streamer_id, @file_name, @file_type, @extension, @entity, @size)
|
|
RETURNING id;
|
|
`
|
|
|
|
var GetWidgetByName = `SELECT id FROM widgets WHERE (
|
|
streamer_id = @streamer_id AND
|
|
name = @name);
|
|
`
|
|
|
|
var FileById = `SELECT file_name, streamer_id, file_type FROM files WHERE id = (@id);`
|
|
|
|
var FileInfoById = `SELECT id, file_type, file_name, extension, streamer_id, entity, created_at, size
|
|
FROM files WHERE id = (@id);`
|
|
|
|
var AudioFilesWidgets = `
|
|
SELECT *
|
|
FROM files
|
|
WHERE streamer_id = @streamer_id
|
|
AND entity = @entity
|
|
AND file_type LIKE 'audio%';
|
|
`
|
|
|
|
var ImageFilesWidgets = `
|
|
SELECT *
|
|
FROM files
|
|
WHERE streamer_id = @streamer_id
|
|
AND entity = @entity
|
|
AND file_type LIKE 'image%';
|
|
`
|
|
var UpdateWidget = `
|
|
UPDATE widgets
|
|
SET
|
|
duration = COALESCE(@duration, duration),
|
|
min_amount = COALESCE(@min_amount, min_amount),
|
|
max_amount = COALESCE(@max_amount, max_amount),
|
|
is_active = COALESCE(@is_active, is_active),
|
|
image = COALESCE(@image, image),
|
|
audio = COALESCE(@audio, audio),
|
|
name = COALESCE(@name, name)
|
|
WHERE id = @id;
|
|
`
|
|
|
|
var GetWidgetID = `
|
|
SELECT id FROM widgets WHERE id = (@widget_id) AND streamer_id = (@streamer_id) LIMIT 1;
|
|
`
|
|
|
|
var UpdateDonatePage = `
|
|
UPDATE donate_pages
|
|
SET
|
|
background_img = COALESCE(@background_img, background_img),
|
|
head_img = COALESCE(@head_img, head_img),
|
|
avatar = COALESCE(@avatar, avatar),
|
|
description = COALESCE(@description, description),
|
|
text_after_donat = COALESCE(@text_after_donation, text_after_donat),
|
|
profile_avatar = COALESCE(@profile_avatar, profile_avatar),
|
|
page_background = COALESCE(@page_background, page_background)
|
|
WHERE streamer_id = @streamer_id
|
|
RETURNING *;
|
|
`
|
|
|
|
var GetVoiceSettingsByStreamerID = `
|
|
SELECT
|
|
voice_speed,
|
|
scenery,
|
|
voice_sound_percent,
|
|
min_price,
|
|
enable
|
|
FROM voice_settings
|
|
WHERE streamer_id = (@streamer_id);
|
|
`
|
|
|
|
var GetLanguagesByStreamerID = `
|
|
SELECT
|
|
l.id AS language_id,
|
|
l.iso_code,
|
|
l.ru_name,
|
|
l.en_name
|
|
FROM languages l
|
|
JOIN voices_languages vl ON l.id = vl.language_id
|
|
JOIN voice_settings vs ON vl.voice_setting_id = vs.id
|
|
WHERE vs.streamer_id = (@streamer_id);
|
|
`
|
|
|
|
var DeleteLanguage = `
|
|
DELETE FROM voices_languages
|
|
WHERE voice_setting_id = @voice_setting_id;
|
|
`
|
|
|
|
var InsertLanguagesForVoiceSetting = `
|
|
INSERT INTO voices_languages (voice_setting_id, language_id)
|
|
VALUES %s;
|
|
`
|
|
|
|
const GetLangByISO = `
|
|
SELECT id FROM languages WHERE iso_code = ANY(@iso_codes);
|
|
`
|
|
|
|
var VoiceIDByStreamer = `
|
|
SELECT id FROM voice_settings WHERE streamer_id = @streamer_id;
|
|
|
|
`
|
|
|
|
var UpdateVoiceSettings = `
|
|
UPDATE voice_settings
|
|
SET
|
|
enable = COALESCE(@enable, enable),
|
|
voice_speed = COALESCE(@voice_speed, voice_speed),
|
|
scenery = COALESCE(@scenery, scenery),
|
|
voice_sound_percent = COALESCE(@voice_sound_percent, voice_sound_percent),
|
|
min_price = COALESCE(@min_price, min_price)
|
|
WHERE streamer_id = @streamer_id;
|
|
`
|
|
|
|
var GetFilterSettings = `
|
|
SELECT id, enable_links FROM filters WHERE streamer_id = @streamer_id;
|
|
`
|
|
|
|
var GetFilterWords = `
|
|
SELECT word FROM filters_words WHERE donat_filter_id = @donat_filter_id;`
|
|
|
|
var UpdateFilterSettings = `
|
|
UPDATE filters SET enable_links = @enable_links WHERE streamer_id = @streamer_id;`
|
|
|
|
var InsertFilteredWordsBatch = `
|
|
INSERT INTO filters_words (donat_filter_id, word)
|
|
VALUES %s;
|
|
`
|
|
|
|
var GetFilterIdByStreamerID = `
|
|
SELECT id FROM filters WHERE streamer_id = @streamer_id;`
|
|
|
|
var DeleteFilteredWordsBatch = `
|
|
DELETE FROM filters_words
|
|
USING filters
|
|
WHERE filters.id = filters_words.donat_filter_id
|
|
AND filters_words.donat_filter_id = @donat_filter_id
|
|
AND filters_words.word = ANY(@words);
|
|
`
|
|
|
|
var UpdateModeration = `
|
|
UPDATE moderation
|
|
SET
|
|
enable = COALESCE(@enable, enable),
|
|
duration = COALESCE(@duration, duration)
|
|
WHERE streamer_id = @streamer_id;
|
|
`
|
|
var GetModeration = `
|
|
SELECT enable, duration FROM moderation WHERE streamer_id = @streamer_id;`
|
|
|
|
const GetDonationsLast24Hours = `
|
|
SELECT
|
|
DATE_TRUNC('hour', created_at) AS date, -- Группировка по часам
|
|
SUM(amount) AS amount_collected,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '24 hours'
|
|
GROUP BY
|
|
DATE_TRUNC('hour', created_at) -- Группировка по часам
|
|
ORDER BY
|
|
date;
|
|
`
|
|
|
|
const GetDonationsLast7Days = `
|
|
SELECT
|
|
DATE(created_at) AS date, -- Группировка по дням
|
|
SUM(amount) AS amount_collected,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '7 days'
|
|
GROUP BY
|
|
DATE(created_at) -- Группировка по дням
|
|
ORDER BY
|
|
date;
|
|
`
|
|
|
|
const GetDonationsLastMonth = `
|
|
SELECT
|
|
DATE(created_at) AS date, -- Группировка по дням
|
|
SUM(amount) AS amount_collected,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '1 month'
|
|
GROUP BY
|
|
DATE(created_at) -- Группировка по дням
|
|
ORDER BY
|
|
date;
|
|
`
|
|
|
|
const GetDonationsLastYear = `
|
|
SELECT
|
|
DATE_TRUNC('month', created_at) AS date, -- Группировка по месяцам
|
|
SUM(amount) AS amount_collected,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '1 year'
|
|
GROUP BY
|
|
DATE_TRUNC('month', created_at) -- Группировка по месяцам
|
|
ORDER BY
|
|
date;
|
|
`
|
|
|
|
const GetDonationsSummaryLast24Hours = `
|
|
SELECT
|
|
SUM(amount) AS total_amount,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '24 hours';
|
|
`
|
|
|
|
const GetDonationsSummaryLast7Days = `
|
|
SELECT
|
|
SUM(amount) AS total_amount,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '7 days';
|
|
`
|
|
|
|
const GetDonationsSummaryLastMonth = `
|
|
SELECT
|
|
SUM(amount) AS total_amount,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '1 month';
|
|
`
|
|
|
|
const GetDonationsSummaryLastYear = `
|
|
SELECT
|
|
SUM(amount) AS total_amount,
|
|
COUNT(*) AS donations_count
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
streamer_id = @streamer_id
|
|
AND created_at >= NOW() - INTERVAL '1 year';
|
|
`
|
|
|
|
const GetLastModeration = `
|
|
SELECT
|
|
id,
|
|
target_id,
|
|
status,
|
|
text,
|
|
amount,
|
|
donat_user,
|
|
accepted_time,
|
|
show_name,
|
|
show_text,
|
|
play_content,
|
|
created_at,
|
|
updated_at
|
|
FROM
|
|
public.donats
|
|
WHERE
|
|
status = 'moderation' AND
|
|
streamer_id = @streamer_id
|
|
ORDER BY
|
|
updated_at DESC
|
|
LIMIT 1;
|
|
`
|
|
|
|
var ModerateDonat = `
|
|
UPDATE donats
|
|
SET
|
|
accepted_time = @accepted_time,
|
|
rejected_time = @rejected_time,
|
|
show_text = @show_text,
|
|
play_content = @play_content,
|
|
show_name = @show_name,
|
|
status = @status
|
|
WHERE id = @donat_id AND streamer_id = @streamer_id AND status = 'moderation'`
|
|
|
|
var DeleteWidget = `
|
|
DELETE FROM widgets WHERE id = @widget_id AND streamer_id = @streamer_id;`
|
|
|
|
var InitDonatePage = `INSERT INTO donate_pages
|
|
(streamer_id, streamer_login, description, text_after_donat, avatar, background_img, head_img)
|
|
VALUES
|
|
(@streamer_id, @streamer_login, '', '', @avatar, @background_img, @head_img);`
|
|
|
|
var InitFilters = `
|
|
INSERT INTO filters (streamer_id)
|
|
VALUES (@streamer_id)
|
|
`
|
|
var InitModeration = `
|
|
INSERT INTO moderation (streamer_id)
|
|
VALUES (@streamer_id)`
|
|
|
|
var InitVoiceSettings = `
|
|
INSERT INTO voice_settings
|
|
(streamer_id, voice_speed, voice_sound_percent, min_price)
|
|
VALUES
|
|
(@streamer_id, @voice_speed, @voice_sound_percent, @min_price)`
|
|
|
|
var GetPlayingDonats = `
|
|
SELECT w.duration, w.image, w.audio, d.text, d.amount, d.order_id, d.donat_user, d.
|
|
FROM widgets AS w
|
|
INNER JOIN
|
|
donats AS d ON d.widget_id = w.id
|
|
WHERE d.streamer_id = @streamer_id
|
|
AND d.status = 'accepted_moderation'
|
|
AND d.showed_time IS NULL
|
|
ORDER BY d.accepted_time ASC
|
|
LIMIT 1;
|
|
;`
|
|
|
|
var CreateStreamerWidgetPage = `
|
|
INSERT INTO streamers_widgets_pages (streamer_id) VALUES (@streamer_id)`
|
|
|
|
var GetStreamerWidgetPage = `
|
|
SELECT id FROM streamers_widgets_pages WHERE streamer_id = @streamer_id`
|
|
|
|
var GetStreamerIdByWidgetPageId = `
|
|
SELECT streamer_id FROM streamers_widgets_pages WHERE id = @widget_page_id`
|
|
|
|
var UpdateStreamerLogin = `
|
|
UPDATE donate_pages SET streamer_login = @streamer_login WHERE streamer_id = @streamer_id
|
|
RETURNING streamer_login;`
|