- 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.
164 lines
6.7 KiB
SQL
164 lines
6.7 KiB
SQL
-- 164_seed_manual_articles_more.sql
|
|
-- Seed additional manuals for sag/mail/workflow usage (idempotent)
|
|
|
|
-- 1) Additional manual articles
|
|
INSERT INTO manual_articles (title, slug, content, summary, module, tags, difficulty)
|
|
VALUES
|
|
(
|
|
'Sådan bruger du tags i sager',
|
|
'saadan-bruger-du-tags-i-sager',
|
|
'# Brug tags aktivt i sager\n\nTags gør det nemmere at filtrere, finde og automatisere sager.\n\n## Når du opretter en sag\n- Tilføj mindst ét type-tag\n- Tilføj evt. brand-tag\n- Undgå dubletter og næsten-identiske tags\n\n## Efterfølgende\n- Brug tag-filter i lister\n- Hold tags opdateret når sagen ændrer retning',
|
|
'Guide til bedre struktur og hurtigere søgning med tags i sag-modulet.',
|
|
'sag',
|
|
'["sag", "tags", "filtrering", "workflow"]'::jsonb,
|
|
'beginner'
|
|
),
|
|
(
|
|
'Sådan linker du mail til sag',
|
|
'saadan-linker-du-mail-til-sag',
|
|
'# Link mailtråde til sager\n\nNår mail og sag er koblet, får du bedre historik og hurtigere opfølgning.\n\n## Hvornår skal du linke\n- Når mailen handler om en eksisterende sag\n- Når der opstår ny opgave i tråden\n\n## Fordel\nHele teamet kan se samme kontekst uden at lede i flere moduler.',
|
|
'Praktisk flow for at koble email-tråde korrekt til sager.',
|
|
'mail',
|
|
'["mail", "sag", "link", "email", "ticket"]'::jsonb,
|
|
'beginner'
|
|
),
|
|
(
|
|
'Reminders og deferred status i sag-modulet',
|
|
'reminders-og-deferred-status-i-sag-modulet',
|
|
'# Brug reminders og deferred korrekt\n\nReminders og deferred hjælper med at holde fokus på det rigtige tidspunkt.\n\n## Reminder bruges til\n- Næste handling på bestemt dato\n- Husk-opgaver uden statusskifte\n\n## Deferred bruges til\n- Vent på ekstern part\n- Genåbn eller aktiver ved bestemt status-trigger\n\n## Best practice\nSkriv altid kort hvorfor sagen er deferred, så næste kollega kan tage over.',
|
|
'Guide til at styre ventende sager med reminders og deferred triggers.',
|
|
'sag',
|
|
'["sag", "reminder", "deferred", "status", "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: tags i sager
|
|
WITH target AS (
|
|
SELECT id FROM manual_articles WHERE slug = 'saadan-bruger-du-tags-i-sager' 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 en sag', 'Gå til sagens detaljeside hvor tags kan redigeres.', NULL, NULL),
|
|
(2, 'Tilføj relevante tags', 'Tilføj type-tag og evt. brand-tag der matcher problemstillingen.', NULL, NULL),
|
|
(3, 'Undgå støj', 'Fjern overflødige tags så filtrering forbliver præcis.', NULL, NULL),
|
|
(4, 'Gem og verificér', 'Gem sagen og test filtrering i sag-listen med de nye tags.', 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: link mail til sag
|
|
WITH target AS (
|
|
SELECT id FROM manual_articles WHERE slug = 'saadan-linker-du-mail-til-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, 'Find mailtråden', 'Åbn emailmodulet og søg den relevante tråd frem.', NULL, NULL),
|
|
(2, 'Vælg korrekt sag', 'Match tråden med den sag, der allerede indeholder konteksten.', NULL, NULL),
|
|
(3, 'Opret link', 'Link mailen til sagen via den relevante handling i UI.', NULL, NULL),
|
|
(4, 'Bekræft historik', 'Kontrollér at mailaktivitet nu kan ses fra sagen.', 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: reminders/deferred
|
|
WITH target AS (
|
|
SELECT id FROM manual_articles WHERE slug = 'reminders-og-deferred-status-i-sag-modulet' 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, 'Vurder om sagen skal vente', 'Afgør om sagen reelt er blokeret af ekstern handling.', NULL, NULL),
|
|
(2, 'Sæt deferred/reminder', 'Vælg deferred trigger eller reminder-dato afhængigt af behov.', NULL, NULL),
|
|
(3, 'Skriv kort begrundelse', 'Notér hvad der ventes på, og hvem der ejer næste skridt.', NULL, NULL),
|
|
(4, 'Følg op ved trigger', 'Når trigger rammer, genaktiver sagen og fortsæt workflowet.', 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', 'tags', 'ticket', NULL
|
|
FROM manual_articles m
|
|
WHERE m.slug = 'saadan-bruger-du-tags-i-sager'
|
|
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, '') = 'tags'
|
|
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, 'mail', 'email', NULL, NULL
|
|
FROM manual_articles m
|
|
WHERE m.slug = 'saadan-linker-du-mail-til-sag'
|
|
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, '') = 'email'
|
|
);
|
|
|
|
INSERT INTO manual_relations (manual_id, related_module, related_tag, related_sag_type, related_manual_id)
|
|
SELECT m.id, 'sag', 'deferred', 'ticket', NULL
|
|
FROM manual_articles m
|
|
WHERE m.slug = 'reminders-og-deferred-status-i-sag-modulet'
|
|
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, '') = 'deferred'
|
|
AND COALESCE(r.related_sag_type, '') = 'ticket'
|
|
);
|