示例#1
0
        public async Task <IActionResult> GetFactor([FromQuery] string id)
        {
            try
            {
                PreFactor factor = await _unitOfWork.PreFactorRepository.GetDbSet().Include(f => f.Images).Include(f => f.User).SingleOrDefaultAsync(f => f.Id == Guid.Parse(id));

                if (factor != null)
                {
                    var x = new
                    {
                        factor.Id,
                        Images = StaticTools.GetImages(factor.Images, _configuration.GetValue <string>("url")),
                        factor.IsDone,
                        factor.SubmittedFactorId,
                        UserPhone = factor.User.Phone
                    };
                    return(Ok(x));
                }
                else
                {
                    return(NotFound("factor not found"));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(Problem(e.Message));
            }
        }
示例#2
0
        public async IAsyncEnumerable <FileContentResult> GetPreFactorImages([FromQuery] string factorId)
        {
            PreFactor factor = await _unitOfWork.PreFactorRepository.GetDbSet().Include(f => f.Images).SingleOrDefaultAsync(f => f.Id == Guid.Parse(factorId));

            foreach (Image image in factor.Images)
            {
                yield return(File(image.Bytes, "image/jpeg"));
            }
        }
示例#3
0
 public async Task <IActionResult> UploadFiles([FromForm] ImageFilesRequestModel model)
 {
     try
     {
         if (CheckFiles(model.Files))
         {
             List <Image> vs = new List <Image>();
             foreach (IFormFile file in model.Files)
             {
                 byte[] bytes = new byte[file.Length];
                 file.OpenReadStream().Read(bytes, 0, bytes.Length);
                 vs.Add(new Image {
                     Bytes = bytes
                 });
             }
             ClaimsIdentity identity = HttpContext.User.Identity as ClaimsIdentity;
             string         id       = identity.Claims.ElementAt(0).Value.Split(' ').Last();
             PreFactor      factor   = new PreFactor()
             {
                 Title       = model.Title.IsEmpty() ? null : model.Title,
                 Images      = vs,
                 User        = await _authService.GetUser(id),
                 Description = model.Description
             };
             try
             {
                 _unitOfWork.PreFactorRepository.Insert(factor);
                 _unitOfWork.Commit();
                 return(Ok(factor));
             }
             catch (Exception ex)
             {
                 _logger.Log(LogLevel.Error, ex, "transaction rollback", factor);
                 _unitOfWork.Rollback();
                 return(Problem("database rollback"));
             }
         }
         else
         {
             return(BadRequest("All images must be JPEG"));
         }
     }
     catch (Exception e)
     {
         _logger.LogError(e, e.Message);
         return(Problem(e.Message));
     }
 }
示例#4
0
        public async Task <IActionResult> AddImagesToFactor([FromBody] AddImageToFactorRequestModel model)
        {
            try
            {
                PreFactor factor = await _unitOfWork.PreFactorRepository.GetDbSet().Include(f => f.Images).SingleOrDefaultAsync(f => f.Id == Guid.Parse(model.FactorId));

                if (factor == null)
                {
                    return(NotFound("factor not found"));
                }

                if (CheckFiles(model.Images))
                {
                    List <Image> vs = new List <Image>();
                    foreach (IFormFile file in model.Images)
                    {
                        byte[] bytes = new byte[file.Length];
                        file.OpenReadStream().Read(bytes, 0, bytes.Length);
                        vs.Add(new Image(bytes));
                    }
                    factor.Images.AddRange(vs);
                    try
                    {
                        _unitOfWork.PreFactorRepository.Update(factor);
                        _unitOfWork.Commit();
                        return(Ok(factor.Images));
                    }
                    catch (Exception ex)
                    {
                        _logger.Log(LogLevel.Error, ex, "transaction rollback", factor);
                        _unitOfWork.Rollback();
                        return(Problem("database rollback"));
                    }
                }
                else
                {
                    return(BadRequest("All images must be JPEG"));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(Problem(e.Message));
            }
        }
示例#5
0
        public async Task <IActionResult> SubmitUserFactor([FromBody] SubmitUserFactorRequestModel model)
        {
            try
            {
                PreFactor preFactor = await _unitOfWork.PreFactorRepository.GetDbSet().Include(f => f.User).ThenInclude(u => u.Contacts).SingleOrDefaultAsync(f => f.Id == Guid.Parse(model.PreFactorId));

                if (preFactor == null)
                {
                    return(NotFound("preFactor not found"));
                }

                if (preFactor.SubmittedFactorId != null)
                {
                    return(BadRequest("This preFactor already have a submitted factor"));
                }

                Contact contact = preFactor.User.Contacts.SingleOrDefault(c => c.Id == Guid.Parse(model.ContactId));
                if (contact == null)
                {
                    return(NotFound("user contact not found"));
                }

                long totalPrice           = 0;
                List <FactorItem> factors = new List <FactorItem>();
                foreach (FactorItemRequestModel item in model.FactorItems)
                {
                    Product product = await _unitOfWork.ProductRepository.SingleOrDefaultAsync(p => p.Title == item.Product.Title);

                    if (product == null)
                    {
                        return(NotFound(item.Product.Title + " not found"));
                    }

                    FactorItem factorItem = new FactorItem()
                    {
                        Price      = item.Price,
                        Product    = product,
                        TotalPrice = item.Quantity * item.Price
                    };
                    factors.Add(factorItem);
                    totalPrice += factorItem.TotalPrice;
                }
                SubmittedFactor sf = new SubmittedFactor
                {
                    Contact    = contact,
                    FactorDate = model.FactorDate,
                    TotalPrice = totalPrice,
                    Items      = factors,
                    PreFactor  = preFactor,
                    State      = new State(model.State.IsClear),
                    Code       = await CalculateCode(preFactor.User.Phone)
                };
                try
                {
                    _unitOfWork.SubmittedFactorRepository.Insert(sf);
                    preFactor.IsDone = true;
                    _unitOfWork.PreFactorRepository.Update(preFactor);
                    _unitOfWork.Commit();
                    var x = new
                    {
                        sf.Id,
                        sf.Items,
                        sf.State,
                        sf.TotalPrice
                    };
                    return(Ok(x));
                }
                catch (Exception e)
                {
                    _unitOfWork.Rollback();
                    _logger.LogError(e, e.Message);
                    return(Problem("database error"));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(Problem(e.Message));
            }
        }