Fix frontmatter parsing for quote workflow

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Paul Schneider 2026-10-19 16:53:58 +01:00
commit ed51e62b29
Signed by: notazof
GPG key ID: AD4B9B545FBD7D12
3 changed files with 60 additions and 12 deletions

View file

@ -2,7 +2,7 @@ namespace Yavsc.Server.Models.Billing;
public class FrontmatterOffreResult
{
public string Formulaire { get; set; }
public string Devis { get; set; }
public string Corps { get; set; } // le Markdown sans l'en-tête
public string Formulaire { get; set; } = string.Empty;
public string Devis { get; set; } = string.Empty;
public string Corps { get; set; } = string.Empty; // le Markdown sans l'en-tête
}

View file

@ -6,8 +6,8 @@ namespace Yavsc.Server.Services;
public static class FrontmatterParser
{
public const string YamlHeader = "---\n";
public const string YamlSeparator = "\n---";
public const string YamlHeader = "---";
public const string YamlSeparator = "---";
private static readonly IDeserializer _deserializer =
new DeserializerBuilder()
@ -17,17 +17,23 @@ public static class FrontmatterParser
public static FrontmatterOffreResult Parse(string markdown)
{
// Le contenu doit commencer par ----
if (!markdown.TrimStart().StartsWith(YamlHeader, StringComparison.Ordinal))
ArgumentNullException.ThrowIfNull(markdown);
var trimmed = markdown.TrimStart();
if (!trimmed.StartsWith(YamlHeader, StringComparison.Ordinal))
return new FrontmatterOffreResult { Corps = markdown };
var parts = markdown.Substring(YamlHeader.Length).Trim().Split(new[] { YamlSeparator }, 2,
StringSplitOptions.None);
var afterOpeningMarker = trimmed[YamlHeader.Length..];
var parts = afterOpeningMarker
.Split(new[] { "\r\n---", "\n---" }, 2, StringSplitOptions.None);
if (parts.Length < 2)
return new FrontmatterOffreResult { Corps = markdown };
var yamlBlock = parts[0];
var corps = parts[1];
var meta = _deserializer.Deserialize<FrontmatterOffreResult>(yamlBlock);
var yamlBlock = parts[0].Trim();
var corps = parts[1].TrimStart();
var meta = _deserializer.Deserialize<FrontmatterOffreResult>(yamlBlock) ?? new FrontmatterOffreResult();
meta.Corps = corps;
return meta;
}