Пример #1
0
        public async Task UpdateTurnipPrices(Day day, int min, int max)
        {
            day ??= GetCurrentWeek()[(int)DateTime.Now.DayOfWeek];
            var key = await SettingsService.GetPublicKey();

            var turnipUpdate = new TurnipUpdate
            {
                AMPrice             = day.PriceAM ?? 0,
                PMPrice             = day.PricePM ?? 0,
                BuyPrice            = day.BuyPrice ?? 0,
                Year                = DateTime.Now.Year,
                DayOfYear           = DateTime.Now.DayOfYear,
                PublicKey           = key,
                TurnipUpdateTimeUTC = DateTime.UtcNow,
                MaxPrediction       = max,
                MinPrediction       = min
            };

            var content = JsonConvert.SerializeObject(turnipUpdate);


            await PutAsync($"api/UpdateTurnipPrices?code={App.PutUpdateTurnipPricesKey}", content);
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "put", Route = null)] HttpRequest req,
            [Table("User")] CloudTable cloudTable,
            ILogger log)
        {
            log.LogInformation($"C# HTTP trigger {nameof(UpdateTurnipPrices)} function processed a request.");


            var privateKey = Utils.ParseToken(req);

            if (privateKey == null)
            {
                return(new UnauthorizedResult());
            }

            TurnipUpdate turnipUpdate = null;

            try
            {
                var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                turnipUpdate = JsonConvert.DeserializeObject <TurnipUpdate>(requestBody);
            }
            catch (Exception ex)
            {
                log.LogInformation("Unable to deserialize turnip update: " + ex.Message);
            }

            if (turnipUpdate == null || string.IsNullOrWhiteSpace(turnipUpdate.PublicKey))
            {
                return(new BadRequestErrorMessageResult("Invalid data to process request"));
            }

            UserEntity userEntity = null;

            try
            {
                userEntity = await Utils.FindUserEntity(cloudTable, privateKey, turnipUpdate.PublicKey);
            }
            catch (Exception ex)
            {
                log.LogInformation($"User doesn't exist - Error {nameof(UpdateTurnipPrices)} - Error: " + ex.Message);
                //user does not exist? correct error?
                return(new BadRequestErrorMessageResult("Unable to locate your user account."));
            }

            if (userEntity == null)
            {
                return(new BadRequestErrorMessageResult("Unable to locate your user account."));
            }

            userEntity.AMPrice  = turnipUpdate.AMPrice;
            userEntity.PMPrice  = turnipUpdate.PMPrice;
            userEntity.BuyPrice = turnipUpdate.BuyPrice;
            userEntity.TurnipUpdateDayOfYear = turnipUpdate.DayOfYear;
            userEntity.TurnipUpdateYear      = turnipUpdate.Year;
            userEntity.TurnipUpdateTimeUTC   = turnipUpdate.TurnipUpdateTimeUTC;
            userEntity.MaxPrediction         = turnipUpdate.MaxPrediction;
            userEntity.MinPrediction         = turnipUpdate.MinPrediction;

            try
            {
                await Utils.MergeUserEntity(cloudTable, userEntity);
            }
            catch (Exception ex)
            {
                log.LogError("Unable to merge user entity: " + ex.Message);
                return(new InternalServerErrorResult());
            }

            return(new OkObjectResult("User Turnip Prices Updated"));
        }