コード例 #1
0
ファイル: BookingService.cs プロジェクト: gGvidas/proj
        public async Task <BookingResponse> CreateInView(BookingDTO newBooking, Guid viewId)
        {
            var isAdmin = _aadService.IsAdmin();
            var booking = BookingMapper.Map(newBooking);

            if (!await _itemRepository.CheckIfAvailableToBook(booking))
            {
                string errorMessage = "Too many concurrent bookings";
                Log.Error(errorMessage);
                return(new BookingResponse(errorMessage));
            }
            if (!isAdmin && !_viewRepository.CheckIfAllowedToBook(booking.ItemId, viewId))
            {
                string errorMessage = $"Item {booking.Item.Name} can't be booked.";
                Log.Error(errorMessage);
                return(new BookingResponse(errorMessage));
            }
            try
            {
                await _bookingRepository.Create(booking);

                await _context.SaveChangesAsync();

                var showNames = _aadService.IsAdmin() || _viewRepository.GetShowNamesById(viewId);
                return(new BookingResponse(BookingMapper.Map(booking, showNames)));
            }
            catch (Exception ex)
            {
                string errorMessage = $"An error occured when creating the booking: {ex.Message}";
                Log.Error <string>(ex, "An error occured when creating the booking: {booking}", JsonSerializer.Serialize(booking));
                return(new BookingResponse(errorMessage));
            }
        }