public async Task <IActionResult> Post(GeneratorRequest model)
        {
            model.IpAddress = HttpContext.Connection.RemoteIpAddress.ToString();
            GeneratorResponse response = await _itemBusiness.GenerateAsync(model);

            if (response.IsSuccess)
            {
                return(Ok(new Uri(Request.Scheme + "://" + Request.Host.Value + Request.PathBase + "/" + response.Segment).ToString()));
            }

            return(BadRequest(response.Message));
        }
Esempio n. 2
0
        public async Task <GeneratorResponse> GenerateAsync(GeneratorRequest model)
        {
            var response = new GeneratorResponse();

            try
            {
                if (model == null)
                {
                    response.IsSuccess = false;
                    response.Message   = "Empty model";
                    return(response);
                }
                if (string.IsNullOrWhiteSpace(model.OriginUrl))
                {
                    response.IsSuccess = false;
                    response.Message   = "Empty origin url";
                    return(response);
                }

                Item entity = await _itemQueryHandler.GetByOriginUrlAsync(model.OriginUrl);

                string segment = entity?.Segment;

                if (string.IsNullOrWhiteSpace(segment))
                {
                    // generate new segment
                    segment = KeyGeneratorExtension.GetUniqueKey(8);

                    await _itemCommandHandler.ExecuteAsync(new CreateItemCommand
                    {
                        IpAddress   = model.IpAddress,
                        ExpiredDate = model.ExpiredDate,
                        OriginUrl   = model.OriginUrl,
                        Segment     = segment
                    });
                }

                response.IsSuccess = true;
                response.Segment   = segment;
            }
            catch (Exception exception)
            {
                response.IsSuccess = false;
                response.Message   = exception.Message;
            }
            return(response);
        }