public async Task <IActionResult> GetMyMovies(GetMyMoviesFilter model) { try { var result = await movieLib.GetMyMoviesAsync(model, CurrentUserId); return(CustomResult(result)); } catch (System.Exception exp) { return(CustomError(exp)); } }
public async Task <List <MovieModel> > GetMyMoviesAsync(GetMyMoviesFilter filter, long currentUserId) { var result = from m in movieRepo.GetQuery() join mcd in movieCollectionDetailRepo.GetQuery() on m.Id equals mcd.MovieId into mmcd from mcd in mmcd.DefaultIfEmpty() join mc in movieCollectionRepo.GetQuery() on mcd.MovieCollectionId equals mc.Id into mcdmc from mc in mcdmc.DefaultIfEmpty() where m.UserId == currentUserId && (m.Title.Contains(filter.Title) || (mc != null && mc.Name.Contains(filter.Title))) && (filter.MinRate == 0 || Convert.ToDouble(m.ImdbRating) >= filter.MinRate) && (filter.MaxRate == 0 || Convert.ToDouble(m.ImdbRating) <= filter.MaxRate) && (filter.MinYear == 0 || Convert.ToInt32(m.Year) >= filter.MinYear) && (filter.MaxYear == 0 || Convert.ToInt32(m.Year) <= filter.MaxYear) && (filter.Rated == null || filter.Rated.Contains(m.Rated)) && (string.IsNullOrWhiteSpace(filter.Genre) || m.MovieGenres.Any(r => r.Genre.Title.Contains(filter.Genre))) && (string.IsNullOrWhiteSpace(filter.Director) || m.MovieCasts.Any(r => r.CastType == CastTypeKind.Director && r.Cast.FullName.Contains(filter.Director))) && (string.IsNullOrWhiteSpace(filter.Writer) || m.MovieCasts.Any(r => r.CastType == CastTypeKind.Writer && r.Cast.FullName.Contains(filter.Writer))) && (string.IsNullOrWhiteSpace(filter.Star) || m.MovieCasts.Any(r => r.CastType == CastTypeKind.Actor && r.Cast.FullName.Contains(filter.Star))) && (filter.Seen == null || m.Seen == filter.Seen) orderby mc.Name, mcd.Number, m.Title select new MovieModel { Id = m.Id, Title = (mc == null ? "" : "(" + mc.Name + " - " + mcd.Number.ToString() + ") ") + m.Title, ImdbRating = m.ImdbRating, Year = m.Year, Rated = m.Rated, Genre = (filter.Genre == string.Empty && !filter.ShowAllInfo) ? string.Empty : string.Join(',', m.MovieGenres.Select(r => r.Genre.Title)), Director = (filter.Director == string.Empty && !filter.ShowAllInfo) ? string.Empty : string.Join(',', m.MovieCasts.Where(r => r.CastType == CastTypeKind.Director).Select(r => r.Cast.FullName)), Writer = (filter.Writer == string.Empty && !filter.ShowAllInfo) ? string.Empty : string.Join(',', m.MovieCasts.Where(r => r.CastType == CastTypeKind.Writer).Select(r => r.Cast.FullName)), Actors = (filter.Star == string.Empty && !filter.ShowAllInfo) ? string.Empty : string.Join(',', m.MovieCasts.Where(r => r.CastType == CastTypeKind.Actor).Select(r => r.Cast.FullName)), LocalPath = m.LocalPath, Poster = m.Poster, Seen = m.Seen }; return(await result.ToAsyncEnumerable().ToList()); }