bmc_hub/fix_telefoni_per_krag_numbers.sql
Christian 71f6372496 feat: Implement bug reporting feature with screenshot support
- Added a new modal for reporting bugs, including fields for describing the issue and attaching files.
- Implemented backend API for creating bug reports, including rate limiting and metadata logging.
- Introduced a new database table to track bug report submissions for auditing purposes.
- Enhanced the frontend to capture screenshots automatically and allow manual file uploads.
- Added error handling and user feedback for the bug reporting process.
- Updated existing templates and scripts to integrate the new bug reporting functionality.
2026-05-05 19:13:54 +02:00

91 lines
4.0 KiB
PL/PgSQL

-- Fix malformed caller numbers for Per Krag's Yealink phone.
--
-- Run via:
-- podman exec -i bmc-hub-postgres-prod psql -U bmc_hub -d hubdb_v2 -f /dev/stdin < fix_telefoni_per_krag_numbers.sql
BEGIN;
-- STEP 1: Fix any remaining numbers that still have the 1857220892 suffix
-- (threshold lowered from >15 to >10 to catch shorter corrupted numbers)
UPDATE telefoni_opkald
SET ekstern_nummer = CASE
-- Too few remaining digits → NULL
WHEN (length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10) <= 3
THEN NULL
-- 8 remaining digits = Danish number → +45 prefix
WHEN (length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10) = 8
THEN '+45' || left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
-- Other length → keep + prefix
ELSE '+' || left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
END
WHERE regexp_replace(ekstern_nummer, '[^0-9]', '', 'g') LIKE '%1857220892'
AND length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) > 10;
-- STEP 2: Fix numbers that were previously half-patched: '+' + exactly 8 digits.
-- '+[8 digits]' is not valid E.164 (minimum 9 digits needed), so these are
-- Danish numbers that lost their +45 prefix during the first patch.
UPDATE telefoni_opkald
SET ekstern_nummer = '+45' || regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')
WHERE ekstern_nummer ~ '^\+[0-9]{8}$';
-- Verify: show any remaining suspicious numbers for this user
SELECT id, started_at, ekstern_nummer
FROM telefoni_opkald t
JOIN users u ON u.user_id = t.bruger_id
WHERE u.full_name ILIKE '%per krag%'
ORDER BY started_at DESC
LIMIT 20;
COMMIT;
-- Preview what will be changed
SELECT
id,
ekstern_nummer AS before,
CASE
WHEN (length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10) < 4
THEN NULL
WHEN (length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10) = 8
THEN '+45' || left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
WHEN ekstern_nummer LIKE '+%'
THEN '+' || left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
ELSE left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
END AS after
FROM telefoni_opkald
WHERE regexp_replace(ekstern_nummer, '[^0-9]', '', 'g') LIKE '%1857220892'
AND length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) > 15
ORDER BY started_at DESC;
-- Apply the fix
UPDATE telefoni_opkald
SET ekstern_nummer = CASE
-- Strip last 10 digits (the local SIP suffix)
WHEN (length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10) < 4
THEN NULL
-- 8 remaining digits = Danish number → prefix +45
WHEN (length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10) = 8
THEN '+45' || left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
-- Otherwise keep original + prefix
WHEN ekstern_nummer LIKE '+%'
THEN '+' || left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
ELSE left(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g'),
length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) - 10)
END
WHERE regexp_replace(ekstern_nummer, '[^0-9]', '', 'g') LIKE '%1857220892'
AND length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) > 15;
SELECT concat('Retter ', count(*), ' rækker') AS resultat
FROM telefoni_opkald
WHERE regexp_replace(ekstern_nummer, '[^0-9]', '', 'g') LIKE '%1857220892'
AND length(regexp_replace(ekstern_nummer, '[^0-9]', '', 'g')) > 15;
COMMIT;