Initial curated itworx-knowledge-hub source from 3b1751d0d9dee551aa6994eee0093704dc334817
This commit is contained in:
commit
ad8ad252a9
825 files changed
+124216
No files matched your search
@@ -0,0 +1,43 @@
|
||||
using ItWorx.KnowledgeHub.Application.Knowledge.UseCases;
|
||||
using ItWorx.KnowledgeHub.Domain.Decisions;
|
||||
|
||||
namespace ItWorx.KnowledgeHub.Application.Decisions.UseCases;
|
||||
|
||||
public sealed record DecisionDetailResult(
|
||||
DecisionRecord Decision,
|
||||
PageDetailResult Page,
|
||||
string ETag,
|
||||
DecisionRecord? Supersedes,
|
||||
DecisionRecord? SupersededBy);
|
||||
|
||||
/// <summary>Assembles one ADR's full lineage view: its own lifecycle metadata, the
|
||||
/// linked page's rendered content, and — resolved by one extra lookup each, never a
|
||||
/// duplicated copy — the decision it supersedes and/or is superseded by
|
||||
/// (docs/16-runbooks-and-adrs.md: "Links are bidirectional").</summary>
|
||||
public sealed class GetDecisionUseCase(IDecisionRepository decisions, GetPageUseCase getPage)
|
||||
{
|
||||
public async Task<DecisionDetailResult?> ExecuteAsync(Guid decisionId, CancellationToken cancellationToken)
|
||||
{
|
||||
var decision = await decisions.FindAsync(decisionId, cancellationToken);
|
||||
if (decision is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var page = await getPage.ExecuteAsync(decision.PageId, cancellationToken);
|
||||
if (page is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var etag = await decisions.GetETagAsync(decisionId, cancellationToken) ?? string.Empty;
|
||||
var supersedes = decision.SupersedesDecisionId is { } supersedesId
|
||||
? await decisions.FindAsync(supersedesId, cancellationToken)
|
||||
: null;
|
||||
var supersededBy = decision.SupersededByDecisionId is { } supersededById
|
||||
? await decisions.FindAsync(supersededById, cancellationToken)
|
||||
: null;
|
||||
|
||||
return new DecisionDetailResult(decision, page, etag, supersedes, supersededBy);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user