예제 #1
0
        public async Task <bool> DeleteAsync(AuctionDeleteRequestModel request)
        {
            ValidateAuctionDelete(request);

            int loggedInUserId = m_permissionService.GetAndValidateUserId();

            return(await m_auctionsRepository.DeleteAsync(request, loggedInUserId).ConfigureAwait(true));
        }
예제 #2
0
        public async Task <bool> DeleteAsync(AuctionDeleteRequestModel request, int loggedInUserId)
        {
            var strategy = m_context.Database.CreateExecutionStrategy();
            await strategy.Execute(async() =>
            {
                try
                {
                    using (var transaction = m_context.Database.BeginTransaction())
                    {
                        foreach (int auctionId in request.AuctionIds)
                        {
                            bool auctionExists = await m_context.Auctions.AnyAsync(auct => auct.AuctionId == auctionId).ConfigureAwait(true);

                            if (auctionExists)
                            {
                                Auction auctionForDelete = await m_context.Auctions
                                                           .Where(auct => auct.AuctionId == auctionId)
                                                           .FirstOrDefaultAsync()
                                                           .ConfigureAwait(true);

                                if (auctionForDelete.AuctionImageContainer.IsSpecified())
                                {
                                    await HandleAuctionDeleteImages(auctionForDelete.AuctionImageContainer).ConfigureAwait(true);
                                }

                                AuctionItem auctionItemDetails = await m_context.AuctionItems
                                                                 .Where(aitem => aitem.AuctionId == auctionId)
                                                                 .FirstOrDefaultAsync()
                                                                 .ConfigureAwait(true);

                                AuctionDetails auctionDetails = await m_context.AuctionDetails
                                                                .Where(adet => adet.AuctionItemId == auctionItemDetails.AuctionItemId)
                                                                .FirstOrDefaultAsync()
                                                                .ConfigureAwait(true);

                                m_context.Remove(auctionDetails);
                                m_context.Remove(auctionItemDetails);
                                m_context.Remove(auctionForDelete);

                                await m_context.SaveChangesAsync().ConfigureAwait(true);
                            }
                            else
                            {
                                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.NotActiveAuction);
                            }
                        }

                        transaction.Commit();
                    }
                }
                catch (Exception ex)
                {
                    throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.CouldNotDeleteAuction, ex);
                }
            }).ConfigureAwait(true);

            return(true);
        }
예제 #3
0
 private void ValidateAuctionDelete(AuctionDeleteRequestModel request)
 {
     if (request.IsNotSpecified())
     {
         throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
     }
     if (request.AuctionIds.IsNotSpecified())
     {
         throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
     }
     if (request.AuctionIds.Any(s => s.IsNotSpecified()))
     {
         throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
     }
 }
예제 #4
0
 [HasPermission(Permission.CreateAuction)] // TODO: KKE: Add correct permission!
 public async Task <IActionResult> Delete([FromBody] AuctionDeleteRequestModel request)
 {
     return(Ok(await m_auctionsService.DeleteAsync(request).ConfigureAwait(true)));
 }