feat(m9/T26a): read-only inheritance resolve service + GetResolvedTemplateMembersCommand

This commit is contained in:
Joseph Doherty
2026-06-18 12:14:24 -04:00
parent 1ca2e0b130
commit 26e2cdef23
5 changed files with 720 additions and 0 deletions
@@ -244,6 +244,7 @@ public class ManagementActor : ReceiveActor
UpdateTemplateCommand cmd => await HandleUpdateTemplate(sp, cmd, user.Username),
DeleteTemplateCommand cmd => await HandleDeleteTemplate(sp, cmd, user.Username),
ValidateTemplateCommand cmd => await HandleValidateTemplate(sp, cmd),
GetResolvedTemplateMembersCommand cmd => await HandleGetResolvedTemplateMembers(sp, cmd),
// Template members
AddTemplateAttributeCommand cmd => await HandleAddAttribute(sp, cmd, user.Username),
@@ -599,6 +600,20 @@ public class ManagementActor : ReceiveActor
return validationResult;
}
/// <summary>
/// Read-only authoring resolve (M9/T26a): returns the effective inherited
/// member set for a template — computed fresh from the full inheritance
/// chain — plus a staleness summary. Loads every template (children
/// eager-loaded) so the resolver can walk an arbitrary-depth chain; never
/// mutates stored rows.
/// </summary>
private static async Task<object?> HandleGetResolvedTemplateMembers(IServiceProvider sp, GetResolvedTemplateMembersCommand cmd)
{
var repo = sp.GetRequiredService<ITemplateEngineRepository>();
var allTemplates = await repo.GetAllTemplatesAsync();
return TemplateInheritanceResolver.Resolve(cmd.TemplateId, allTemplates);
}
// ========================================================================
// Template folder handlers
// ========================================================================