Ejemplo n.º 1
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            try
            {
                var requestBody = await new StreamReader(req.Body).ReadToEndAsync();

                log.LogInformation($"Request body: {requestBody}");

                var requestBodyParsed = JObject.Parse(requestBody);

                BaseBodyValidator.ValidateBody(requestBodyParsed);

                var contractAddress = requestBodyParsed.Value <string>("contractAddress");

                var web3 = Web3Service.Initialize();

                var stockService = new StockService(web3, contractAddress);

                var createItem = JsonConvert.DeserializeObject <CreateItemFunction>(requestBody);

                var receiptForCreateItemFunctionCall = await stockService.CreateItemRequestAndWaitForReceiptAsync(createItem);

                var itemCreatedEvent = receiptForCreateItemFunctionCall.DecodeAllEvents <ItemCreatedEventDTO>().FirstOrDefault().Event;

                log.LogInformation("Event:");
                log.LogInformation($" Message: {itemCreatedEvent.Message}");
                log.LogInformation($" Item ID: {itemCreatedEvent.Id}");

                return(new OkObjectResult(itemCreatedEvent.Id));
            }
            catch (Exception e)
            {
                log.LogInformation($"The following Exception was raised in CreateItem: {e.Message}");

                if (e is SmartContractRevertException || e is RpcResponseException)
                {
                    return(new ContentResult
                    {
                        StatusCode = 401,
                        Content = Messages.UnAuthorizedMessage
                    });
                }

                return(new BadRequestObjectResult(e.Message));
            }
        }