Модуль репутации
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user