Ejemplo n.º 1
0
        /// <summary>Cria ou altera um amigo.</summary>
        public void Put([FromBody] string token, [FromBody] AmigoData amigo)
        {
            // verifica token de acesso
            Shared.VerificarToken(token);

            // inicializa contexto de dados
            DadosAmigos dados = new DadosAmigos();

            // verifica se amigo ja existe
            Amigo entity = dados.Amigos.Where(entry => entry.IdAmigo == amigo.IdAmigo).SingleOrDefault();

            // cria ou altera o amigo
            if (entity == null)
            {
                // adiciona amigo
                entity = amigo.CopyProperties <Amigo>();
                dados.Amigos.AddObject(entity);

                //armazena alterações
                dados.SaveChanges();

                // recria cache
                Shared.CreateCache(dados, entity.IdAmigo);
            }
            else
            {
                // verifica se a latitude/longitude mudou
                bool recriarCache = false;
                if (entity.Latitude != amigo.Latitude ||
                    entity.Longitude != amigo.Longitude)
                {
                    recriarCache = true;
                }

                // altera atributos do amigo
                entity.Nome      = amigo.Nome;
                entity.Local     = amigo.Local;
                entity.Latitude  = amigo.Latitude;
                entity.Longitude = amigo.Longitude;

                //armazena alterações
                dados.SaveChanges();

                // recria cache
                if (recriarCache)
                {
                    Shared.CreateCache(dados, entity.IdAmigo);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>Apaga um amigo.</summary>
        public void Delete([FromBody] string token, [FromUri] int idAmigo)
        {
            // verifica token de acesso
            Shared.VerificarToken(token);

            // inicializa contexto de dados
            DadosAmigos dados = new DadosAmigos();

            // apaga cache
            Shared.ClearCache(dados, idAmigo);

            // apaga amigos
            IQueryable <Amigo> amigos = dados.Amigos.Where(entry => entry.IdAmigo == idAmigo);

            amigos.ForEach(entry => dados.DeleteObject(entry));

            //armazena alterações
            dados.SaveChanges();
        }
Ejemplo n.º 3
0
        /// <summary>Cria o cache de cálculo de distâncias de um amigo.</summary>
        public static void CreateCache(DadosAmigos dados, int idAmigo)
        {
            // apaga cache
            Shared.ClearCache(dados, idAmigo);

            // retorna amigos
            List <Amigo> amigos = dados.Amigos.ToList();
            Amigo        amigo  = amigos.Where(entry => entry.IdAmigo == idAmigo).SingleOrDefault();

            // verifica se amigo existe
            if (amigo == null)
            {
                return;
            }

            // remove o amigo de origem da coleção
            amigos.Remove(amigo);

            // enumera amigos de destino
            amigos.ForEach(entry =>
            {
                Utilities.CalculoDistancia calculo = Utilities.Distance((double)amigo.Latitude, (double)amigo.Longitude, (double)entry.Latitude, (double)entry.Longitude);

                // cria cache direto
                Cache cache = new Cache()
                {
                    IdAmigo   = entry.IdAmigo,
                    IdDestino = idAmigo,
                    Distancia = new Decimal(calculo.Kilometros)
                };

                // cria log do cálculo
                cache.Log = new Log()
                {
                    RadianosLatitudeOrigem  = new Decimal(calculo.RadianosOrigem),
                    RadianosLatitudeDestino = new Decimal(calculo.RadianosDestino),
                    RadianosThetaLongitude  = new Decimal(calculo.RadianosTheta),
                    Seno       = new Decimal(calculo.Seno),
                    Coseno     = new Decimal(calculo.Coseno),
                    Angulo     = new Decimal(calculo.Angulo),
                    Milhas     = new Decimal(calculo.Milhas),
                    Kilometros = new decimal(calculo.Kilometros)
                };

                // adiciona cache
                dados.Caches.AddObject(cache);

                // cria cache reverso
                cache = new Cache()
                {
                    IdAmigo   = idAmigo,
                    IdDestino = entry.IdAmigo,
                    Distancia = new Decimal(calculo.Kilometros)
                };

                // cria log do cálculo
                cache.Log = new Log()
                {
                    RadianosLatitudeOrigem  = new Decimal(calculo.RadianosOrigem),
                    RadianosLatitudeDestino = new Decimal(calculo.RadianosDestino),
                    RadianosThetaLongitude  = new Decimal(calculo.RadianosTheta),
                    Seno       = new Decimal(calculo.Seno),
                    Coseno     = new Decimal(calculo.Coseno),
                    Angulo     = new Decimal(calculo.Angulo),
                    Milhas     = new Decimal(calculo.Milhas),
                    Kilometros = new decimal(calculo.Kilometros)
                };

                // adiciona cache
                dados.Caches.AddObject(cache);
            });

            //armazena alterações
            dados.SaveChanges();
        }