feat(api, core, dal, domain): В таблицу Tasks добавлено поле процент выполнения, так же добавлено это поле в response - статус формирования отчета. Создан интерфейс для отслеживания прогресса IProgressAsync. Из сервиса WorkloadService исключен ITaskManagementService.
This commit is contained in:
@@ -15,24 +15,45 @@ namespace PARR.DAL.Repositories.TaskRepositories
|
||||
|
||||
public async Task<int> TaskCaptureAsync(Guid taskId)
|
||||
{
|
||||
//var affectedRows = await EntityContext.Database.ExecuteSqlInterpolatedAsync($@"
|
||||
// UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
|
||||
// SET ""{nameof(TaskItem.StatusCode)}""={(int)TaskItemStatusEnum.Processing},
|
||||
// ""{nameof(TaskItem.DateModified)}""={DateTimeOffset.UtcNow}
|
||||
// WHERE ""{nameof(TaskItem.Id)}""={taskId}
|
||||
// AND ""{nameof(TaskItem.StatusCode)}""={(int)TaskItemStatusEnum.Pending}
|
||||
//");
|
||||
//var sql = $@"
|
||||
// UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
|
||||
// SET ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Processing},
|
||||
// ""{nameof(TaskItem.DateModified)}"" = {{0}}
|
||||
// WHERE ""{nameof(TaskItem.Id)}"" = {{1}}
|
||||
// AND ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Pending}";
|
||||
|
||||
var sql = $@"
|
||||
UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
|
||||
SET ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Processing},
|
||||
""{nameof(TaskItem.DateModified)}"" = {{0}}
|
||||
WHERE ""{nameof(TaskItem.Id)}"" = {{1}}
|
||||
AND ""{nameof(TaskItem.StatusCode)}"" = {(int)TaskItemStatusEnum.Pending}";
|
||||
//var affectedRows = await EntityContext.Database.ExecuteSqlRawAsync(sql, DateTimeOffset.UtcNow, taskId);
|
||||
|
||||
var affectedRows = await EntityContext.Database.ExecuteSqlRawAsync(sql, DateTimeOffset.UtcNow, taskId);
|
||||
//return affectedRows;
|
||||
|
||||
return affectedRows;
|
||||
return await EntityContext.Tasks.Where(t => t.Id == taskId && t.StatusCode == TaskItemStatusEnum.Pending)
|
||||
.ExecuteUpdateAsync(t=>t
|
||||
.SetProperty(p=>p.StatusCode, TaskItemStatusEnum.Processing)
|
||||
.SetProperty(p => p.DateModified, DateTimeOffset.UtcNow)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public async Task<int> UpdateProgressAsync(Guid taskId, int percent)
|
||||
{
|
||||
// Валидация на уровне БД
|
||||
if (percent < 0)
|
||||
percent = 0;
|
||||
|
||||
if (percent > 100)
|
||||
percent = 100;
|
||||
|
||||
//return await EntityContext.Database.ExecuteSqlInterpolatedAsync($@"
|
||||
// UPDATE ""{DatabaseSchemas.Task}"".""Tasks""
|
||||
// SET ""{nameof(TaskItem.ProgressPercent)}"" = {percent},
|
||||
// ""{nameof(TaskItem.DateModified)}"" = {DateTimeOffset.UtcNow}
|
||||
// WHERE ""{nameof(TaskItem.Id)}"" = {taskId}");
|
||||
|
||||
// Атомарное обновление
|
||||
return await EntityContext.Tasks.Where(t => t.Id == taskId).ExecuteUpdateAsync(t => t
|
||||
.SetProperty(x => x.ProgressPercent, percent)
|
||||
//.SetProperty(x => x.DateModified, DateTimeOffset.UtcNow)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user