bmc_hub/migrations/162_seed_manual_articles.sql
Christian ee8c517acc feat(manual): add admin interface for creating and editing manuals
- Implemented admin page for manual articles with fields for title, module, difficulty, tags, summary, content, steps, and relations.
- Added preview functionality for markdown content.
- Created list view for recent manuals with edit and view options.
- Developed detail view for individual manuals displaying content, steps, and related guides.
- Established database schema for manual articles, steps, and relations with appropriate indexing.
- Seeded initial manual articles and steps for core functionalities.
- Normalized newline characters in existing manual content.
- Added additional manuals and steps for enhanced user guidance.
2026-04-05 21:48:59 +02:00

165 lines
6.7 KiB
SQL

-- 162_seed_manual_articles.sql
-- Seed starter manuals for the Manual module (idempotent)
-- 1) Core manual articles
INSERT INTO manual_articles (title, slug, content, summary, module, tags, difficulty)
VALUES
(
'Hvordan opretter jeg en sag?',
'hvordan-opretter-jeg-en-sag',
'# Opret en ny sag\n\nDenne guide viser den hurtigste vej til at oprette en sag i BMC Hub.\n\n## Hurtig version\n1. Klik på plus-ikonet i topbaren.\n2. Vælg sag-oprettelse.\n3. Udfyld titel, kunde og beskrivelse.\n4. Sæt status og ansvarlig.\n5. Gem sagen.\n\n## Gode vaner\n- Brug en præcis titel, så sagen kan findes senere.\n- Tilføj tags med det samme for bedre filtrering.\n- Vælg korrekt prioritet fra start.',
'Trin-for-trin guide til at oprette en ny sag korrekt og hurtigt.',
'sag',
'["sag", "opgave", "ticket", "opret"]'::jsonb,
'beginner'
),
(
'Sådan finder og opdaterer du hardware',
'saadan-finder-og-opdaterer-du-hardware',
'# Find og opdater hardware\n\nGuiden hjælper dig med at finde et hardware-asset og opdatere nøglefelter uden fejl.\n\n## Hvad du bør opdatere\n- Serienummer\n- Ejer/kunde\n- Lokation\n- Status\n\n## Tip\nHvis du ikke finder enheden via navn, så prøv serienummer eller ESET UUID.',
'Find, verificer og opdatér hardwaredata i supportflowet.',
'hardware',
'["hardware", "asset", "enhed", "serial"]'::jsonb,
'beginner'
),
(
'Mail: sådan finder du en tråd og følger op',
'mail-saadan-finder-du-en-traad-og-foelger-op',
'# Mail workflow\n\nBrug denne guide når du skal finde en mailtråd, forstå historik og sende opfølgning.\n\n## Fokus\n- Find korrekt tråd\n- Tjek vedhæftninger\n- Link til sag\n- Send tydelig opfølgning\n\n## Tip\nBrug emnelinje + kunde som første filter ved søgning.',
'Praktisk flow for mailbehandling og opfølgning i Hubben.',
'mail',
'["mail", "email", "traad", "opfoelgning"]'::jsonb,
'advanced'
)
ON CONFLICT (slug) DO UPDATE
SET
title = EXCLUDED.title,
content = EXCLUDED.content,
summary = EXCLUDED.summary,
module = EXCLUDED.module,
tags = EXCLUDED.tags,
difficulty = EXCLUDED.difficulty,
updated_at = CURRENT_TIMESTAMP,
deleted_at = NULL;
-- 2) Steps for "Hvordan opretter jeg en sag?"
WITH target AS (
SELECT id FROM manual_articles WHERE slug = 'hvordan-opretter-jeg-en-sag' LIMIT 1
)
INSERT INTO manual_steps (manual_id, step_number, title, content, image_url, video_url)
SELECT
target.id,
s.step_number,
s.title,
s.content,
s.image_url,
s.video_url
FROM target
CROSS JOIN (
VALUES
(1, 'Klik på +', 'Brug plus-knappen i topbaren til at starte oprettelse af ny sag.', NULL, NULL),
(2, 'Vælg sag-oprettelse', 'Vælg oprettelsesflow for sag, ikke ordre eller anden type.', NULL, NULL),
(3, 'Udfyld kernefelter', 'Angiv titel, kunde, beskrivelse og ansvarlig bruger.', NULL, NULL),
(4, 'Sæt status og prioritet', 'Sæt status til fx "åben" og vælg en prioritet der passer.', NULL, NULL),
(5, 'Gem sagen', 'Klik gem og kontrollér at sagen vises i listen.', NULL, NULL)
) AS s(step_number, title, content, image_url, video_url)
ON CONFLICT (manual_id, step_number) DO UPDATE
SET
title = EXCLUDED.title,
content = EXCLUDED.content,
image_url = EXCLUDED.image_url,
video_url = EXCLUDED.video_url,
updated_at = CURRENT_TIMESTAMP;
-- 3) Steps for hardware manual
WITH target AS (
SELECT id FROM manual_articles WHERE slug = 'saadan-finder-og-opdaterer-du-hardware' LIMIT 1
)
INSERT INTO manual_steps (manual_id, step_number, title, content, image_url, video_url)
SELECT
target.id,
s.step_number,
s.title,
s.content,
s.image_url,
s.video_url
FROM target
CROSS JOIN (
VALUES
(1, 'Åbn hardwaremodulet', 'Gå til Support -> Hardware for at se assets.', NULL, NULL),
(2, 'Søg enheden frem', 'Søg på serienummer, model eller kundenavn.', NULL, NULL),
(3, 'Åbn detaljesiden', 'Klik på enheden og kontroller stamdata.', NULL, NULL),
(4, 'Ret felter', 'Opdater fx lokation, ejer og status og gem ændringer.', NULL, NULL)
) AS s(step_number, title, content, image_url, video_url)
ON CONFLICT (manual_id, step_number) DO UPDATE
SET
title = EXCLUDED.title,
content = EXCLUDED.content,
image_url = EXCLUDED.image_url,
video_url = EXCLUDED.video_url,
updated_at = CURRENT_TIMESTAMP;
-- 4) Steps for mail manual
WITH target AS (
SELECT id FROM manual_articles WHERE slug = 'mail-saadan-finder-du-en-traad-og-foelger-op' LIMIT 1
)
INSERT INTO manual_steps (manual_id, step_number, title, content, image_url, video_url)
SELECT
target.id,
s.step_number,
s.title,
s.content,
s.image_url,
s.video_url
FROM target
CROSS JOIN (
VALUES
(1, 'Åbn emailmodulet', 'Gå til Email i hovedmenuen.', NULL, NULL),
(2, 'Søg på tråd', 'Søg på emne, afsender eller kunde.', NULL, NULL),
(3, 'Kontrollér historik', 'Læs hele tråden og tjek vedhæftninger.', NULL, NULL),
(4, 'Link til sag', 'Link mailtråden til relevant sag hvis den findes.', NULL, NULL),
(5, 'Send opfølgning', 'Svar kort og tydeligt med næste handling og tidspunkt.', NULL, NULL)
) AS s(step_number, title, content, image_url, video_url)
ON CONFLICT (manual_id, step_number) DO UPDATE
SET
title = EXCLUDED.title,
content = EXCLUDED.content,
image_url = EXCLUDED.image_url,
video_url = EXCLUDED.video_url,
updated_at = CURRENT_TIMESTAMP;
-- 5) Context relations
INSERT INTO manual_relations (manual_id, related_module, related_tag, related_sag_type, related_manual_id)
SELECT m.id, 'sag', 'sag', 'ticket', NULL
FROM manual_articles m
WHERE m.slug = 'hvordan-opretter-jeg-en-sag'
AND NOT EXISTS (
SELECT 1 FROM manual_relations r
WHERE r.manual_id = m.id
AND COALESCE(r.related_module, '') = 'sag'
AND COALESCE(r.related_tag, '') = 'sag'
AND COALESCE(r.related_sag_type, '') = 'ticket'
);
INSERT INTO manual_relations (manual_id, related_module, related_tag, related_sag_type, related_manual_id)
SELECT m.id, 'hardware', 'hardware', NULL, NULL
FROM manual_articles m
WHERE m.slug = 'saadan-finder-og-opdaterer-du-hardware'
AND NOT EXISTS (
SELECT 1 FROM manual_relations r
WHERE r.manual_id = m.id
AND COALESCE(r.related_module, '') = 'hardware'
AND COALESCE(r.related_tag, '') = 'hardware'
);
INSERT INTO manual_relations (manual_id, related_module, related_tag, related_sag_type, related_manual_id)
SELECT m.id, 'mail', 'mail', NULL, NULL
FROM manual_articles m
WHERE m.slug = 'mail-saadan-finder-du-en-traad-og-foelger-op'
AND NOT EXISTS (
SELECT 1 FROM manual_relations r
WHERE r.manual_id = m.id
AND COALESCE(r.related_module, '') = 'mail'
AND COALESCE(r.related_tag, '') = 'mail'
);