feat: Enhance network membership and withdrawal processing with user tracking and logging
This commit is contained in:
@@ -16,78 +16,51 @@ public class GetWorkerExecutionLogsQueryHandler : IRequestHandler<GetWorkerExecu
|
||||
GetWorkerExecutionLogsQuery request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: این باید از یک entity واقعی لاگها را بگیرد
|
||||
// فعلاً mock data برمیگرداند
|
||||
|
||||
await Task.CompletedTask;
|
||||
|
||||
var mockLogs = new List<WorkerExecutionLogModel>
|
||||
{
|
||||
new WorkerExecutionLogModel
|
||||
{
|
||||
ExecutionId = Guid.NewGuid().ToString(),
|
||||
WeekNumber = "2025-W48",
|
||||
Step = "Full",
|
||||
Success = true,
|
||||
ErrorMessage = null,
|
||||
StartedAt = DateTime.UtcNow.AddHours(-24),
|
||||
CompletedAt = DateTime.UtcNow.AddHours(-24).AddMinutes(15),
|
||||
DurationMs = 900000, // 15 minutes
|
||||
RecordsProcessed = 1523,
|
||||
Details = "محاسبات کامل هفته 2025-W48 با موفقیت انجام شد"
|
||||
},
|
||||
new WorkerExecutionLogModel
|
||||
{
|
||||
ExecutionId = Guid.NewGuid().ToString(),
|
||||
WeekNumber = "2025-W47",
|
||||
Step = "Full",
|
||||
Success = true,
|
||||
ErrorMessage = null,
|
||||
StartedAt = DateTime.UtcNow.AddDays(-7),
|
||||
CompletedAt = DateTime.UtcNow.AddDays(-7).AddMinutes(12),
|
||||
DurationMs = 720000,
|
||||
RecordsProcessed = 1489,
|
||||
Details = "محاسبات کامل هفته 2025-W47 با موفقیت انجام شد"
|
||||
},
|
||||
new WorkerExecutionLogModel
|
||||
{
|
||||
ExecutionId = Guid.NewGuid().ToString(),
|
||||
WeekNumber = "2025-W46",
|
||||
Step = "Pool",
|
||||
Success = false,
|
||||
ErrorMessage = "خطا در محاسبه استخر کمیسیون",
|
||||
StartedAt = DateTime.UtcNow.AddDays(-14),
|
||||
CompletedAt = DateTime.UtcNow.AddDays(-14).AddSeconds(30),
|
||||
DurationMs = 30000,
|
||||
RecordsProcessed = 0,
|
||||
Details = "محاسبه استخر با خطا مواجه شد"
|
||||
}
|
||||
};
|
||||
// Query from database
|
||||
var query = _context.WorkerExecutionLogs.AsQueryable();
|
||||
|
||||
// Apply filters
|
||||
if (!string.IsNullOrEmpty(request.WeekNumber))
|
||||
{
|
||||
mockLogs = mockLogs.Where(x => x.WeekNumber == request.WeekNumber).ToList();
|
||||
query = query.Where(x => x.WeekNumber == request.WeekNumber);
|
||||
}
|
||||
|
||||
if (request.SuccessOnly == true)
|
||||
{
|
||||
mockLogs = mockLogs.Where(x => x.Success).ToList();
|
||||
query = query.Where(x => x.Status == Domain.Entities.Commission.WorkerExecutionStatus.Success ||
|
||||
x.Status == Domain.Entities.Commission.WorkerExecutionStatus.SuccessWithWarnings);
|
||||
}
|
||||
|
||||
if (request.FailedOnly == true)
|
||||
{
|
||||
mockLogs = mockLogs.Where(x => !x.Success).ToList();
|
||||
query = query.Where(x => x.Status == Domain.Entities.Commission.WorkerExecutionStatus.Failed);
|
||||
}
|
||||
|
||||
var totalCount = mockLogs.Count;
|
||||
// Order by most recent first
|
||||
query = query.OrderByDescending(x => x.StartedAt);
|
||||
|
||||
var totalCount = await query.CountAsync(cancellationToken);
|
||||
var pageSize = request.PaginationState?.PageSize ?? 10;
|
||||
var pageNumber = request.PaginationState?.PageNumber ?? 1;
|
||||
|
||||
var pagedLogs = mockLogs
|
||||
var logs = await query
|
||||
.Skip((pageNumber - 1) * pageSize)
|
||||
.Take(pageSize)
|
||||
.ToList();
|
||||
.Select(x => new WorkerExecutionLogModel
|
||||
{
|
||||
ExecutionId = x.ExecutionId.ToString(),
|
||||
WeekNumber = x.WeekNumber,
|
||||
Step = "Full", // We only have full execution now
|
||||
Success = x.Status == Domain.Entities.Commission.WorkerExecutionStatus.Success ||
|
||||
x.Status == Domain.Entities.Commission.WorkerExecutionStatus.SuccessWithWarnings,
|
||||
ErrorMessage = x.ErrorMessage,
|
||||
StartedAt = x.StartedAt,
|
||||
CompletedAt = x.CompletedAt ?? x.StartedAt,
|
||||
DurationMs = x.DurationMs ?? 0,
|
||||
RecordsProcessed = x.ProcessedCount,
|
||||
Details = x.Details ?? $"Worker execution: {x.Status}"
|
||||
})
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
return new GetWorkerExecutionLogsResponseDto
|
||||
{
|
||||
@@ -100,7 +73,7 @@ public class GetWorkerExecutionLogsQueryHandler : IRequestHandler<GetWorkerExecu
|
||||
HasPrevious = pageNumber > 1,
|
||||
HasNext = pageNumber < (int)Math.Ceiling(totalCount / (double)pageSize)
|
||||
},
|
||||
Models = pagedLogs
|
||||
Models = logs
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user