Untitled
unknown
pgsql
25 days ago
9.9 kB
3
Indexable
-- Для получения корректных результатов нужно проставить значения в переменных ниже DO $$ DECLARE --Базовые настройки month_count INTEGER := 4; -- Количество месяцев в прошлом, для которых будут сгенерированы записи rows_needed INTEGER := 10; -- Количество записей, которые добавятся в месяц currency_code VARCHAR := 'USD'; -- Валюта, в которой будут записи ref_hall_id VARCHAR := 'cc65b3f8-e1aa-4eef-9502-1fd3f7435984'; -- ID холла v_event_payloads JSONB := jsonb_build_object( 'Deposit', '', 'FirstDeposit', '', 'GameSessionEnd', '', 'SbWin', '', 'SbLose', '', 'Withdraw', '' ); --Типы событий. Можно добавлять или исключать ненужные game_type_ids INTEGER[] := ARRAY [1,2,3]; -- ID типов игр для игровых событий. Могут быть пустыми --Игровые сессии min_gs_start_amount FLOAT := 10.0; -- Минимальное стартовое значение для игровой сессии max_gs_start_amount FLOAT := 1000.0; -- Максимальное стартовое значение для игровой сессии min_gs_end_amount FLOAT := 0.0; -- Минимальное конечное значение для игровой сессии max_gs_end_amount FLOAT := 500.0; -- Максимальное конечное значение для игровой сессии min_rm_tb_amount FLOAT := 10.0; -- Минимальное значение в real_money.total_bet для игровой сессии max_rm_tb_amount FLOAT := 100.0; -- Максимальное значение в real_money.total_bet для игровой сессии --Спортсбук min_sb_amount FLOAT := 10.0; -- Минимальное значение для спортсбука max_sb_amount FLOAT := 1000.0; -- Максимальное значение для спортсбука min_sb_total_bet_amount FLOAT := 0.0; -- Минимальное значение total bet для спортсбука max_sb_total_bet_amount FLOAT := 500.0; -- Максимальное значение total bet для спортсбука --Вывод min_wr_amount FLOAT := 10.0; -- Минимальное значение для запроса на вывод max_wr_amount FLOAT := 200.0; -- Минимальное значение для запроса на вывод --Служебные переменные. Менять значения не требуется cur_date TIMESTAMP; month_iterator INTEGER; v_event_type VARCHAR; event_payload JSONB; row_iterator INTEGER; BEGIN FOR month_iterator IN 1..month_count LOOP cur_date := NOW() - INTERVAL '1 MONTH' * (month_iterator - 1); FOR row_iterator IN 1..rows_needed LOOP WITH cte AS (SELECT jsonb_object_keys(v_event_payloads) as cte_event_type, row_number() over () as rn FROM (SELECT v_event_payloads) AS v(event_payloads)) SELECT cte_event_type INTO v_event_type FROM cte ORDER BY random() LIMIT 1; event_payload := v_event_payloads -> v_event_type; IF v_event_type IN ('Deposit', 'FirstDeposit', 'Withdraw') THEN event_payload := '[]'; END IF; IF v_event_type = 'GameSessionEnd' THEN event_payload := jsonb_build_object( 'startAmount', min_gs_start_amount + (RANDOM() * (max_gs_start_amount - min_gs_start_amount)), 'endAmount', min_gs_end_amount + (RANDOM() * (max_gs_end_amount - min_gs_end_amount)), 'realMoney', jsonb_build_object( 'totalBet', min_rm_tb_amount + (RANDOM() * (max_rm_tb_amount - min_rm_tb_amount)) ), 'gameTypeId', CASE WHEN game_type_ids IS NOT NULL AND array_length(game_type_ids, 1) > 0 THEN game_type_ids[array_lower(game_type_ids, 1) + floor(random() * (array_upper(game_type_ids, 1) - array_lower(game_type_ids, 1) + 1))] ELSE NULL END ); END IF; IF v_event_type = 'SbWin' THEN event_payload := jsonb_build_object( 'betslipId', ceil(RANDOM() * 1000), 'playerId', md5(random()::text || clock_timestamp()::text)::uuid, 'type', 'SbWin', 'amount', min_sb_amount + (RANDOM() * (max_sb_amount - min_sb_amount)), 'totalBetAmount', min_sb_total_bet_amount + (RANDOM() * (max_sb_total_bet_amount - min_sb_total_bet_amount)) ); END IF; IF v_event_type = 'SbLose' THEN event_payload := jsonb_build_object( 'betslipId', ceil(RANDOM() * 1000), 'playerId', md5(random()::text || clock_timestamp()::text)::uuid, 'type', 'SbLose', 'amount', min_sb_amount + (RANDOM() * (max_sb_amount - min_sb_amount)), 'totalBetAmount', min_sb_total_bet_amount + (RANDOM() * (max_sb_total_bet_amount - min_sb_total_bet_amount)) ); END IF; INSERT INTO event_2(id, hall_id, player_id, created_at, event_type, event_id, amount, currency_code, payload, event_date_time, updated_at) SELECT md5(random()::text || clock_timestamp()::text)::uuid, ref_hall_id::uuid, (SELECT player_id FROM referral_player WHERE referral_player.parent IS NOT NULL AND referral_player.hall_id = ref_hall_id::uuid ORDER BY RANDOM() LIMIT 1), cur_date, v_event_type, SUBSTRING( MD5(RANDOM()::text) || MD5(RANDOM()::text) || MD5(RANDOM()::text) || MD5(RANDOM()::text) FROM 1 FOR 64), (RANDOM() * 1000):: float, currency_code, event_payload, cur_date - ((random() * 30) * interval '1 day'), cur_date; INSERT INTO withdraw_request_2 (id, affiliate_player_id, hall_id, amount, status, updated_at, created_at, currency) SELECT md5(random()::text || clock_timestamp()::text)::uuid, (SELECT id FROM referral_player WHERE referral_player.parent IS NULL AND referral_player.hall_id = ref_hall_id::uuid ORDER BY RANDOM() LIMIT 1), ref_hall_id::uuid, ABS(min_wr_amount + (RANDOM() * (max_wr_amount - min_wr_amount))), (ARRAY ['success', 'error', 'error'])[ceil(random() * 3)], cur_date - ((random() * 30) * interval '1 day'), cur_date - ((random() * 30) * interval '1 day'), currency_code; END LOOP; END LOOP; END $$; (SELECT player_id FROM referral_player WHERE referral_player.parent IS NULL AND referral_player.hall_id = 'cc65b3f8-e1aa-4eef-9502-1fd3f7435984' ORDER BY RANDOM() LIMIT 1)
Editor is loading...
Leave a Comment