Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

AppStartedConsumer.cs

using System.Reflection;
using Nop.Core.Events;
using Nop.Data;
using Nop.Data.Migrations;
using Nop.Services.Configuration;
using Nop.Services.Events;
using Nop.Services.Logging;
using Nop.Services.Plugins;
using Nop.Services.ScheduleTasks;
using Nop.Services.Security;
using Nop.Web.Framework.Infrastructure.Extensions;

namespace Nop.Web.Framework.Infrastructure;

/// 
/// Represents AppStarted event consumer
/// 
public partial class AppStartedConsumer : IConsumer
{
    #region Fields

    protected readonly ILogger _logger;
    protected readonly IMigrationManager _migrationManager;
    protected readonly IPermissionService _permissionService;
    protected readonly IPluginService _pluginService;
    protected readonly ISettingService _settingService;
    protected readonly ITaskScheduler _taskScheduler;

    #endregion

    #region Ctor

    public AppStartedConsumer(ILogger logger,
        IMigrationManager migrationManager,
        IPermissionService permissionService,
        IPluginService pluginService,
        ISettingService settingService,
        ITaskScheduler taskScheduler)
    {
        _logger = logger;
        _migrationManager = migrationManager;
        _permissionService = permissionService;
        _pluginService = pluginService;
        _settingService = settingService;
        _taskScheduler = taskScheduler;
    }

    #endregion

    #region Methods

    /// 
    /// Handle event
    /// 
    /// Event
    /// A task that represents the asynchronous operation
    public virtual async Task HandleEventAsync(AppStartedEvent eventMessage)
    {
        if (!DataSettingsManager.IsDatabaseInstalled())
            return;

        //log application start
        await _logger.InformationAsync("Application started");

        //install and update plugins
        await _pluginService.InstallPluginsAsync();
        await _pluginService.UpdatePluginsAsync();

        //insert new ACL permission if exists
        await _permissionService.InsertPermissionsAsync();

        //update nopCommerce core and db
        var assembly = Assembly.GetAssembly(typeof(ApplicationBuilderExtensions));
        _migrationManager.ApplyUpMigrations(assembly, MigrationProcessType.Update);
        assembly = Assembly.GetAssembly(typeof(IMigrationManager));
        _migrationManager.ApplyUpMigrations(assembly, MigrationProcessType.Update);

        //run scheduler
        await _taskScheduler.InitializeAsync();
        await _taskScheduler.StartSchedulerAsync();

        await _settingService.TryGetLicenseAsync();
    }

    #endregion
}