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)); } }