using System; using System.Collections.Generic; namespace Yavsc.Api.Client; /// /// A single billable line of an estimate, mirroring the JSON shape of /// the server-side Yavsc.Models.Billing.CommandLine entity. /// public sealed class EstimateLineDto { public long Id { get; set; } public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public int Count { get; set; } = 1; public decimal UnitaryCost { get; set; } public long EstimateId { get; set; } public string Currency { get; set; } = "EUR"; } /// /// Estimate payload exchanged with the api/v1/estimate routes /// (EstimateApiController). and /// are always initialised: the server-side /// entity reads them from non-nullable string properties and a null /// list would break its serialisation. /// public sealed class EstimateDto { public long Id { get; set; } public long? CommandId { get; set; } public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public List Bill { get; set; } = new(); public List AttachedGraphics { get; set; } = new(); public List AttachedFiles { get; set; } = new(); public string? OwnerId { get; set; } public string ClientId { get; set; } = string.Empty; public string CommandType { get; set; } = string.Empty; public DateTime ProviderValidationDate { get; set; } public DateTime ClientValidationDate { get; set; } /// /// Signatures already captured against this estimate (Pro and/or /// Client), as returned with the estimate payload. Each carries the /// PostIt wire-format /// so the pad can repaint a previously drawn signature on reopen /// without a second round-trip. Null/empty when nobody has signed. /// public List? Signatures { get; set; } } /// /// One stored signature on an estimate, mirroring the JSON shape of /// the server-side Yavsc.Models.Billing.Signature entity. The /// are the same PostIt wire-format payload that /// was captured and are loaded back into the pad unchanged. /// public sealed class EstimateSignatureDto { public long Id { get; set; } public long EstimateId { get; set; } /// /// Who signed, as the integer value of the server /// SignatureType enum: 0 = Pro (provider), /// 1 = Client. Matched by value on the client so PostIt /// need not reference the server enum. /// public int Type { get; set; } public int CoordinateMax { get; set; } public DateTime CapturedAtUtc { get; set; } public int[]? Strokes { get; set; } } /// /// Response of a successful estimate creation /// (Ok(new { estimate.Id, estimate.Bill })). /// public sealed class EstimateCreatedDto { public long Id { get; set; } public List Bill { get; set; } = new(); }