internal static Change FromApiEntity()

in src/YouTrackSharp/Issues/Change.cs [20:105]


        internal static Change FromApiEntity(ActivityItem entity)
        {
            var fieldChange = new FieldChange();

            switch (entity)
            {
                case CustomFieldActivityItem a:
                    fieldChange.Name = a.Field.Name ?? a.Field.Presentation;

                    fieldChange.From.Value = a.Removed == null
                        ? null
                        :
                        a.Removed.GetType().GetInterface(nameof(ICollection)) == null
                            ?
                            new JArray() {JToken.FromObject(a.Removed)}
                            : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null
                        ? null
                        :
                        a.Added.GetType().GetInterface(nameof(ICollection)) == null
                            ?
                            new JArray() {JToken.FromObject(a.Added)}
                            : JArray.FromObject(a.Added);
                    break;
                case IssueResolvedActivityItem a:
                    fieldChange.Name = "resolved";
                    fieldChange.From.Value = a.Removed == null ? null : new JArray() {JToken.FromObject(a.Removed)};
                    fieldChange.From.Value = a.Added == null ? null : new JArray() {JToken.FromObject(a.Added)};
                    break;
                case TextMarkupActivityItem a:
                    fieldChange.Name = a.Field.Name ?? a.Field.Presentation;
                    fieldChange.From.Value = a.Removed == null ? null : new JArray() {JToken.FromObject(a.Removed)};
                    fieldChange.To.Value = a.Added == null ? null : new JArray() {JToken.FromObject(a.Added)};
                    break;
                case VisibilityGroupActivityItem a:
                    fieldChange.Name = "permittedGroup";
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case VisibilityUserActivityItem a:
                    fieldChange.Name = "permittedUser";
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case SprintActivityItem a:
                    fieldChange.Name = a.Field.Name;
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case LinksActivityItem a:
                    fieldChange.Name = a.Field.Presentation;
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case AttachmentActivityItem a:
                    fieldChange.Name = a.Field.Presentation;
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case TagsActivityItem a:
                    fieldChange.Name = "tags";
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case VcsChangeActivityItem a:
                    fieldChange.Name = "vcs";
                    fieldChange.From.Value = a.Removed == null ? new JArray() : JArray.FromObject(a.Removed);
                    fieldChange.To.Value = a.Added == null ? new JArray() : JArray.FromObject(a.Added);
                    break;
                case ProjectActivityItem a:
                    fieldChange.Name = "project";
                    fieldChange.From.Value = a.Removed == null ? new JArray() : new JArray() {JObject.FromObject(a.Removed)};
                    fieldChange.To.Value = a.Added == null ? new JArray() : new JArray() {JObject.FromObject(a.Added)};
                    break;
            }
            
            var updaterName = new FieldChange();
            updaterName.Name = "updaterName";
            updaterName.To.Value = entity.Author?.Login;

            var updated = new FieldChange();
            updated.Name = "updated";
            updated.To.Value = entity.Timestamp;
            
            return new Change() {Fields = new List<FieldChange>(){fieldChange, updaterName, updated}};
        }