public bool Validate(DeleteShippingAddressDto request) { if (_context.ShippingAddresses.Any(x => x.Id == request.ShippingAddressId)) { throw new EntityNotFoundException($"Shipping address with id {request.ShippingAddressId}"); } if (_context.Users.Any(x => x.Id == request.UserId)) { throw new EntityNotFoundException($"User with id {request.ShippingAddressId}"); } if (_context.ShippingAddresses .Include(sa => sa.User) .AsQueryable() .Where(sa => sa.Id == request.ShippingAddressId) .Where(sa => sa.User.Id == request.UserId) .Count() == 0) { throw new EntityMissmatchException($"Shipping address with id {request.ShippingAddressId}", $"User with id {request.ShippingAddressId}"); } return(true); }
public IActionResult Delete(int addressId, int userId) { var dto = new DeleteShippingAddressDto { ShippingAddressId = addressId, UserId = userId }; try { _deleteShippingAddress.Execute(dto); return(Ok()); } catch (EntityNotFoundException e) { return(NotFound(e.Message)); } catch (EntityMissmatchException e) { return(UnprocessableEntity(e.Message)); } catch (Exception e) { return(StatusCode(500, e)); } }
public void Execute(DeleteShippingAddressDto request) { if (Validate(request)) { var shippingAddress = _context.ShippingAddresses .Include(sa => sa.User) .Include(sa => sa.Orders) .ThenInclude(o => o.OrderCoupons) .Include(sa => sa.Orders) .ThenInclude(o => o.OrderProducts) .AsQueryable() .Where(sa => sa.Id == request.ShippingAddressId) .First(); if (shippingAddress.Orders.Count() != 0) { foreach (var order in shippingAddress.Orders) { if (order.DateShipped == null) { MailMessage message = new MailMessage(); message.From = new MailAddress("*****@*****.**", "OnlineMarketPlace"); message.To.Add(new MailAddress(order.User.Email, order.User.FirstName + " " + order.User.LastName)); message.Subject = "OnlineMarketPlace - Order cancelation"; string body = $"We would like to inform you that your order with id {order.Id} is cancelled. "; body += $"Reason: Shipping address for this order has been deleted and for safety, we have cancelled the order. "; body += "We are sorry for any inconviniences caused."; message.Body = body; Functions.SmtpClient.Send(message); } foreach (var product in order.OrderProducts) { product.Active = false; } if (order.OrderCoupons.Count() == 0) { foreach (var coupon in order.OrderCoupons) { coupon.Active = false; } } order.Active = false; } } shippingAddress.Active = false; _context.SaveChanges(); } }