public FillQueue( IQueueChecker queueChecker, ApplicationDbContext dbContext, ILogger <FillQueue> logger) { this.queueChecker = queueChecker; this.dbContext = dbContext; this.logger = logger; }
public CheckController( ApplicationDbContext context, IQueueChecker queue, UserManager <User> userManager, IMapper mapper, ILogger <CheckController> logger) : base(userManager) { this.context = context; this.queue = queue; this.mapper = mapper; this.logger = logger; }
public static async Task <int> ReCheckSolutions( ApplicationDbContext dbContext, IQueueChecker queueChecker, Func <ApplicationDbContext, IQueryable <Solution> > solutionsSelector, Func <string, Task> logger) { var solutionViews = await solutionsSelector(dbContext) .Select(s => new { s.Id, checks = s.SolutionChecks.Select(ch => ch.Id), logs = s.SolutionBuildLogs.Select(bl => bl.Id) }) .ToListAsync(); await logger($"Loaded {solutionViews.Count} ids"); var solutions = new List <Models.Solutions.Solution>(); foreach (var solutionView in solutionViews) { var solution = new Models.Solutions.Solution { Id = solutionView.Id, Status = Olympiad.Shared.Models.SolutionStatus.InQueue, TotalScore = null }; solutions.Add(solution); dbContext.Solutions.Attach(solution); dbContext.Entry(solution).Property(s => s.Status).IsModified = true; dbContext.Entry(solution).Property(s => s.TotalScore).IsModified = true; dbContext.SolutionBuildLogs.RemoveRange(solutionView.logs.Select(l => new Models.Checking.SolutionBuildLog { Id = l })); dbContext.SolutionChecks.RemoveRange(solutionView.checks.Select(c => new Models.Checking.SolutionCheck { Id = c })); } var saved = await dbContext.SaveChangesAsync(); foreach (var solution in solutions) { dbContext.Entry(solution).State = EntityState.Detached; queueChecker.PutInQueue(solution.Id); } return(saved); }