Esempio n. 1
0
        public bool Save(ViewRoute viewRoute)
        {
            bool         result       = false;
            RouteManager routeManager = new RouteManager();

            try
            {
                RealmInstance.Write(() =>
                {
                    var route = !string.IsNullOrEmpty(viewRoute.Id) ? RealmInstance.Find <Route>(viewRoute.Id) : null;
                    if (null == route)
                    {
                        route = string.IsNullOrEmpty(viewRoute.Id) ? new Route() : new Route()
                        {
                            RouteId = viewRoute.Id
                        };
                        RealmInstance.Add(route);
                    }
                    route.Name        = viewRoute.Name;
                    route.Version     = viewRoute.Version;
                    route.CreateDate  = viewRoute.CreateDate;
                    route.IsShared    = viewRoute.IsShared;
                    route.IsPublished = viewRoute.IsPublished;
                    route.IsDeleted   = viewRoute.IsDeleted;
                    route.CreatorId   = viewRoute.CreatorId;
                    route.ObjVerHash  = viewRoute.ObjVerHash;
                    route.ImgFilename = viewRoute.ImgFilename;
                    route.Description = viewRoute.Description;
                    if (!route.ServerSynced.Equals(viewRoute.ServerSynced) && viewRoute.ServerSynced)
                    {
                        route.ServerSyncedDate = DateTimeOffset.Now;
                    }
                    route.ServerSynced = !string.IsNullOrEmpty(viewRoute.ObjVerHash) && viewRoute.ServerSynced;
                    viewRoute.Refresh(route.RouteId);
                });
                result = true;
            }
            catch (Exception e)
            {
                HandleError.Process("RouteManager", "AddRoute", e, false);
            }
            return(result);
        }
        internal string Save(ViewRoutePoint vpoint)
        {
            string       returnid     = string.Empty;
            RouteManager routeManager = new RouteManager();

            vpoint.Version = vpoint.Version == 0 ? 1 : vpoint.Version;
            if (vpoint.CreateDate.Year == 1)
            {
                HandleError.Process("RoutePointManager", "Save", new Exception("CreateDate is empty"), false, $"routePointId:[{vpoint.RoutePointId}]");
                //throw new Exception("create date year = 1");
                //vpoint.CreateDate = new DateTime(2020,1,1);
            }
            try
            {
                RealmInstance.Write(() =>
                {
                    RoutePoint point = !string.IsNullOrEmpty(vpoint.Id) ? RealmInstance.Find <RoutePoint>(vpoint.Id) : null;
                    if (point == null)
                    {
                        point = new RoutePoint();
                        point.RoutePointId = !string.IsNullOrEmpty(vpoint.Id) ? vpoint.Id: point.RoutePointId;
                        point.RouteId      = vpoint.RouteId;
                        point.MainRoute    = routeManager.GetRouteById(vpoint.RouteId);
                        if (point.MainRoute != null)
                        {
                            point.MainRoute.Points.Add(point);//?
                        }
                        else
                        {
                            HandleError.Process("RoutePointManager", "SavePoint", new Exception($"routeId:{vpoint.RouteId}, pointId:{vpoint.Id}"), false);
                        }
                        RealmInstance.Add(point);
                    }
                    else
                    {
                        //point = _realmInstance.Find<RoutePoint>(vpoint.Id);
                    }

                    if (point.Version != vpoint.Version)
                    {
                        //нужно для того, чтобы синхронизация обнаружила отличия от сервера и проверила версии с последующей отправкой изменений на сервер
                        point.MainRoute.ObjVerHash = string.Empty;
                    }
                    returnid          = point.RoutePointId;
                    point.Address     = vpoint.Address;
                    point.Description = vpoint.Description;
                    point.Latitude    = vpoint.Latitude;
                    point.Longitude   = vpoint.Longitude;
                    point.Name        = vpoint.Name;
                    point.UpdateDate  = DateTime.Now;
                    point.Version     = vpoint.Version;
                    point.IsDeleted   = vpoint.IsDeleted;
                    point.CreateDate  = vpoint.CreateDate;
                    point.MediaObjects.Clear();
                    foreach (var media in vpoint.MediaObjects)
                    {
                        point.MediaObjects.Add(media);
                    }
                });
            }
            catch (Exception e)
            {
                HandleError.Process("RoutePointManager", "AddRoutePoint", e, false);
            }
            return(returnid);
        }