Files
nashel-backend/src/Modules/Reputation/Infrastructure/BackgroundJobs/AutoReviewJob.cs
T

67 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Nashel.Modules.Reputation.Infrastructure.BackgroundJobs
{
public class AutoReviewJob : BackgroundService
{
private readonly ILogger<AutoReviewJob> _logger;
private readonly IServiceProvider _serviceProvider;
public AutoReviewJob(ILogger<AutoReviewJob> logger, IServiceProvider serviceProvider)
{
_logger = logger;
_serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Запуск AutoReviewJob...");
while (!stoppingToken.IsCancellationRequested)
{
try
{
_logger.LogInformation("AutoReviewJob: Проверка заказов без отзывов...");
// TODO: Реализовать логику авто-отзыва
// 1. Получить все завершенные заказы (из модуля Order или через Integration Events/View)
// 2. Отфильтровать те, которые завершены > 7 дней назад
// 3. Проверить, есть ли уже отзыв для этого заказа (в таблице Reviews)
// 4. Если отзыва нет -> создать Review с Rating=5 и IsAutoGenerated=true
// 5. Сохранить в БД (ReviewRepository.AddAsync)
using (var scope = _serviceProvider.CreateScope())
{
var logger = scope.ServiceProvider.GetRequiredService<ILogger<AutoReviewJob>>();
var reviewRepo = scope.ServiceProvider.GetRequiredService<Nashel.Modules.Reputation.Domain.Repositories.IReviewRepository>();
// Логика авто-отзыва:
// 1. Ищем заказы, которые были завершены ровно 7 дней назад.
// Это можно сделать через интеграционное событие или запрос к Order Module.
// 2. Для каждого такого заказа проверяем, оставил ли уже клиент отзыв.
// 3. Если отзыва нет:
// Review autoReview = Review.Create(order.Id, Guid.Empty (System), order.EmployeeId, 5, "Авто-отзыв: Заказ успешно завершен.", isAutoGenerated: true);
// await reviewRepo.AddAsync(autoReview);
logger.LogInformation("AutoReviewJob: Проверка завершена.");
}
// Ждем 24 часа перед следующей проверкой
await Task.Delay(TimeSpan.FromHours(24), stoppingToken);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка в AutoReviewJob");
// Ждем немного перед повторной попыткой при ошибке
await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken);
}
}
}
}
}