using System; using System.Text.Json.Serialization; namespace Adaptation.FileHandlers.json.WorkItems; internal class WorkItem { #nullable enable [JsonConstructor] public WorkItem(DateTime? activatedDate, string areaPath, string? assignedTo, long? businessValue, DateTime changedDate, DateTime? closedDate, int commentCount, DateTime createdDate, string description, long? effort, int id, string iterationPath, int? parent, int? priority, Relation[]? relations, long? remainingWork, string? requester, DateTime? resolvedDate, int revision, long? riskReductionMinusOpportunityEnablement, DateTime? startDate, string state, long? storyPoints, string tags, DateTime? targetDate, long? timeCriticality, string title, string? violation, long? weightedShortestJobFirst, string workItemType) { ActivatedDate = activatedDate; AreaPath = areaPath; AssignedTo = assignedTo; BusinessValue = businessValue; ChangedDate = changedDate; ClosedDate = closedDate; CommentCount = commentCount; CreatedDate = createdDate; Description = description; Effort = effort; Id = id; IterationPath = iterationPath; Parent = parent; Priority = priority; Relations = relations; RemainingWork = remainingWork; Requester = requester; ResolvedDate = resolvedDate; Revision = revision; RiskReductionMinusOpportunityEnablement = riskReductionMinusOpportunityEnablement; StartDate = startDate; State = state; StoryPoints = storyPoints; Tags = tags; TargetDate = targetDate; TimeCriticality = timeCriticality; Title = title; Violation = violation; WeightedShortestJobFirst = weightedShortestJobFirst; WorkItemType = workItemType; } public override string ToString() => $"{Id} - {WorkItemType} - {Title}"; public static WorkItem Get(WorkItem workItem, Relation[] relations) { WorkItem result = new(activatedDate: workItem.ActivatedDate, areaPath: workItem.AreaPath, assignedTo: workItem.AssignedTo, businessValue: workItem.BusinessValue, changedDate: workItem.ChangedDate, closedDate: workItem.ClosedDate, commentCount: workItem.CommentCount, createdDate: workItem.CreatedDate, description: workItem.Description, effort: workItem.Effort, id: workItem.Id, iterationPath: workItem.IterationPath, parent: workItem.Parent, priority: workItem.Priority, relations: relations, remainingWork: workItem.RemainingWork, requester: workItem.Requester, resolvedDate: workItem.ResolvedDate, revision: workItem.Revision, riskReductionMinusOpportunityEnablement: workItem.RiskReductionMinusOpportunityEnablement, startDate: workItem.StartDate, state: workItem.State, storyPoints: workItem.StoryPoints, tags: workItem.Tags, targetDate: workItem.TargetDate, timeCriticality: workItem.TimeCriticality, title: workItem.Title, violation: workItem.Violation, weightedShortestJobFirst: workItem.WeightedShortestJobFirst, workItemType: workItem.WorkItemType); return result; } public static WorkItem? GetWithOutRelations(WorkItem? workItem) { WorkItem? result = workItem is null ? null : new(activatedDate: workItem.ActivatedDate, areaPath: workItem.AreaPath, assignedTo: workItem.AssignedTo, businessValue: workItem.BusinessValue, changedDate: workItem.ChangedDate, closedDate: workItem.ClosedDate, commentCount: workItem.CommentCount, createdDate: workItem.CreatedDate, description: workItem.Description, effort: workItem.Effort, id: workItem.Id, iterationPath: workItem.IterationPath, parent: workItem.Parent, priority: workItem.Priority, relations: Array.Empty(), remainingWork: workItem.RemainingWork, requester: workItem.Requester, resolvedDate: workItem.ResolvedDate, revision: workItem.Revision, riskReductionMinusOpportunityEnablement: workItem.RiskReductionMinusOpportunityEnablement, startDate: workItem.StartDate, state: workItem.State, storyPoints: workItem.StoryPoints, tags: workItem.Tags, targetDate: workItem.TargetDate, timeCriticality: workItem.TimeCriticality, title: workItem.Title, violation: workItem.Violation, weightedShortestJobFirst: workItem.WeightedShortestJobFirst, workItemType: workItem.WorkItemType); return result; } [JsonPropertyName("ActivatedDate")] public DateTime? ActivatedDate { get; } [JsonPropertyName("AreaPath")] public string AreaPath { get; } [JsonPropertyName("AssignedTo")] public string? AssignedTo { get; } [JsonPropertyName("BusinessValue")] public long? BusinessValue { get; } [JsonPropertyName("ChangedDate")] public DateTime ChangedDate { get; } [JsonPropertyName("ClosedDate")] public DateTime? ClosedDate { get; } [JsonPropertyName("CommentCount")] public int CommentCount { get; } [JsonPropertyName("CreatedDate")] public DateTime CreatedDate { get; } [JsonPropertyName("Description")] public string Description { get; } [JsonPropertyName("Effort")] public long? Effort { get; } [JsonPropertyName("Id")] public int Id { get; } [JsonPropertyName("IterationPath")] public string IterationPath { get; } [JsonPropertyName("Parent")] public int? Parent { get; } [JsonPropertyName("Priority")] public int? Priority { get; } [JsonPropertyName("Relations")] public Relation[]? Relations { get; } [JsonPropertyName("RemainingWork")] public long? RemainingWork { get; } [JsonPropertyName("Requester")] public string? Requester { get; } [JsonPropertyName("ResolvedDate")] public DateTime? ResolvedDate { get; } [JsonPropertyName("Revision")] public int Revision { get; } [JsonPropertyName("RiskReductionMinusOpportunityEnablement")] public long? RiskReductionMinusOpportunityEnablement { get; } [JsonPropertyName("StartDate")] public DateTime? StartDate { get; } [JsonPropertyName("State")] public string State { get; } [JsonPropertyName("StoryPoints")] public long? StoryPoints { get; } [JsonPropertyName("Tags")] public string Tags { get; } [JsonPropertyName("TargetDate")] public DateTime? TargetDate { get; } [JsonPropertyName("TimeCriticality")] public long? TimeCriticality { get; } [JsonPropertyName("Title")] public string Title { get; } [JsonPropertyName("Violation")] public string? Violation { get; } [JsonPropertyName("WeightedShortestJobFirst")] public long? WeightedShortestJobFirst { get; } [JsonPropertyName("WorkItemType")] public string WorkItemType { get; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(WorkItem))] internal partial class WorkItemSourceGenerationContext : JsonSerializerContext { } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(WorkItem[]))] internal partial class WorkItemCollectionSourceGenerationContext : JsonSerializerContext { }