public async Task <LocationSuccessResponse> AddAsync(UserLocationRequest request) { try { var position = new UserPosition { Id = Guid.NewGuid().ToString(), Latitude = request.Latitude, Longitude = request.Longitude, Date = DateTime.Now, UserId = request.UserId }; await _context.UserPositions.AddAsync(position); await _context.SaveChangesAsync(); } catch (Exception ex) { return(new LocationSuccessResponse { Success = false, Errors = new string[] { ex.Message.ToString() } }); } return(new LocationSuccessResponse { Success = true }); }
public static List <ArmedTrap> ListNearTraps(UserLocationRequest userLocation) { List <ArmedTrap> result = new List <ArmedTrap>(); //WHERE // AT.User_Id <> '{2}' // AND AT.Disarmed = 0 string query = @"DECLARE @SearchLocation GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT({0} {1})', 4326); WITH ARMED_TRAPS AS( SELECT AT.Id AS 'Id', AT.Date AS 'Date', AT.User_Id AS 'UserId', AT.Latitude AS 'Latitude', AT.Longitude AS 'Longitude', AT.NameKey AS 'NameKey', CAST(@SearchLocation.STDistance(GEOGRAPHY::Point(AT.Latitude , AT.Longitude, 4326)) / 1000 AS INT) AS 'DistanceMeters' FROM ArmedTraps AT WHERE AT.User_Id <> '{2}' AND AT.Disarmed = 0 ) SELECT * FROM ARMED_TRAPS WHERE DistanceMeters < 500 ORDER BY DistanceMeters" ; query = string.Format(query, userLocation.longitude.ToString(CultureInfo.InvariantCulture), userLocation.latitude.ToString(CultureInfo.InvariantCulture), userLocation.userId); SqlCommand command = new SqlCommand(query, Settings.connection); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { ArmedTrap armedTrap = new ArmedTrap(); armedTrap.Id = reader.GetGuid(0).ToString(); armedTrap.Date = reader.GetDateTime(1); armedTrap.UserId = reader.GetGuid(2).ToString(); armedTrap.Latitude = (float)reader.GetDouble(3); armedTrap.Longitude = (float)reader.GetDouble(4); armedTrap.NameKey = reader.GetString(5); armedTrap.Distance = reader.GetInt32(6); result.Add(armedTrap); } } return(result); }
public async Task <HttpResponseMessage> Location(UserLocationRequest request) { var userId = Request.GetUserInfo <int>(SystemSessionEntity.UserId); await _profileService.UpdateLocation(userId, request.Latitude, request.Longitude, request.Offset).ConfigureAwait(false); //HostingEnvironment.QueueBackgroundWorkItem(async x => await _profileService.UpdateLocation(userId, request.Latitude, request.Longitude, request.Offset)); return(Request.SystemResponse <string>(SystemDbStatus.Updated)); }
public async Task <ActionResult <UserLocationModel> > AddLocationAsync([FromBody] UserLocationRequest location) { var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var result = await _mediator.Send(new AddLocation(sub, location)); if (result.IsFailure) { return(BadRequest()); } return(Ok(result.Value)); }
public async Task <IActionResult> AddCouponToUser(int couponId, [FromBody] UserLocationRequest model) { try { var username = User.FindFirstValue(ClaimTypes.Name); var coupon = await _couponService.AddCouponToUserWithExceptionsAsync(username, couponId, model.TargetX, model.TargetY); return(Ok(coupon)); } catch (LogicException ex) { return(BadRequest(new { message = ex.Message })); } }
public async Task <IActionResult> Post(UserLocationRequest request) { try { request.UserId = HttpContext.GetUserId(); var result = await _locationService.AddAsync(request); if (!result.Success) { return(BadRequest(result)); } var response = JsonConvert.SerializeObject(request); await _hub.Clients.Client(request.UserId).SendAsync("newLocation", response); } catch (Exception ex) { return(BadRequest(ex.Message)); } return(Ok()); }
public async Task <IActionResult> GetCouponCreatorBySearchAndFirstIdAndCount(int count, [FromQuery(Name = "search")] string search, [FromBody] UserLocationRequest model) { try { var userName = User.FindFirstValue(ClaimTypes.Name); var userRole = User.FindFirstValue(ClaimTypes.Role); var coupons = await _couponCreatorService.GetCouponCreatorsBySearchAndFirsIdAndCountAsync(count, search, userName, userRole, model.TargetX, model.TargetY); return(Ok(coupons)); } catch (LogicException ex) { return(BadRequest(new { message = ex.Message })); } }
public async Task <IActionResult> GetCouponCreatorsByFirstIndexAndCount(int startId, int count, [FromBody] UserLocationRequest model) { try { var coupons = await _couponCreatorService.GetCouponCreatorsByFirstIndexAndCountAsync(startId, count, model.TargetX, model.TargetY); return(Ok(coupons)); } catch (LogicException ex) { return(BadRequest(new { message = ex.Message })); } }
public async Task <ActionResult <UserLocationModel> > UpdateLocationAsync([FromRoute] Guid locationId, [FromBody] UserLocationRequest location) { var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var result = await _mediator.Send(new UpdateLocation(sub, locationId, location)); if (result.IsFailure) { return(BadRequest()); } return(NoContent()); }
public AddLocation(string userSub, UserLocationRequest location) { UserSub = userSub; Location = location; }
public UpdateLocation(string userSub, Guid locationId, UserLocationRequest location) { UserSub = userSub; LocationId = locationId; Location = location; }
public static void Process() { try { Console.WriteLine("Connecting SQL..."); Settings.connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyTrapConnectionString"].ToString()); Settings.connection.Open(); Console.WriteLine("Connected SQL!"); string storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"]; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString); CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = queueClient.GetQueueReference("positionqueue"); queue.CreateIfNotExists(); List <CloudQueueMessage> messages = new List <CloudQueueMessage>(); for (int cont = 0; cont < Settings.MAX_LOOP_GET_MESSAGES; cont++) { Console.WriteLine("Getting messages queue loop:" + (cont + 1)); var messagesLoop = queue.GetMessages(Settings.AMOUNT_MESSAGES_CHECK).ToList(); if (messagesLoop == null || messagesLoop.Count == 0) { Console.WriteLine("No more messages"); break; } else { Console.WriteLine("Messages Received:" + messagesLoop.Count); messages.AddRange(messagesLoop); } } if (messages != null && messages.Count > 0) { foreach (CloudQueueMessage message in messages) { try { string json = message.AsString; UserLocationRequest userLocation = JsonConvert.DeserializeObject <UserLocationRequest>(json); List <ArmedTrap> armedTraps = ArmedTrap.ListNearTraps(userLocation); ArmedTrap nearTrap = armedTraps.FirstOrDefault(); if (nearTrap != null && nearTrap.Distance <= 200) { ArmedTrap.DisarmTrap(nearTrap.Id); //ArmedTrap.UpdateUserPoints(userLocation.userId, nearTrap.NameKey); SendApiProcessDisarmedTrap(userLocation.userId, nearTrap.Id); } } catch (Exception e) { Console.WriteLine(e.Message); } queue.DeleteMessage(message); } } } catch (Exception e) { Console.WriteLine(e.Message); } finally { if (Settings.connection != null) { Console.WriteLine("Closing SQL..."); Settings.connection.Close(); Console.WriteLine("SQL Closed!"); } } }