public JsonResult UpdateUser([FromBody] AppUserViewModel vm)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var user = _userRepo.UpdateUser(vm.AppUserId, vm.FirstName, vm.LastName, vm.AdAssassinId);

                    if (_userRepo.Base.SaveAll(User))
                    {
                        Response.StatusCode = (int)HttpStatusCode.OK;
                        var newVm = user.ToViewModel();
                        return(Json(newVm));
                    }
                    else
                    {
                        Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                        return(Json(MsgFactory.Error("Unable to save user!")));
                    }
                }
                else
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(Json(MsgFactory.Error(ModelState)));
                }
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(MsgFactory.Error(ex)));
            }
        }
        public async Task <JsonResult> SignUp([FromBody] SignUpViewModel vm)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // check if any values tracked in Auth0 have changed
                    var extId = await _authAdapter.SignUpUser(vm);

                    // save to our db now
                    var user = new AppUser()
                    {
                        FirstName   = vm.FirstName,
                        LastName    = vm.LastName,
                        Email       = vm.Email,
                        ExternalId  = extId,
                        AvatarUrl   = Avatars.GetAvatarUrl(vm.FirstName, vm.LastName, vm.Email),
                        IsDeleted   = false,
                        IsSuspended = false,
                        UserRoles   = new List <AppUserRole> {
                            new AppUserRole {
                                RoleId = 2
                            }
                        }                                                                    // default to free user
                    };

                    _userRepo.AddUser(user);
                    if (_userRepo.Base.SaveAll(User))
                    {
                        var newVm = user.ToViewModel();
                        Response.StatusCode = (int)HttpStatusCode.OK;
                        return(Json(newVm));
                    }
                    else
                    {
                        Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                        return(Json(MsgFactory.Error("Unable to save new user")));
                    }
                }

                else
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(Json(MsgFactory.Error(ModelState)));
                }
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(MsgFactory.Error(ex)));
            }
        }
 public JsonResult GetUsers()
 {
     try
     {
         var models = _userRepo.GetUsers();
         var vms    = models.Select(k => k.ToViewModel());
         return(Json(vms));
     }
     catch (Exception ex)
     {
         Response.StatusCode = (int)HttpStatusCode.InternalServerError;
         return(Json(MsgFactory.Error(ex)));
     }
 }
Exemple #4
0
 public JsonResult GetAdAccounts()
 {
     try
     {
         var email  = UserClaimHelpers.Email(User.Identity);
         var models = _repo.GetAdAccountsByUserEmail(email);
         var vms    = models.Select(k => k.ToViewModel());
         return(Json(vms));
     }
     catch (Exception ex)
     {
         Response.StatusCode = (int)HttpStatusCode.InternalServerError;
         return(Json(MsgFactory.Error(ex)));
     }
 }
        public async Task <JsonResult> Refresh(string refreshToken)
        {
            try
            {
                LoginRefreshViewModel responseVM = await _authAdapter.RefreshAuth(refreshToken);

                Response.StatusCode = (int)HttpStatusCode.OK;
                return(Json(responseVM));
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json(MsgFactory.Error(ex)));
            }
        }
        public async Task <JsonResult> Login([FromBody] LoginViewModel vm)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // check if any values tracked in Auth0 have changed
                    LoginResponseViewModel responseVM = await _authAdapter.Authenticate(vm);

                    var user = _userRepo.GetUserByExternalId(responseVM.ExternalId);
                    if (user == null)
                    {
                        user = _userRepo.GetAppUserByEmail(vm.Email);
                        if (user == null)
                        {
                            throw new Exception("Unable to locate user");
                        }
                        else
                        {
                            //update with externalId
                            user.ExternalId = responseVM.ExternalId;
                            _userRepo.Base.SaveAll(User);
                        }
                    }
                    responseVM.AppUserId    = user.AppUserId;
                    responseVM.AvatarUrl    = user.AvatarUrl;
                    responseVM.Email        = user.Email;
                    responseVM.FullName     = user.FirstName + " " + user.LastName;
                    responseVM.AdAssassinId = user.AdAssassinId;
                    responseVM.Roles        = user.UserRoles.Select(k => k.Role.Name).ToArray();
                    Response.StatusCode     = (int)HttpStatusCode.OK;
                    return(Json(responseVM));
                }
                else
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(Json(MsgFactory.Error(ModelState)));
                }
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json(MsgFactory.Error(ex)));
            }
        }
        public JsonResult ProcessAds([FromBody] List <object> ads)
        {
            try
            {
                var email          = UserClaimHelpers.Email(User.Identity);
                var user           = _userRepo.GetAppUserByEmail(email);
                var dataSyncEntity = _userRepo.GetCurrentDataSync(user.AppUserId);
                var newAds         = DataModel.ParseCollection <Ad>(ads);
                if (user == null)
                {
                    throw new Exception("We don't seem to be able to locate your account.  Please contact support for assistance.");
                }

                var dateRecorded = DateTime.UtcNow;
                foreach (var item in newAds)
                {
                    item.AppUserDataSyncId = dataSyncEntity.Id;
                    item.DateRecorded      = dateRecorded;
                }
                var currentItems = _repo.GetAdsByUserId(user.AppUserId);

                var currIds = currentItems.Select(k => k.id).ToList();
                var newIds  = newAds.Select(k => k.id).ToList();

                var toAddIds    = newIds.Except(currIds).ToList();
                var toUpdateIds = newIds.Intersect(currIds).ToList();
                var toDeleteIds = currIds.Except(newIds).ToList();


                var toAdd    = newAds.Where(k => toAddIds.Contains(k.id)).ToList();
                var toUpdate = newAds.Where(k => toUpdateIds.Contains(k.id)).ToList();
                var toDelete = currentItems.Where(k => toDeleteIds.Contains(k.id)).ToList();

                // create a copy for the history
                var historyItems = new List <_AdHistoryItem>(newAds.Count);
                foreach (var item in newAds)
                {
                    historyItems.Add((_AdHistoryItem)item.CreateHistoryItem <_AdHistoryItem>());
                }
                _repo.AddAdHistoryItems(historyItems);

                dataSyncEntity.AdsCompleted = true;

                _repo.AddAds(toAdd);
                _repo.UpdateAds(toUpdate);
                _userRepo.UpdateDataSync(dataSyncEntity);

                if (_repo.Base.SaveAll(User))
                {
                    Response.StatusCode = (int)HttpStatusCode.OK;
                    return(Json(newIds));
                }
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(MsgFactory.Error("Unable to process!")));
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(MsgFactory.Error(ex)));
            }
        }
