public async Task Handle_Cast_Should_OrderedDesc() { var options = new DbContextOptionsBuilder <TvMazeDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options; using (var context = new TvMazeDbContext(options)) { // Arrange var show1 = context.Shows.Add(new Show(1, "1")); var person1 = context.Persons.Add(new Person(1, "1", null)); var person2 = context.Persons.Add(new Person(2, "2", DateTime.Parse("1900-01-01"))); var person3 = context.Persons.Add(new Person(3, "3", DateTime.Parse("2000-01-01"))); context.Casts.Add(new ShowCast(show1.Entity, person1.Entity)); context.Casts.Add(new ShowCast(show1.Entity, person2.Entity)); context.Casts.Add(new ShowCast(show1.Entity, person3.Entity)); context.SaveChanges(); // Act var queryHandler = new PaginatedShowsQueryHandler(context); var result = await queryHandler.Handle(new PaginatedShowsQuery(1, 0), CancellationToken.None); // Assert Assert.AreEqual(3, result.First().Cast.Count); Assert.AreEqual(3, result.First().Cast[0].ID); Assert.AreEqual(2, result.First().Cast[1].ID); Assert.AreEqual(1, result.First().Cast[2].ID); } }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, TvMazeDbContext tvMazeContext) { try { tvMazeContext.Database.Migrate(); Console.WriteLine("Database migrated."); } catch (Exception exception) { Console.WriteLine(exception.Message); } if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // app.UseHttpsRedirection(); app.UseRouting(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Rtl TvMaze API V1"); c.RoutePrefix = string.Empty; }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
public CastMemberRepository( TvMazeDbContext dbContext, IMapper mapper) { this.dbContext = dbContext; this.mapper = mapper; }
public ScrapeRepository( TvMazeDbContext dbContext, IMapper mapper) { this.dbContext = dbContext; this.mapper = mapper; }
private static List <ActorDto> GetActorsToAdd(TvMazeDbContext tvMazeDbContext, IEnumerable <ActorDto> actors) { var existingActorIds = tvMazeDbContext.Set <Actor>().Select(a => a.Id).ToList(); var actorsToAdd = actors.Where(actor => !existingActorIds.Contains(actor.Id)) .GroupBy(a => a.Id).Select(a => a.First()).ToList(); return(actorsToAdd); }
/// <inheritdoc /> public PaginatedShowsQueryHandler(TvMazeDbContext dbContext) { // Don't use DDD infrastrucure, only simple queries over dbcontext. // We could use Dapper or any other approach to fetch data. // But we already have EF context, therefore for now it's the most convenient way. _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); }
public ScrapeTvMazeData(TvMazeDbContext dbContext, IShowsRepository showsRepository, ITvMazeApi tvMazeApi, ICastRepository castRepository, IPersonRepository personRepository) { DbContext = dbContext; ShowsRepository = showsRepository; TvMazeApi = tvMazeApi; CastRepository = castRepository; PersonRepository = personRepository; }
public TvShowMassCreateHandler(TvMazeDbContext dbContext, ILogger <TvShowMassCreateHandler> logger) { _dbContext = dbContext; _logger = logger; // this Migration step should not be here , it should happen during the CI pipline running throw console app that run as a step in the CI tasks. //I put it here to just build the database without send a script and make you run it , again this is not the correct place for it _dbContext.Database.Migrate(); }
private async Task <bool> CheckIfShowExist(CancellationToken stoppingToken, TvMazeDbContext tvMazeDbContext, ShowDto show) { if (await tvMazeDbContext.Set <Show>().AnyAsync(s => s.Id == show.Id, stoppingToken)) { logger.LogInformation($"Show {show.Id} - {show.Name} already exists."); return(true); } return(false); }
private static async Task AddActors(CancellationToken stoppingToken, TvMazeDbContext tvMazeDbContext, IEnumerable <ActorDto> actorsToAdd) { await tvMazeDbContext.Set <Actor>().AddRangeAsync(actorsToAdd .Select(actor => new Actor { Id = actor.Id, Name = actor.Name, DateOfBirth = actor.BirthDay }), stoppingToken); }
private async Task WaitForDatabaseToBeReady(TvMazeDbContext tvMazeDbContext, CancellationToken stoppingToken) { while (true) { if (await tvMazeDbContext.Database.CanConnectAsync(stoppingToken)) { break; } logger.LogInformation("Waiting for Database to be ready."); await Task.Delay(3000, stoppingToken); } }
private static async Task AddShow(CancellationToken stoppingToken, TvMazeDbContext tvMazeDbContext, ShowDto show, IEnumerable <ActorDto> actorsToAdd) { await tvMazeDbContext.Set <Show>().AddAsync(new Show { Id = show.Id, Name = show.Name, ShowActors = actorsToAdd .Select(actor => new ShowActor { ShowId = show.Id, ActorId = actor.Id }).ToList() }, stoppingToken); }
public void Handle_TooBigLimit_Should_Throw_ArgumentException() { var options = new DbContextOptionsBuilder <TvMazeDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options; using (var context = new TvMazeDbContext(options)) { // Arrange context.Shows.Add(new Show(1, "1")); context.SaveChanges(); // Act Assert var queryHandler = new PaginatedShowsQueryHandler(context); Assert.ThrowsAsync <ArgumentException>(async() => await queryHandler.Handle(new PaginatedShowsQuery(Int32.MaxValue, 0), CancellationToken.None)); } }
public async Task Handle_EmptyCast_Should_Return_EmptyCast() { var options = new DbContextOptionsBuilder <TvMazeDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options; using (var context = new TvMazeDbContext(options)) { // Arrange context.Shows.Add(new Show(1, "1")); context.SaveChanges(); // Act var queryHandler = new PaginatedShowsQueryHandler(context); var result = await queryHandler.Handle(new PaginatedShowsQuery(1, 0), CancellationToken.None); // Assert Assert.AreEqual(0, result.First().Cast.Count); } }
public async Task Handle_Cast_Should_Distinct_DupplicatedRows() { var options = new DbContextOptionsBuilder <TvMazeDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options; using (var context = new TvMazeDbContext(options)) { // Arrange var show1 = context.Shows.Add(new Show(1, "1")); var person1 = context.Persons.Add(new Person(1, "1", null)); context.Casts.Add(new ShowCast(show1.Entity, person1.Entity)); context.Casts.Add(new ShowCast(show1.Entity, person1.Entity)); context.Casts.Add(new ShowCast(show1.Entity, person1.Entity)); context.SaveChanges(); // Act var queryHandler = new PaginatedShowsQueryHandler(context); var result = await queryHandler.Handle(new PaginatedShowsQuery(1, 0), CancellationToken.None); // Assert Assert.AreEqual(1, result.First().Cast.Count); } }
private static int CalculateNextPageNumber(TvMazeDbContext tvMazeDbContext, TvMazeOptions tvMazeConfiguration) { try { var page = 0; if (!tvMazeDbContext.Set <Show>().Any()) { return(page); } var lastAddedShowId = tvMazeDbContext.Set <Show>().OrderBy(s => s.Id).Last().Id; page = Convert.ToInt32(Math.Round(lastAddedShowId / tvMazeConfiguration.MaximumNumberOfShowsPerPage, MidpointRounding.ToZero)); return(page); } catch (Exception) { throw; } }
public TvShowsHandler(TvMazeDbContext dbContext) { _dbContext = dbContext; }
/// <inheritdoc /> public EfCoreShowsRepository(TvMazeDbContext dbContext) { _dbContext = dbContext; }
/// <inheritdoc /> public EfCorePersonsRepository(TvMazeDbContext dbContext) { _dbContext = dbContext; }
public BookmarkDbRepository(TvMazeDbContext context) { _context = context ?? throw new ArgumentNullException(nameof(context)); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, TvMazeDbContext context) { app.UseMvc(); var hagfireOptions = new BackgroundJobServerOptions { WorkerCount = 1 }; app.UseHangfireServer(hagfireOptions); app.UseHangfireDashboard(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); context.Database.Migrate(); RecurringJob.AddOrUpdate <SyncTvMazeDbJob>(job => job.ExecuteAsync(), Cron.Hourly); }
public ShowsRepository(TvMazeDbContext _dbContext) { DbContext = _dbContext; }
public PersonRepository(TvMazeDbContext dbContext) { DbContext = dbContext; }
public TvShowRepository(TvMazeDbContext dbContext) { this._dbContext = dbContext; }
public CastShowStorager(TvMazeDbContext context) { _context = context; }
public ShowsService(TvMazeDbContext tvMazeDbContext) { this.tvMazeDbContext = tvMazeDbContext; }
public ReadOnlyRepository(TvMazeDbContext context) { _context = context; }
public CastRepository(TvMazeDbContext _dbContext) { DbContext = _dbContext; }
public Repository(TvMazeDbContext context) : base(context) { }