Пример #1
0
        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
            });
        }
Пример #2
0
            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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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());
        }
Пример #7
0
        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 }));
            }
        }
Пример #8
0
        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 }));
            }
        }
Пример #9
0
        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());
        }
Пример #10
0
 public AddLocation(string userSub, UserLocationRequest location)
 {
     UserSub  = userSub;
     Location = location;
 }
Пример #11
0
 public UpdateLocation(string userSub, Guid locationId, UserLocationRequest location)
 {
     UserSub    = userSub;
     LocationId = locationId;
     Location   = location;
 }
Пример #12
0
        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!");
                }
            }
        }