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, play_content, showed_time, created_at, updated_at FROM donats WHERE streamer_id = @streamer_id AND rejected_time IS NULL ORDER BY created_at DESC LIMIT @limit OFFSET @offset; ` var GetDonatByOrderID = ` SELECT * 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, -- Поля для хед-изображения 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) 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 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;`