public Entities.Context.EntityContext ConvertJsonRouteToEntityContext(Models.InputJson.Json inputJson)
        {
            Models.Route jsonRoute = inputJson.Route;

            Entities.Route entityRoute = new Entities.Route
            {
                Id         = jsonRoute.Id,
                Name       = jsonRoute.Name,
                ActiveDays = Enum.Parse <Days>(jsonRoute.ActiveDays),
                StartDate  = jsonRoute.StartDate,
                EndDate    = jsonRoute.EndDate,
                Rides      = MapJsonRides(jsonRoute.Rides, inputJson).ToList()
            };

            Entities.Context.EntityContext entityContext = new Entities.Context.EntityContext()
            {
                Routes = new List <Entities.Route>
                {
                    entityRoute
                },
                PassengerStationRelations = MapJsonPassengersStations(inputJson)
            };

            return(entityContext);
        }
        public async Task CompareRoutesAndGetAudit(string originalJsonPath, string updatedJsonPath, string outputJsonPath)
        {
            Models.InputJson.Json originalJson = await _jsonFileService.ReadJsonFileAsync(originalJsonPath);

            Models.InputJson.Json updatedJson = await _jsonFileService.ReadJsonFileAsync(updatedJsonPath);

            Entities.Context.EntityContext originalContext = _jsonToEntityConverter.ConvertJsonRouteToEntityContext(originalJson);
            Entities.Context.EntityContext updatedContext  = _jsonToEntityConverter.ConvertJsonRouteToEntityContext(updatedJson);

            IList <Entities.Audit.AuditLogEntry> auditLogEntries =
                _entityContextComparerService.CompareContextsAndGetAudits(originalContext, updatedContext);

            Models.OutputJson.OutputJson outputJson = MapAuditEntitiesToOutputJson(auditLogEntries);

            await _jsonFileService.WriteJsonFileAsync(outputJson, originalJsonPath);
        }
        public IList <Entities.Audit.AuditLogEntry> CompareContextsAndGetAudits(
            Entities.Context.EntityContext originalContext, Entities.Context.EntityContext updatedContext)
        {
            List <Entities.Audit.AuditLogEntry> auditLogEntries = new List <Entities.Audit.AuditLogEntry>();

            for (int i = 0; i < originalContext.Routes.Count && i < updatedContext.Routes.Count; i++)
            {
                auditLogEntries.AddRange(_routeComparerService.Compare(originalContext.Routes[i],
                                                                       updatedContext.Routes[i]));
            }

            auditLogEntries = auditLogEntries
                              .GroupBy(x => new
            {
                x.TypeOfChange,
                x.Planned,
                x.OriginalValue,
                x.NewValue
            })
                              .Select(x => x.ToList())
                              .SelectMany(x => x).ToList();

            return(auditLogEntries);
        }