using Kean.Domain.Task.Commands;
using Kean.Domain.Task.Events;
using Kean.Domain.Task.Repositories;
using System.Threading;

namespace Kean.Domain.Task.EventHandlers
{
    /// <summary>
    /// 任务取消命令成功时,处理后续
    /// </summary>
    public sealed class CancelSuccessEventHandler_Follow : EventHandler<CancelSuccessEvent>
    {
        private readonly ICommandBus _commandBus; // 命令总线
        private readonly ITaskRepository _taskRepository; // 任务仓库

        /// <summary>
        /// 依赖注入
        /// </summary>
        public CancelSuccessEventHandler_Follow(
            ICommandBus commandBus,
            ITaskRepository taskRepository)
        {
            _commandBus = commandBus;
            _taskRepository = taskRepository;
        }

        /// <summary>
        /// 处理程序
        /// </summary>
        public override async System.Threading.Tasks.Task Handle(CancelSuccessEvent @event, CancellationToken cancellationToken)
        {
            foreach (var item in await _taskRepository.GetCancelFollows(@event.Id))
            {
                await _commandBus.Execute(new CallDeleteCommand { Id = item.Id }, cancellationToken);
            }
        }
    }
}