Exemple #8
0
        public JsonResult ProcessAdSets([FromBody] List <object> adsets)
        {
            try
            {
                // get sync entity
                var email          = UserClaimHelpers.Email(User.Identity);
                var user           = _userRepo.GetAppUserByEmail(email);
                var dataSyncEntity = _userRepo.GetCurrentDataSync(user.AppUserId);
                var newAdsets      = DataModel.ParseCollection <AdSet>(adsets);
                var dateRecorded   = DateTime.UtcNow;
                if (user == null)
                {
                    throw new Exception("We don't seem to be able to locate your account.  Please contact support for assistance.");
                }


                // create new regions if they do not exist in our system
                var newRegions   = new Dictionary <int, Region>();
                var currentItems = _repo.GetAdSetByUserId(user.AppUserId);
                //  var targetings = currentItems.Select(k => k.targeting).ToDictionary(k => k.adset_id, m => m);
                //var newTargets = new Dictionary<long, Targeting>();
                //    var geolocations = targetings.Values.Select(k => k.geo_locations).ToDictionary(k => k.adset_id, m => m);
                var regions      = _repo.GetRegions();
                var toRemoveMaps = new List <GeolocationRegionMap>(10);
                foreach (var item in newAdsets)
                {
                    item.AppUserDataSyncId = dataSyncEntity.Id;
                    item.DateRecorded      = dateRecorded;
                    //if (!targetings.ContainsKey(item.id) && !newTargets.ContainsKey(item.id))
                    //    newTargets.Add(item.id, item.targeting);
                    item.targeting.adset_id          = item.id;
                    item.targeting.AppUserDataSyncId = dataSyncEntity.Id;
                    item.targeting.DateRecorded      = dateRecorded;

                    item.targeting.geo_locations.adset_id          = item.id;
                    item.targeting.geo_locations.AppUserDataSyncId = dataSyncEntity.Id;
                    item.targeting.geo_locations.DateRecorded      = dateRecorded;
                    //if (geolocations.ContainsKey(item.targeting.adset_id))
                    //    item.targeting.geo_locations.adset_id = geolocations[item.targeting.adset_id].adset_id;

                    item.targeting.geo_locations.region_maps = new List <GeolocationRegionMap>(10);
                    foreach (var region in item.targeting.geo_locations.regions)
                    {
                        if (!regions.ContainsKey(region.key) && !newRegions.ContainsKey(region.key))
                        {
                            newRegions.Add(region.key, region);
                        }

                        var currentItem = currentItems.FirstOrDefault(k => k.id == item.id);
                        if (currentItem != null)
                        {
                            var currentRegions  = currentItem.targeting.geo_locations.region_maps;
                            var incomingRegions = item.targeting.geo_locations.regions;

                            var curRegionKeys   = currentRegions.Select(k => k.key).ToList();
                            var incomingRegKeys = incomingRegions.Select(k => k.key).ToList();

                            var toAddRegKeyMaps    = incomingRegKeys.Except(curRegionKeys);
                            var toRemoveRegKeyMaps = curRegionKeys.Except(incomingRegKeys);

                            foreach (var keyMap in toAddRegKeyMaps)
                            {
                                item.targeting.geo_locations.region_maps.Add(
                                    new GeolocationRegionMap()
                                {
                                    key = keyMap, AppUserDataSyncId = dataSyncEntity.Id, DateRecorded = dateRecorded
                                });
                            }
                            foreach (var keyMap in toRemoveRegKeyMaps)
                            {
                                var map = item.targeting.geo_locations.region_maps.FirstOrDefault(k => k.key == keyMap);
                                if (map != null)
                                {
                                    toRemoveMaps.Add(map);
                                }
                            }
                        }
                        else
                        {
                            item.targeting.geo_locations.region_maps.Add(
                                new GeolocationRegionMap()
                            {
                                key = region.key, AppUserDataSyncId = dataSyncEntity.Id, DateRecorded = dateRecorded
                            });
                        }
                    }
                }



                var currIds = currentItems.Select(k => k.id).ToList();
                var newIds  = newAdsets.Select(k => k.id).ToList();

                var toAddIds    = newIds.Except(currIds).ToList();
                var toUpdateIds = newIds.Intersect(currIds).ToList();
                var toDeleteIds = currIds.Except(newIds).ToList();


                var toAdd    = newAdsets.Where(k => toAddIds.Contains(k.id)).ToList();
                var toUpdate = newAdsets.Where(k => toUpdateIds.Contains(k.id)).ToList();
                var toDelete = currentItems.Where(k => toDeleteIds.Contains(k.id)).ToList();

                var historyItems          = new List <_AdSetHistoryItem>(newAdsets.Count);
                var tgtHistoryItems       = new List <_TargetingHistoryItem>(newAdsets.Count);
                var geolocHistoryItems    = new List <_GeolocationHistoryItem>(newAdsets.Count);
                var geolocMapHistoryItems = new List <_GeolocationRegionMapHistoryItem>(newAdsets.Count);
                foreach (var item in newAdsets)
                {
                    var newAsHi = (_AdSetHistoryItem)item.CreateHistoryItem <_AdSetHistoryItem>();
                    newAsHi.AppUserDataSyncId = dataSyncEntity.Id;
                    newAsHi.DateRecorded      = dateRecorded;
                    historyItems.Add(newAsHi);

                    var newTgtHi = (_TargetingHistoryItem)item.targeting.CreateHistoryItem <_TargetingHistoryItem>();
                    newTgtHi.AppUserDataSyncId = dataSyncEntity.Id;
                    newTgtHi.DateRecorded      = dateRecorded;
                    tgtHistoryItems.Add(newTgtHi);

                    var glocHi = (_GeolocationHistoryItem)item.targeting.geo_locations.CreateHistoryItem <_GeolocationHistoryItem>();
                    glocHi.AppUserDataSyncId = dataSyncEntity.Id;
                    glocHi.DateRecorded      = dateRecorded;
                    geolocHistoryItems.Add(glocHi);

                    foreach (var regMap in item.targeting.geo_locations.region_maps)
                    {
                        var geolocRegMapHi = (_GeolocationRegionMapHistoryItem)regMap.CreateHistoryItem <_GeolocationRegionMapHistoryItem>();
                        geolocRegMapHi.AppUserDataSyncId = dataSyncEntity.Id;
                        geolocRegMapHi.DateRecorded      = dateRecorded;
                        geolocRegMapHi.adset_id          = item.id;
                        geolocMapHistoryItems.Add(geolocRegMapHi);
                    }
                }
                _repo.AddSetHistoryItems(historyItems);
                _repo.AddTargetHistoryItems(tgtHistoryItems);
                _repo.AddGeolocationHistoryItems(geolocHistoryItems);
                _repo.AddGeolocationRegionMapHistoryItems(geolocMapHistoryItems);

                dataSyncEntity.AdSetsCompleted = true;

                _repo.RemoveGelocationRegionMaps(toRemoveMaps);
                _repo.AddRegions(newRegions.Values);
                _repo.AddAdSets(toAdd);
                _repo.UpdateAdSets(toUpdate);
                _userRepo.UpdateDataSync(dataSyncEntity);

                if (_repo.Base.SaveAll(User))
                {
                    Response.StatusCode = (int)HttpStatusCode.OK;
                    return(Json(newIds));
                }
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(MsgFactory.Error("Unable to process!")));
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(MsgFactory.Error(ex)));
            }
        }