Ejemplo n.º 1
0
        public async Task <IActionResult> Get(string imdb)
        {
            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(imdb));

            try
            {
                var cachedShow = await _cachingService.GetCache(hash);

                if (cachedShow != null)
                {
                    try
                    {
                        return(Content(cachedShow, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }
            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var show = await context.ShowSet.Include(a => a.Rating)
                           .Include(a => a.Episodes)
                           .ThenInclude(episode => episode.Torrents)
                           .ThenInclude(torrent => torrent.Torrent0)
                           .Include(a => a.Episodes)
                           .ThenInclude(episode => episode.Torrents)
                           .ThenInclude(torrent => torrent.Torrent1080p)
                           .Include(a => a.Episodes)
                           .ThenInclude(episode => episode.Torrents)
                           .ThenInclude(torrent => torrent.Torrent480p)
                           .Include(a => a.Episodes)
                           .Include(a => a.Episodes)
                           .ThenInclude(episode => episode.Torrents)
                           .ThenInclude(torrent => torrent.Torrent720p)
                           .Include(a => a.Genres)
                           .Include(a => a.Images)
                           .Include(a => a.Similars).AsQueryable()
                           .FirstOrDefaultAsync(a => a.ImdbId == imdb);

                if (show == null)
                {
                    return(BadRequest());
                }

                var showJson = ConvertShowToJson(show);
                var json     = JsonSerializer.ToJsonString(showJson, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
        public void Utf8Json()
        {
            var json = Utf8JsonSerializer.ToJsonString(PreserveReferencesScenario.ObjectGraphRoot, JsonSettings.Utf8JsonResolver);

            _output.WriteLine(json);

            var deserializedGraph = Utf8JsonSerializer.Deserialize <A>(json, JsonSettings.Utf8JsonResolver);

            deserializedGraph.C.Should().BeSameAs(deserializedGraph.B.C);
        }
Ejemplo n.º 3
0
        public void Utf8Json()
        {
            var json = Utf8JsonSerializer.ToJsonString(PolymorphismScenario.Instance2, JsonSettings.Utf8JsonResolver);

            _output.WriteLine(json);

            var deserializedObject = Utf8JsonSerializer.Deserialize <BaseClass>(json, JsonSettings.Utf8JsonResolver);

            deserializedObject.Should().BeOfType <Subclass2>();
        }
Ejemplo n.º 4
0
        private string Serialize(object data)
        {
            switch (data)
            {
            case Block block: return(JsonSerializer.ToJsonString(_mapper.MapBlock(block)));

            case FullTransaction transaction:
                return(JsonSerializer.ToJsonString(_mapper.MapTransaction(transaction.Transaction)));

            case TxReceipt receipt:
                return(JsonSerializer.ToJsonString(_mapper.MapTransactionReceipt(receipt)));
            }

            return(null);
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Get(string imdb)
        {
            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes($"full:{imdb}"));

            try
            {
                var cachedMovie = await _cachingService.GetCache(hash);

                if (cachedMovie != null)
                {
                    try
                    {
                        return(Content(cachedMovie, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var movie =
                    await context.MovieSet.Include(a => a.Torrents)
                    .Include(a => a.Cast)
                    .Include(a => a.Similars)
                    .Include(a => a.Genres).AsQueryable()
                    .FirstOrDefaultAsync(
                        document => document.ImdbCode == imdb);

                if (movie == null)
                {
                    return(BadRequest());
                }

                var movieJson = ConvertMovieToJson(movie);
                var json      = JsonSerializer.ToJsonString(movieJson, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
Ejemplo n.º 6
0
        public async Task <bool> SetActiveUser()
        {
            var mobileBffUrl = Xamarin.Forms.Application.Current.Properties["MobileBffUrl"] as string;
            var token        = await SecureStorage.GetAsync("jwt_token");

            var result = await mobileBffUrl.AppendPathSegment("User").WithOAuthBearerToken(token).GetJsonAsync <UserViewModel>();

            if (result.User != null)
            {
                result.User.password = LoginInformation.Password;
                await SaveCredentials("current_user", JsonSerializer.ToJsonString <Domain.Entities.User>(result.User));

                return(true);
            }

            ErrorMessage = "User not created";
            return(false);
        }
Ejemplo n.º 7
0
        public static IEnumerable <(WriteObject, WriteObject)> GetModified(string firstRunId, string secondRunId)
        {
            var col = db?.GetCollection <WriteObject>("WriteObjects");

            var list = new ConcurrentBag <(WriteObject, WriteObject)>();

            //GetWriteObjects(firstRunId).AsParallel().ForAll(WO =>
            foreach (var WO in GetWriteObjects(firstRunId))
            {
                Log.Information(JsonSerializer.ToJsonString(WO));
                var secondItem = col?.FindOne(Query.And(Query.EQ("RunId", secondRunId), Query.EQ("IdentityHash", WO.Identity), Query.Not("InstanceHash", WO.InstanceHash)));
                if (secondItem is WriteObject WO2)
                {
                    list.Add((WO, WO2));
                }
            }
            //});

            return(list);
        }
Ejemplo n.º 8
0
        //public static IEnumerable<WriteObject> GetMissingFromFirst2(string firstRunId, string secondRunId)
        //{
        //    var col = db.GetCollection<WriteObject>("WriteObjects");

        //    var list = new ConcurrentBag<WriteObject>();

        //    var Stopwatch = System.Diagnostics.Stopwatch.StartNew();

        //    var identityHashes = db.Execute($"SELECT IdentityHash FROM WriteObjects WHERE RunId = @0",
        //            new BsonDocument
        //            {
        //                ["0"] = secondRunId
        //            });

        //    Parallel.ForEach(identityHashes.ToEnumerable(), IdentityHash =>
        //    {
        //        if (WriteObjectExists(firstRunId, IdentityHash["IdentityHash"].AsString))
        //        {
        //            list.Add(GetWriteObject(secondRunId, IdentityHash.AsString));
        //        }
        //    });

        //    Stopwatch.Stop();
        //    var t = TimeSpan.FromMilliseconds(Stopwatch.ElapsedMilliseconds);
        //    var answer = string.Format(CultureInfo.InvariantCulture, "{0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms",
        //                            t.Hours,
        //                            t.Minutes,
        //                            t.Seconds,
        //                            t.Milliseconds);
        //    Log.Debug("Completed getting WriteObjects for {0} in {1}", secondRunId, answer);

        //    return list;
        //}

        public static IEnumerable <WriteObject> GetMissingFromFirst(string firstRunId, string secondRunId)
        {
            var col = db?.GetCollection <WriteObject>("WriteObjects");

            var list = new ConcurrentBag <WriteObject>();

            var wos = col?.Find(x => x.RunId == secondRunId) ?? Array.Empty <WriteObject>();

            //wos.AsParallel().ForAll(wo =>
            foreach (var wo in wos)
            {
                Log.Information($"{firstRunId},{JsonSerializer.ToJsonString(wo)}");
                if (col?.Exists(x => x.Identity == firstRunId && x.RunId == wo.Identity) == true)
                {
                    list.Add(wo);
                }
            }
            //});

            return(wos ?? new List <WriteObject>());
        }
Ejemplo n.º 9
0
        private static void FlushProducts(ConcurrentBag <ProductScore> listProductScore, string path)
        {
            lock (syncObj)
            {
                var productsWithScore = listProductScore.ToArray();

                using (var sw = File.AppendText(path))
                {
                    for (var i = 0; i < listProductScore.Count; i++)
                    {
                        if (Math.Abs(productsWithScore[i].Score) < 0.000000000001D)
                        {
                            continue;
                        }

                        var serializedString = JsonSerializer.ToJsonString(productsWithScore[i]);
                        sw.WriteLine(serializedString);
                    }
                }

                listProductScore.Clear();
            }
        }
Ejemplo n.º 10
0
        public async Task <IActionResult> GetSimilar([FromBody] IEnumerable <string> imdbIds,
                                                     [RequiredFromQuery] int page, [FromQuery] int limit)
        {
            if (!imdbIds.Any())
            {
                return(Json(new MovieLightResponse
                {
                    Movies = new List <MovieLightJson>(),
                    TotalMovies = 0
                }));
            }

            var nbMoviesPerPage = 20;

            if (limit >= 20 && limit <= 50)
            {
                nbMoviesPerPage = limit;
            }

            var currentPage = 1;

            if (page >= 1)
            {
                currentPage = page;
            }

            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(
                    $@"type=movies&page={page}&limit={limit}&imdbId={string.Join(',', imdbIds)}"));

            try
            {
                var cachedMovies = await _cachingService.GetCache(hash);

                if (cachedMovies != null)
                {
                    try
                    {
                        return(Content(cachedMovies, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var skipParameter = new SqlParameter("@skip", (currentPage - 1) * nbMoviesPerPage);
                var takeParameter = new SqlParameter("@take", nbMoviesPerPage);
                var query         = @"
                    SELECT DISTINCT
                        Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames, Torrent.Peers, Torrent.Seeds, COUNT(*) OVER () as TotalCount
                    FROM 
                        MovieSet AS Movie
                    INNER JOIN
                        TorrentMovieSet AS Torrent
                    ON 
                        Torrent.MovieId = Movie.Id
                    INNER JOIN
                        Similar
                    ON 
                        Similar.MovieId = Movie.Id
                    AND 
                        Torrent.Quality = '720p'
                    WHERE
                        Similar.TmdbId IN ({@imdbIds})
                    AND
                        Torrent.Url <> '' AND Torrent.Url IS NOT NULL
                    ORDER BY Movie.Rating DESC";

                query += @" OFFSET @skip ROWS 
                    FETCH NEXT @take ROWS ONLY";

                using (var cmd = new SqlCommand(query,
                                                new SqlConnection(context.Database.GetDbConnection().ConnectionString)))
                {
                    cmd.AddArrayParameters(imdbIds, "@imdbIds");
                    cmd.Parameters.Add(skipParameter);
                    cmd.Parameters.Add(takeParameter);
                    await cmd.Connection.OpenAsync();

                    var reader = await cmd.ExecuteReaderAsync(new CancellationToken());

                    var count  = 0;
                    var movies = new List <MovieLightJson>();
                    while (await reader.ReadAsync())
                    {
                        var movie = new MovieLightJson
                        {
                            Title       = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                            Year        = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                            Rating      = !await reader.IsDBNullAsync(2) ? reader.GetDouble(2) : 0d,
                            PosterImage = !await reader.IsDBNullAsync(3) ? reader.GetString(3) : string.Empty,
                            ImdbCode    = !await reader.IsDBNullAsync(4) ? reader.GetString(4) : string.Empty,
                            Genres      = !await reader.IsDBNullAsync(5) ? reader.GetString(5) : string.Empty
                        };
                        movies.Add(movie);
                        count = !await reader.IsDBNullAsync(8) ? reader.GetInt32(8) : 0;
                    }

                    var response = new MovieLightResponse
                    {
                        TotalMovies = count,
                        Movies      = movies
                    };

                    var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                    await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                    return(Content(json, "application/json"));
                }
            }
        }
Ejemplo n.º 11
0
        public async Task <IActionResult> GetFromCast(string castId)
        {
            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes($"cast:{castId}"));

            try
            {
                var cachedMovie = await _cachingService.GetCache(hash);

                if (cachedMovie != null)
                {
                    try
                    {
                        return(Content(cachedMovie, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var imdbParameter = new SqlParameter("@imdbCode", castId);
                var query         = @"
                    SELECT 
                        Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames
                    FROM 
                        MovieSet AS Movie
                    INNER JOIN
                        CastSet AS Cast
                    ON 
                        Cast.MovieId = Movie.Id
                    WHERE
                        Cast.ImdbCode = @imdbCode";
                var movieQuery    =
                    await context.Database.ExecuteSqlQueryAsync(query, new CancellationToken(), imdbParameter);

                var reader = movieQuery.DbDataReader;
                var movies = new List <MovieLightJson>();
                while (await reader.ReadAsync())
                {
                    var movie = new MovieLightJson
                    {
                        Title       = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                        Year        = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                        Rating      = !await reader.IsDBNullAsync(2) ? reader.GetDouble(2) : 0d,
                        PosterImage = !await reader.IsDBNullAsync(3) ? reader.GetString(3) : string.Empty,
                        ImdbCode    = !await reader.IsDBNullAsync(4) ? reader.GetString(4) : string.Empty,
                        Genres      = !await reader.IsDBNullAsync(5) ? reader.GetString(5) : string.Empty
                    };
                    movies.Add(movie);
                }

                var response = new MovieLightResponse
                {
                    TotalMovies = movies.Count,
                    Movies      = movies
                };

                var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
Ejemplo n.º 12
0
        public async Task <IActionResult> GetLight(string imdb)
        {
            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes($"light:{imdb}"));

            try
            {
                var cachedMovie = await _cachingService.GetCache(hash);

                if (cachedMovie != null)
                {
                    try
                    {
                        return(Content(cachedMovie, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var imdbParameter = new SqlParameter("@imdbCode", imdb);
                var query         = @"
                    SELECT 
                        Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames
                    FROM 
                        MovieSet AS Movie
                    WHERE
                        Movie.ImdbCode = @imdbCode";
                var movieQuery    =
                    await context.Database.ExecuteSqlQueryAsync(query, new CancellationToken(), imdbParameter);

                var reader = movieQuery.DbDataReader;
                var movie  = new MovieLightJson();
                while (await reader.ReadAsync())
                {
                    movie.Title = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty;

                    movie.Year = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0;

                    movie.Rating = !await reader.IsDBNullAsync(2) ? reader.GetDouble(2) : 0d;

                    movie.PosterImage = !await reader.IsDBNullAsync(3) ? reader.GetString(3) : string.Empty;

                    movie.ImdbCode = !await reader.IsDBNullAsync(4) ? reader.GetString(4) : string.Empty;

                    movie.Genres = !await reader.IsDBNullAsync(5) ? reader.GetString(5) : string.Empty;
                }

                if (string.IsNullOrEmpty(movie.ImdbCode))
                {
                    return(BadRequest());
                }

                var json = JsonSerializer.ToJsonString(movie, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
Ejemplo n.º 13
0
        public async Task <IActionResult> Get([RequiredFromQuery] int page, [FromQuery] int limit,
                                              [FromQuery] int minimum_rating, [FromQuery] string query_term,
                                              [FromQuery] string genre, [FromQuery] string sort_by)
        {
            var nbMoviesPerPage = 20;

            if (limit >= 20 && limit <= 50)
            {
                nbMoviesPerPage = limit;
            }

            var currentPage = 1;

            if (page >= 1)
            {
                currentPage = page;
            }

            var queryTerm = string.Empty;

            if (!string.IsNullOrWhiteSpace(query_term))
            {
                queryTerm = query_term;
            }

            var genreFilter = string.Empty;

            if (!string.IsNullOrWhiteSpace(genre))
            {
                genreFilter = genre;
            }

            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(
                    $@"type=movies&page={page}&limit={limit}&minimum_rating={minimum_rating}&query_term={
                            query_term
                        }&genre={genre}&sort_by={sort_by}"));

            try
            {
                var cachedMovies = await _cachingService.GetCache(hash);

                if (cachedMovies != null)
                {
                    try
                    {
                        return(Content(cachedMovies, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var skipParameter   = new SqlParameter("@skip", (currentPage - 1) * nbMoviesPerPage);
                var takeParameter   = new SqlParameter("@take", nbMoviesPerPage);
                var ratingParameter = new SqlParameter("@rating", minimum_rating);
                var queryParameter  = new SqlParameter("@Keywords", string.Format(@"""{0}""", queryTerm));
                var genreParameter  = new SqlParameter("@genre", genreFilter);
                var query           = @"
                    SELECT DISTINCT
                        Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames, Torrent.Peers, Torrent.Seeds, COUNT(*) OVER () as TotalCount, Movie.DateUploadedUnix, Movie.Id, Movie.DownloadCount, Movie.LikeCount
                    FROM 
                        MovieSet AS Movie
                    CROSS APPLY
					(
						SELECT TOP 1 Torrent.MovieId, Torrent.Peers, Torrent.Seeds FROM TorrentMovieSet AS Torrent
						WHERE Torrent.MovieId = Movie.Id  AND Torrent.Url <> '' AND Torrent.Url IS NOT NULL
					) Torrent

                    INNER JOIN
                        CastSet AS Cast
                    ON Cast.MovieId = Movie.Id
                    WHERE 1 = 1";

                if (minimum_rating > 0 && minimum_rating < 10)
                {
                    query += @" AND
                        Rating >= @rating";
                }

                if (!string.IsNullOrWhiteSpace(query_term))
                {
                    query += @" AND
                        (CONTAINS(Movie.Title, @Keywords) OR CONTAINS(Cast.Name, @Keywords) OR CONTAINS(Movie.ImdbCode, @Keywords) OR CONTAINS(Cast.ImdbCode, @Keywords))";
                }

                if (!string.IsNullOrWhiteSpace(genre))
                {
                    query += @" AND
                        CONTAINS(Movie.GenreNames, @genre)";
                }

                query += " GROUP BY Movie.Id, Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames, Torrent.Peers, Torrent.Seeds, Movie.DateUploadedUnix, Movie.Id, Movie.DownloadCount, Movie.LikeCount";

                if (!string.IsNullOrWhiteSpace(sort_by))
                {
                    switch (sort_by)
                    {
                    case "title":
                        query += " ORDER BY Movie.Title ASC";
                        break;

                    case "year":
                        query += " ORDER BY Movie.Year DESC";
                        break;

                    case "rating":
                        query += " ORDER BY Movie.Rating DESC";
                        break;

                    case "peers":
                        query += " ORDER BY Torrent.Peers DESC";
                        break;

                    case "seeds":
                        query += " ORDER BY Torrent.Seeds DESC";
                        break;

                    case "download_count":
                        query += " ORDER BY Movie.DownloadCount DESC";
                        break;

                    case "like_count":
                        query += " ORDER BY Movie.LikeCount DESC";
                        break;

                    case "date_added":
                        query += " ORDER BY Movie.DateUploadedUnix DESC";
                        break;

                    default:
                        query += " ORDER BY Movie.DateUploadedUnix DESC";
                        break;
                    }
                }
                else
                {
                    query += " ORDER BY Movie.DateUploadedUnix DESC";
                }

                query += @" OFFSET @skip ROWS 
                    FETCH NEXT @take ROWS ONLY";

                var moviesQuery = await context.Database.ExecuteSqlQueryAsync(query, new CancellationToken(),
                                                                              skipParameter, takeParameter,
                                                                              ratingParameter, queryParameter,
                                                                              genreParameter);

                var reader = moviesQuery.DbDataReader;
                var count  = 0;
                var movies = new List <MovieLightJson>();
                while (await reader.ReadAsync())
                {
                    var movie = new MovieLightJson
                    {
                        Title       = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                        Year        = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                        Rating      = !await reader.IsDBNullAsync(2) ? reader.GetDouble(2) : 0d,
                        PosterImage = !await reader.IsDBNullAsync(3) ? reader.GetString(3) : string.Empty,
                        ImdbCode    = !await reader.IsDBNullAsync(4) ? reader.GetString(4) : string.Empty,
                        Genres      = !await reader.IsDBNullAsync(5) ? reader.GetString(5) : string.Empty
                    };
                    movies.Add(movie);
                    count = !await reader.IsDBNullAsync(8) ? reader.GetInt32(8) : 0;
                }

                var response = new MovieLightResponse
                {
                    TotalMovies = count,
                    Movies      = movies
                };

                var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
Ejemplo n.º 14
0
        public async Task <IActionResult> GetSimilar([FromBody] IEnumerable <string> imdbIds, [RequiredFromQuery] int page, [FromQuery] int limit,
                                                     [FromQuery] int minimum_rating, [FromQuery] string query_term,
                                                     [FromQuery] string genre, [FromQuery] string sort_by)
        {
            var nbMoviesPerPage = 20;

            if (limit >= 20 && limit <= 50)
            {
                nbMoviesPerPage = limit;
            }

            var currentPage = 1;

            if (page >= 1)
            {
                currentPage = page;
            }

            var queryTerm = string.Empty;

            if (!string.IsNullOrWhiteSpace(query_term))
            {
                queryTerm = query_term;
            }

            var genreFilter = string.Empty;

            if (!string.IsNullOrWhiteSpace(genre))
            {
                genreFilter = genre;
            }

            if (!imdbIds.Any())
            {
                return(Json(new MovieLightResponse
                {
                    Movies = new List <MovieLightJson>(),
                    TotalMovies = 0
                }));
            }

            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(
                    $@"type=movies&similar&imdbIds={string.Join(',', imdbIds)}&page={page}&limit={limit}&minimum_rating={minimum_rating}&query_term={
                            query_term
                        }&genre={genre}&sort_by={sort_by}"));

            try
            {
                var cachedMovies = await _cachingService.GetCache(hash);

                if (cachedMovies != null)
                {
                    try
                    {
                        return(Content(cachedMovies, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var skipParameter   = new SqlParameter("@skip", (currentPage - 1) * nbMoviesPerPage);
                var takeParameter   = new SqlParameter("@take", nbMoviesPerPage);
                var ratingParameter = new SqlParameter("@rating", minimum_rating);
                var queryParameter  = new SqlParameter("@Keywords", string.Format(@"""{0}""", queryTerm));
                var genreParameter  = new SqlParameter("@genre", genreFilter);
                var query           = @"
                    SELECT DISTINCT
                        Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames, COUNT(*) OVER () as TotalCount
                    FROM 
                        MovieSet AS Movie
                    WHERE
                        Movie.ImdbCode IN (SELECT 
                            Similar.TmdbId                      
                        FROM 
                            Similar AS Similar
                        INNER JOIN
					    (
						    SELECT Movie.ID
						    FROM 
							    MovieSet AS Movie
						    WHERE 
							    Movie.ImdbCode IN ({@imdbIds})
						) Movie
					ON Similar.MovieId = Movie.Id)
                    AND 1 = 1";

                if (minimum_rating > 0 && minimum_rating < 10)
                {
                    query += @" AND
                        Rating >= @rating";
                }

                if (!string.IsNullOrWhiteSpace(query_term))
                {
                    query += @" AND
                        (CONTAINS(Movie.Title, @Keywords) OR CONTAINS(Movie.ImdbCode, @Keywords))";
                }

                if (!string.IsNullOrWhiteSpace(genre))
                {
                    query += @" AND
                        CONTAINS(Movie.GenreNames, @genre)";
                }

                query += " ORDER BY Movie.Rating DESC";
                query += @" OFFSET @skip ROWS 
                    FETCH NEXT @take ROWS ONLY";

                using (var cmd = new SqlCommand(query,
                                                new SqlConnection(context.Database.GetDbConnection().ConnectionString)))
                {
                    cmd.AddArrayParameters(imdbIds, "@imdbIds");
                    cmd.Parameters.Add(skipParameter);
                    cmd.Parameters.Add(takeParameter);
                    cmd.Parameters.Add(ratingParameter);
                    cmd.Parameters.Add(queryParameter);
                    cmd.Parameters.Add(genreParameter);
                    await cmd.Connection.OpenAsync();

                    var reader = await cmd.ExecuteReaderAsync(new CancellationToken());

                    var count  = 0;
                    var movies = new List <MovieLightJson>();
                    while (await reader.ReadAsync())
                    {
                        var movie = new MovieLightJson
                        {
                            Title       = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                            Year        = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                            Rating      = !await reader.IsDBNullAsync(2) ? reader.GetDouble(2) : 0d,
                            PosterImage = !await reader.IsDBNullAsync(3) ? reader.GetString(3) : string.Empty,
                            ImdbCode    = !await reader.IsDBNullAsync(4) ? reader.GetString(4) : string.Empty,
                            Genres      = !await reader.IsDBNullAsync(5) ? reader.GetString(5) : string.Empty
                        };
                        movies.Add(movie);
                        count = !await reader.IsDBNullAsync(6) ? reader.GetInt32(6) : 0;
                    }

                    var response = new MovieLightResponse
                    {
                        TotalMovies = count,
                        Movies      = movies
                    };

                    var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                    await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                    return(Content(json, "application/json"));
                }
            }
        }
Ejemplo n.º 15
0
        public async Task <IActionResult> GetMoviesByIds([FromBody] IEnumerable <string> imdbIds)
        {
            if (!imdbIds.Any())
            {
                return(Json(new MovieLightResponse
                {
                    Movies = new List <MovieLightJson>(),
                    TotalMovies = 0
                }));
            }

            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(
                    $@"type=movies&imdbIds={string.Join(',', imdbIds)}"));

            try
            {
                var cachedMovies = await _cachingService.GetCache(hash);

                if (cachedMovies != null)
                {
                    try
                    {
                        return(Content(cachedMovies, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var query = @"
                    SELECT DISTINCT
                        Movie.Title, Movie.Year, Movie.Rating, Movie.PosterImage, Movie.ImdbCode, Movie.GenreNames, COUNT(*) OVER () as TotalCount
                    FROM 
                        MovieSet AS Movie
                    WHERE
                        Movie.ImdbCode IN ({@imdbIds})
                    ORDER BY Movie.Rating DESC";

                using (var cmd = new SqlCommand(query,
                                                new SqlConnection(context.Database.GetDbConnection().ConnectionString)))
                {
                    cmd.AddArrayParameters(imdbIds, "@imdbIds");
                    await cmd.Connection.OpenAsync();

                    var reader = await cmd.ExecuteReaderAsync(new CancellationToken());

                    var count  = 0;
                    var movies = new List <MovieLightJson>();
                    while (await reader.ReadAsync())
                    {
                        var movie = new MovieLightJson
                        {
                            Title       = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                            Year        = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                            Rating      = !await reader.IsDBNullAsync(2) ? reader.GetDouble(2) : 0d,
                            PosterImage = !await reader.IsDBNullAsync(3) ? reader.GetString(3) : string.Empty,
                            ImdbCode    = !await reader.IsDBNullAsync(4) ? reader.GetString(4) : string.Empty,
                            Genres      = !await reader.IsDBNullAsync(5) ? reader.GetString(5) : string.Empty
                        };
                        movies.Add(movie);
                        count = !await reader.IsDBNullAsync(6) ? reader.GetInt32(6) : 0;
                    }

                    var response = new MovieLightResponse
                    {
                        TotalMovies = count,
                        Movies      = movies
                    };

                    var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                    await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                    return(Content(json, "application/json"));
                }
            }
        }
Ejemplo n.º 16
0
        public async Task <IActionResult> GetShowByIds([FromBody] IEnumerable <string> imdbIds)
        {
            if (!imdbIds.Any())
            {
                return(Json(new ShowLightResponse
                {
                    Shows = new List <ShowLightJson>(),
                    TotalShows = 0
                }));
            }

            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(
                    $@"type=shows&imdbIds={string.Join(',', imdbIds)}"));

            try
            {
                var cachedShow = await _cachingService.GetCache(hash);

                if (cachedShow != null)
                {
                    try
                    {
                        return(Content(cachedShow, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var query = @"
                    SELECT DISTINCT
                        Show.Title, Show.Year, Rating.Percentage, Rating.Loved, Rating.Votes, Rating.Hated, Rating.Watching, Show.LastUpdated, Image.Banner, Image.Poster, Show.ImdbId, Show.TvdbId, Show.GenreNames, COUNT(*) OVER () as TotalCount
                    FROM 
                        ShowSet AS Show
                    INNER JOIN 
                        ImageShowSet AS Image
                    ON 
                        Image.Id = Show.ImagesId
                    INNER JOIN 
                        RatingSet AS Rating
                    ON 
                        Rating.Id = Show.RatingId
                    WHERE
                        Show.ImdbId IN ({@imdbIds})";

                using (var cmd = new SqlCommand(query,
                                                new SqlConnection(context.Database.GetDbConnection().ConnectionString)))
                {
                    cmd.AddArrayParameters(imdbIds, "@imdbIds");
                    await cmd.Connection.OpenAsync();

                    var reader = await cmd.ExecuteReaderAsync(new CancellationToken());

                    var count = 0;
                    var shows = new List <ShowLightJson>();
                    while (await reader.ReadAsync())
                    {
                        var show = new ShowLightJson
                        {
                            Title  = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                            Year   = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                            Rating = new RatingJson
                            {
                                Percentage = !await reader.IsDBNullAsync(2) ? reader.GetInt32(2) : 0,
                                Loved      = !await reader.IsDBNullAsync(3) ? reader.GetInt32(3) : 0,
                                Votes      = !await reader.IsDBNullAsync(4) ? reader.GetInt32(4) : 0,
                                Hated      = !await reader.IsDBNullAsync(5) ? reader.GetInt32(5) : 0,
                                Watching   = !await reader.IsDBNullAsync(6) ? reader.GetInt32(6) : 0
                            },
                            Images = new ImageShowJson
                            {
                                Banner = !await reader.IsDBNullAsync(8) ? reader.GetString(8) : string.Empty,
                                Poster = !await reader.IsDBNullAsync(9) ? reader.GetString(9) : string.Empty,
                            },
                            ImdbId = !await reader.IsDBNullAsync(10) ? reader.GetString(10) : string.Empty,
                            TvdbId = !await reader.IsDBNullAsync(11) ? reader.GetString(11) : string.Empty,
                            Genres = !await reader.IsDBNullAsync(12) ? reader.GetString(12) : string.Empty
                        };

                        shows.Add(show);
                        count = !await reader.IsDBNullAsync(13) ? reader.GetInt32(13) : 0;
                    }

                    var response = new ShowLightResponse
                    {
                        TotalShows = count,
                        Shows      = shows
                    };

                    var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                    await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                    return(Content(json, "application /json"));
                }
            }
        }
Ejemplo n.º 17
0
        public static void Utf8Json()
        {
            var json = Utf8JsonSerializer.ToJsonString(SignUpScenario.MutableObject, JsonSettings.Utf8JsonResolver);

            json.Should().Be(SignUpScenario.Json);
        }
Ejemplo n.º 18
0
 private static string Utf8Json(Person p)
 {
     return(JsonSerializer.ToJsonString(p, StandardResolver.CamelCase));
 }
Ejemplo n.º 19
0
        public async Task <IActionResult> Get([RequiredFromQuery] int page, [FromQuery] int limit,
                                              [FromQuery] int minimum_rating, [FromQuery] string query_term,
                                              [FromQuery] string genre, [FromQuery] string sort_by)
        {
            var nbShowsPerPage = 20;

            if (limit >= 20 && limit <= 50)
            {
                nbShowsPerPage = limit;
            }

            var currentPage = 1;

            if (page >= 1)
            {
                currentPage = page;
            }

            var queryTerm = string.Empty;

            if (!string.IsNullOrWhiteSpace(query_term))
            {
                queryTerm = query_term;
            }

            var genreFilter = string.Empty;

            if (!string.IsNullOrWhiteSpace(genre))
            {
                genreFilter = genre;
            }

            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(
                    $@"type=shows&page={page}&limit={limit}&minimum_rating={minimum_rating}&query_term={
                            query_term
                        }&genre={genre}&sort_by={sort_by}"));

            try
            {
                var cachedShows = await _cachingService.GetCache(hash);

                if (cachedShows != null)
                {
                    try
                    {
                        return(Content(cachedShows, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var skipParameter   = new SqlParameter("@skip", (currentPage - 1) * nbShowsPerPage);
                var takeParameter   = new SqlParameter("@take", nbShowsPerPage);
                var ratingParameter = new SqlParameter("@rating", minimum_rating);
                var queryParameter  = new SqlParameter("@Keywords", queryTerm);
                var genreParameter  = new SqlParameter("@genre", genreFilter);
                var query           = @"
                    SELECT 
                        Show.Title, Show.Year, Rating.Percentage, Rating.Loved, Rating.Votes, Rating.Hated, Rating.Watching, Show.LastUpdated, Image.Banner, Image.Fanart, Image.Poster, Show.ImdbId, Show.TvdbId, Show.GenreNames, COUNT(*) OVER () as TotalCount
                    FROM 
                        ShowSet AS Show
                    INNER JOIN 
                        ImageShowSet AS Image
                    ON 
                        Image.Id = Show.ImagesId
                    INNER JOIN 
                        RatingSet AS Rating
                    ON 
                        Rating.Id = Show.RatingId
                    WHERE
                        Show.NumSeasons <> 0";

                if (minimum_rating > 0 && minimum_rating < 10)
                {
                    query += @" AND
                        Rating >= @rating";
                }

                if (!string.IsNullOrWhiteSpace(query_term))
                {
                    query += @" AND
                        FREETEXT(Title, @Keywords)";
                }

                if (!string.IsNullOrWhiteSpace(genre))
                {
                    query += @" AND
                        CONTAINS(GenreNames, @genre)";
                }

                if (!string.IsNullOrWhiteSpace(sort_by))
                {
                    switch (sort_by)
                    {
                    case "title":
                        query += " ORDER BY Show.Title ASC";
                        break;

                    case "year":
                        query += " ORDER BY Show.Year DESC";
                        break;

                    case "rating":
                        query += " ORDER BY Rating.Percentage DESC";
                        break;

                    case "loved":
                        query += " ORDER BY Rating.Loved DESC";
                        break;

                    case "votes":
                        query += " ORDER BY Rating.Votes DESC";
                        break;

                    case "watching":
                        query += " ORDER BY Rating.Watching DESC";
                        break;

                    case "date_added":
                        query += " ORDER BY Show.LastUpdated DESC";
                        break;

                    default:
                        query += " ORDER BY Show.LastUpdated DESC";
                        break;
                    }
                }
                else
                {
                    query += " ORDER BY Show.LastUpdated DESC";
                }

                query += @" OFFSET @skip ROWS 
                    FETCH NEXT @take ROWS ONLY";

                var showsQuery = await context.Database.ExecuteSqlQueryAsync(query, new CancellationToken(),
                                                                             skipParameter, takeParameter,
                                                                             ratingParameter, queryParameter,
                                                                             genreParameter);

                var reader = showsQuery.DbDataReader;
                var count  = 0;
                var shows  = new List <ShowLightJson>();
                while (await reader.ReadAsync())
                {
                    var show = new ShowLightJson
                    {
                        Title  = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty,
                        Year   = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0,
                        Rating = new RatingJson
                        {
                            Percentage = !await reader.IsDBNullAsync(2) ? reader.GetInt32(2) : 0,
                            Loved      = !await reader.IsDBNullAsync(3) ? reader.GetInt32(3) : 0,
                            Votes      = !await reader.IsDBNullAsync(4) ? reader.GetInt32(4) : 0,
                            Hated      = !await reader.IsDBNullAsync(5) ? reader.GetInt32(5) : 0,
                            Watching   = !await reader.IsDBNullAsync(6) ? reader.GetInt32(6) : 0
                        },
                        Images = new ImageShowJson
                        {
                            Banner = !await reader.IsDBNullAsync(8) ? reader.GetString(8) : string.Empty,
                            Fanart = !await reader.IsDBNullAsync(9) ? reader.GetString(9) : string.Empty,
                            Poster = !await reader.IsDBNullAsync(10) ? reader.GetString(10) : string.Empty,
                        },
                        ImdbId = !await reader.IsDBNullAsync(11) ? reader.GetString(11) : string.Empty,
                        TvdbId = !await reader.IsDBNullAsync(12) ? reader.GetString(12) : string.Empty,
                        Genres = !await reader.IsDBNullAsync(13) ? reader.GetString(13) : string.Empty
                    };
                    shows.Add(show);
                    count = !await reader.IsDBNullAsync(14) ? reader.GetInt32(14) : 0;
                }

                var response = new ShowLightResponse
                {
                    TotalShows = count,
                    Shows      = shows
                };

                var json = JsonSerializer.ToJsonString(response, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
Ejemplo n.º 20
0
        public async Task <IActionResult> GetLight(string imdb)
        {
            var hash = Convert.ToBase64String(
                Encoding.UTF8.GetBytes($"light:{imdb}"));

            try
            {
                var cachedShow = await _cachingService.GetCache(hash);

                if (cachedShow != null)
                {
                    try
                    {
                        return(Content(cachedShow, "application/json"));
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Telemetry.TrackException(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Telemetry.TrackException(ex);
            }

            using (var context = new PopcornContextFactory().CreateDbContext(new string[0]))
            {
                var imdbParameter = new SqlParameter("@imdbId", imdb);
                var query         = @"
                    SELECT 
                        Show.Title, Show.Year, Rating.Percentage, Rating.Loved, Rating.Votes, Rating.Hated, Rating.Watching, Show.LastUpdated, Image.Banner, Image.Fanart, Image.Poster, Show.ImdbId, Show.TvdbId, Show.GenreNames
                    FROM 
                        ShowSet AS Show
                    INNER JOIN 
                        ImageShowSet AS Image
                    ON 
                        Image.Id = Show.ImagesId
                    INNER JOIN 
                        RatingSet AS Rating
                    ON 
                        Rating.Id = Show.RatingId
                    WHERE
                        Show.ImdbId = @imdbId";
                var showQuery     =
                    await context.Database.ExecuteSqlQueryAsync(query, new CancellationToken(), imdbParameter);

                var reader = showQuery.DbDataReader;
                var show   = new ShowLightJson();
                while (await reader.ReadAsync())
                {
                    show.Title = !await reader.IsDBNullAsync(0) ? reader.GetString(0) : string.Empty;

                    show.Year = !await reader.IsDBNullAsync(1) ? reader.GetInt32(1) : 0;

                    show.Rating = new RatingJson
                    {
                        Percentage = !await reader.IsDBNullAsync(2) ? reader.GetInt32(2) : 0,
                        Loved      = !await reader.IsDBNullAsync(3) ? reader.GetInt32(3) : 0,
                        Votes      = !await reader.IsDBNullAsync(4) ? reader.GetInt32(4) : 0,
                        Hated      = !await reader.IsDBNullAsync(5) ? reader.GetInt32(5) : 0,
                        Watching   = !await reader.IsDBNullAsync(6) ? reader.GetInt32(6) : 0
                    };
                    show.Images = new ImageShowJson
                    {
                        Banner = !await reader.IsDBNullAsync(8) ? reader.GetString(8) : string.Empty,
                        Fanart = !await reader.IsDBNullAsync(9) ? reader.GetString(9) : string.Empty,
                        Poster = !await reader.IsDBNullAsync(10) ? reader.GetString(10) : string.Empty,
                    };
                    show.ImdbId = !await reader.IsDBNullAsync(11) ? reader.GetString(11) : string.Empty;

                    show.TvdbId = !await reader.IsDBNullAsync(12) ? reader.GetString(12) : string.Empty;

                    show.Genres = !await reader.IsDBNullAsync(13) ? reader.GetString(13) : string.Empty;
                }

                if (string.IsNullOrEmpty(show.ImdbId))
                {
                    return(BadRequest());
                }

                var json = JsonSerializer.ToJsonString(show, StandardResolver.SnakeCase);
                await _cachingService.SetCache(hash, json, TimeSpan.FromDays(1));

                return(Content(json, "application/json"));
            }
        }
Ejemplo n.º 21
0
 public string Utf8Json() => Utf8JsonSerializer.ToJsonString(SignUpScenario.ImmutableObject, JsonSettings.Utf8JsonResolver);