internal async Task UpdateTotalHoursFromWorkDayAsync(UpdateTotalHoursFromWorkDayMessage message, CancellationToken cancellationToken) { using (var scope = _serviceProvider.CreateScope()) { using (var context = scope.ServiceProvider.GetRequiredService <AppDbContext>()) { var workDay = await context.WorkDays.Include(x => x.WorkingPeriods).Include(wd => wd.Contract).FirstOrDefaultAsync(x => x.Id == message.WorkdayId, cancellationToken); if (workDay == null) { _logger.LogInformation("No work day found for id {WorkdayId}", message.WorkdayId); return; } if (workDay.WorkingPeriods.Count == 0) { context.WorkDays.Remove(workDay); await context.SaveChangesAsync(); _logger.LogInformation("Workday of {workDayDate} didn't have any work periods and was deleted.", workDay.Date); return; } workDay.TotalHours = CalculateTotalHoursFromWorkDay(workDay); await UpdateTotalOverhoursOfContract(context, workDay.Contract.UserId); await context.SaveChangesAsync(); _logger.LogInformation("Processed {workDayDate} via queue.", workDay.Date); } } }
public async Task Index_Runs_RecalculateHoursOfUserAsync() { var handlerRequest = new DeleteWorkingPeriodRequest(new() { }); await _handler.Handle(handlerRequest, CancellationToken.None); var request = new UpdateTotalHoursFromWorkDayMessage(4); await _worker.UpdateTotalHoursFromWorkDayAsync(request, CancellationToken.None); }