Example #1
0
 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;
 }
Example #3
0
        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);
        }