49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
import type { Incident } from "@/types/incident";
|
|
|
|
const DEFAULT_TEMPLATE = `# [TITRE]
|
|
|
|
**Date**: [DATE ISO]
|
|
**Service**: [SERVICE]
|
|
**Status**: [STATUS]
|
|
**Tags**: [TAGS]
|
|
|
|
## Symptom
|
|
[SYMPTOM]
|
|
|
|
## Root Cause
|
|
[ROOT_CAUSE]
|
|
|
|
## Fix Applied
|
|
[FIX]
|
|
`;
|
|
|
|
export function renderMarkdown(
|
|
incident: Incident,
|
|
template: string = DEFAULT_TEMPLATE
|
|
): string {
|
|
const tagList =
|
|
incident.tags.length > 0 ? incident.tags.join(", ") : "—";
|
|
|
|
return template
|
|
.replace("[TITRE]", incident.title || "Untitled")
|
|
.replace("[DATE ISO]", incident.createdAt)
|
|
.replace("[SERVICE]", incident.service || "—")
|
|
.replace("[STATUS]", incident.status)
|
|
.replace("[TAGS]", tagList)
|
|
.replace("[SYMPTOM]", incident.symptom || "—")
|
|
.replace("[ROOT_CAUSE]", incident.rootCause || "—")
|
|
.replace("[FIX]", incident.fix || "—");
|
|
}
|
|
|
|
export function incidentToFilename(incident: Incident): string {
|
|
const date = incident.createdAt.slice(0, 10);
|
|
const slug = incident.title
|
|
.toLowerCase()
|
|
.replace(/[^a-z0-9]+/g, "-")
|
|
.replace(/^-|-$/g, "")
|
|
.slice(0, 50);
|
|
return `incidents/${date}-${slug || "incident"}.md`;
|
|
}
|
|
|
|
export { DEFAULT_TEMPLATE };
|