namespace GB5Shared.Storage
{
///
/// Context object passed to when building the physical
/// storage path from a template. All token values must be set by the caller before resolving.
///
public class StoragePathContext
{
/// Tenant/client identifier (LoginDTO.ClientId).
public string ClientId { get; set; } = string.Empty;
///
/// Human-readable entity type code (e.g., "EMPLOYEE", "PO", "INVOICE").
/// Used in directory partitioning — keep short and filesystem-safe.
///
public string ObjectTypeCode { get; set; } = string.Empty;
/// Entity instance ID (e.g., EmployeeId, PurchaseOrderId).
public int ObjectId { get; set; }
/// Year component of the file date (for year-partitioned layouts).
public int Year { get; set; }
/// Month component (1–12) of the file date.
public int Month { get; set; }
///
/// Opaque unique identifier for this specific file (GUID-based, no guessable pattern).
/// Used as the file name segment so the physical name is never user-controlled.
///
public string AttachmentId { get; set; } = string.Empty;
/// File extension including the leading dot, e.g. ".pdf", ".jpg".
public string Ext { get; set; } = string.Empty;
/// Document type code for optional category-based partitioning.
public string DocumentTypeCode { get; set; } = string.Empty;
}
}