//TODO: error?
        public static async Task <User> AddOrUpdateUser(User user, bool isInit)
        {
            using (ApplicationContext db = new ApplicationContext())
            {
                //если заполнено только название города, то надо вытащить id из DS api
                if (user.city_id == null && !string.IsNullOrEmpty(user.city_title))
                {
                    DSCity currentCity = new DSCity();
                    var    cities      = await DSCity.GetCitiesByPattern(user.city_title);

                    //если несколько городов - берём первый
                    if (cities.Count > 0)
                    {
                        currentCity = cities[0];
                    }
                    //если не найдены города - Москва
                    else
                    {
                        var Moscow = await DSCity.GetCitiesByPattern("Москва");

                        currentCity = Moscow[0];
                    }
                    int id;
                    if (int.TryParse(currentCity.id, out id))
                    {
                        user.city_id      = id;
                        user.city_title   = currentCity.title;
                        user.region_title = currentCity.region != null?currentCity.region.title : null;
                    }
                    else
                    {
                        //TODO:error
                    }
                }

                //if user founded in DB - update
                if (db.Users.Any(u => u.vk_id == user.vk_id))
                {
                    var originalUser = db.Users.FirstOrDefault(u => u.vk_id == user.vk_id);
                    if (!isInit)
                    {
                        db.Entry(originalUser).CurrentValues.SetValues(user);
                    }
                    else
                    {
                        user = originalUser;
                    }
                }
                else
                {
                    db.Users.Add(user);
                }
                db.SaveChanges();

                return(user);
            }
        }
예제 #2
0
 public async Task <ActionResult> Get(string pattern)
 {
     return(Content(await DSCity.GetCityByTitleTask(pattern)));
 }
예제 #3
0
 public async Task <ActionResult> Get(double lat, double lon)
 {
     return(Content(await DSCity.GetCityByCoordinatesTask(lat, lon)));
 }