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); }
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>(); }
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); }
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")); } }
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); }
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); }
//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>()); }
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(); } }
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")); } } }
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")); } }
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")); } }
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")); } }
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")); } } }
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")); } } }
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")); } } }
public static void Utf8Json() { var json = Utf8JsonSerializer.ToJsonString(SignUpScenario.MutableObject, JsonSettings.Utf8JsonResolver); json.Should().Be(SignUpScenario.Json); }
private static string Utf8Json(Person p) { return(JsonSerializer.ToJsonString(p, StandardResolver.CamelCase)); }
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")); } }
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")); } }
public string Utf8Json() => Utf8JsonSerializer.ToJsonString(SignUpScenario.ImmutableObject, JsonSettings.Utf8JsonResolver);