Add Community Formula Library feature
Companies can now share their custom formula templates to a platform-wide community library. Other tenants can browse, preview, and import formulas as independent local copies. Includes attribution (source company name), "Inspired by" lineage for re-contributed formulas, import counts, own-formula badge, cascade diagram nullification, and AI assistant + help docs updates. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
namespace PowderCoating.Application.DTOs.Company;
|
||||
|
||||
// ── Browse / card display ──────────────────────────────────────────────────
|
||||
|
||||
/// <summary>Lean DTO for the community library browse grid card.</summary>
|
||||
public class FormulaLibraryCardDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string? Description { get; set; }
|
||||
public string OutputMode { get; set; } = "FixedRate";
|
||||
public string? Tags { get; set; }
|
||||
public string? IndustryHint { get; set; }
|
||||
public string SourceCompanyName { get; set; } = string.Empty;
|
||||
public int ImportCount { get; set; }
|
||||
public DateTime SharedAt { get; set; }
|
||||
public string? DiagramImagePath { get; set; }
|
||||
|
||||
/// <summary>Non-null when this formula was derived from another library entry.</summary>
|
||||
public int? InspiredByFormulaLibraryItemId { get; set; }
|
||||
public string? InspiredByName { get; set; }
|
||||
public string? InspiredByCompanyName { get; set; }
|
||||
|
||||
/// <summary>True when the current company has already imported this entry.</summary>
|
||||
public bool AlreadyImported { get; set; }
|
||||
|
||||
/// <summary>True when this formula was shared by the current browsing company.</summary>
|
||||
public bool IsOwnFormula { get; set; }
|
||||
}
|
||||
|
||||
// ── Full detail (import preview modal) ────────────────────────────────────
|
||||
|
||||
/// <summary>Full DTO used in the import preview modal — shows fields and formula.</summary>
|
||||
public class FormulaLibraryDetailDto : FormulaLibraryCardDto
|
||||
{
|
||||
public string FieldsJson { get; set; } = "[]";
|
||||
public string Formula { get; set; } = string.Empty;
|
||||
public decimal? DefaultRate { get; set; }
|
||||
public string? RateLabel { get; set; }
|
||||
public string? Notes { get; set; }
|
||||
public int FieldCount { get; set; }
|
||||
}
|
||||
|
||||
// ── Share from Company Settings ───────────────────────────────────────────
|
||||
|
||||
/// <summary>Submitted when a company admin shares one of their templates to the community library.</summary>
|
||||
public class ShareFormulaRequest
|
||||
{
|
||||
public int CustomItemTemplateId { get; set; }
|
||||
public string? Tags { get; set; }
|
||||
public string? IndustryHint { get; set; }
|
||||
}
|
||||
|
||||
// ── Company Settings list view ─────────────────────────────────────────────
|
||||
|
||||
/// <summary>Status of a template relative to the community library, shown in Company Settings.</summary>
|
||||
public class FormulaLibraryStatusDto
|
||||
{
|
||||
/// <summary>The FormulaLibraryItem Id, if this template has ever been shared.</summary>
|
||||
public int? LibraryItemId { get; set; }
|
||||
public bool IsPublished { get; set; }
|
||||
|
||||
/// <summary>Whether this template is eligible to be shared (original or modified import).</summary>
|
||||
public bool CanShare { get; set; }
|
||||
|
||||
/// <summary>Set when this template was imported; the name of the original library entry.</summary>
|
||||
public string? ImportedFromName { get; set; }
|
||||
public string? ImportedFromCompany { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user