using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Collections; namespace zero.Core.Integrations { public class IntegrationsCollection : CollectionCacheBase, IIntegrationsCollection { public IReadOnlyCollection RegisteredTypes { get; private set; } public IntegrationsCollection(IZeroContext context, ICollectionInterceptorHandler interceptorHandler) : base(context, interceptorHandler) { RegisteredTypes = context.Options.Integrations.GetAllItems(); } /// public async Task Get() where T : class, IIntegration { Type type = typeof(T); IIntegrationType integration = RegisteredTypes.FirstOrDefault(x => x.SettingsType == type); if (integration == null) { return default; } await Preload(); return Items.FirstOrDefault(x => x.IntegrationAlias == integration.Alias) as T; } /// public async Task GetByAlias(string alias) { IIntegrationType integration = RegisteredTypes.FirstOrDefault(x => x.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase)); if (integration == null) { return default; } await Preload(); return Items.FirstOrDefault(x => x.IntegrationAlias == integration.Alias); } /// public async Task GetById(string id) where T : class, IIntegration { return await GetById(id) as T; } } public interface IIntegrationsCollection : ICollectionBase { /// /// Get settings for a specific integration /// Task Get() where T : class, IIntegration; /// /// Get settings for a specific integration /// Task GetByAlias(string alias); /// /// Get settings for a specific integration /// Task GetById(string id) where T : class, IIntegration; } }