public async Task <bool> LoanRequestAsync(MovieLoanRequest request)
        {
            var requestedMovie = await _dataContext.MovieLibrary.SingleOrDefaultAsync(m => m.MovieId == request.MovieId);

            if (requestedMovie.Avaliable < 1)
            {
                return(false);
            }
            var movie = await(from m in _dataContext.Movies
                              where m.MovieGuid == request.MovieId
                              select m).FirstOrDefaultAsync();

            var studio = await(from s in _dataContext.Studios
                               where s.StudioGuid == request.StudioId
                               select s).FirstOrDefaultAsync();

            var loanInstance = new MovieLoanInstance
            {
                MovieId    = movie.Id,
                StudioId   = studio.Id,
                TimeOfLoan = DateTime.Now
            };

            requestedMovie.Avaliable--;

            await _dataContext.MovieLoans.AddAsync(loanInstance);

            var created = await _dataContext.SaveChangesAsync();

            return(created > 0);
        }
        public async Task <ActionResult> ReturnRequest(MovieLoanRequest request)
        {
            var response = await _movieLibraryService.ReturnRequestAsync(request);

            if (response == false)
            {
                return(NotFound(new { Error = "Loan not active" }));
            }

            return(Ok(new { Success = "Movie returned" }));
        }
        public async Task <ActionResult <MovieResponse> > LoanRequest(MovieLoanRequest request)
        {
            var response = await _movieLibraryService.LoanRequestAsync(request);

            if (response == false)
            {
                return(NotFound(new { Error = "Movie not avaliable for the moment" }));
            }

            return(Ok(new { Success = "Movie loan registered" }));
        }
        public async Task <bool> ReturnRequestAsync(MovieLoanRequest request)
        {
            var movieLoanToReturn = await _dataContext.MovieLoans.SingleOrDefaultAsync(m => m.Movie.MovieGuid == request.MovieId && m.Studio.StudioGuid == request.StudioId);

            var requestedMovieLibraryInstance = await _dataContext.MovieLibrary.SingleOrDefaultAsync(m => m.MovieId == request.MovieId);

            if (movieLoanToReturn == null) // No loan instance found
            {
                return(false);
            }

            movieLoanToReturn.IsReturned   = true;
            movieLoanToReturn.TimeOfReturn = DateTime.Now;
            requestedMovieLibraryInstance.Avaliable++;

            var created = await _dataContext.SaveChangesAsync();

            return(created > 0);
        }