using Raven.Client.Documents; using Raven.Client.Documents.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Collections; using zero.Core.Options; namespace zero.Core.Integrations { public class IntegrationsCollection : CollectionConfigBase, IIntegrationsCollection { public IntegrationsCollection(IZeroContext context, ICollectionInterceptorHandler interceptorHandler) : base(context, interceptorHandler) { } protected override IEnumerable GetDefinedTypes() => Context.Options.Integrations.GetAllItems(); /// public async Task Any(string tag) { IEnumerable types = GetDefinedTypes().Cast().Where(x => x.Tags.Contains(tag, StringComparer.InvariantCultureIgnoreCase)); if (!types.Any()) { return false; } //if (types.Any(x => x.IsAutoActivated)) //{ // return true; //} string[] aliases = types.Select(x => x.Alias).ToArray(); return await Session.Query().AnyAsync(x => x.TypeAlias.In(aliases) && x.IsActive); } ///// //public async Task Get() where T : class, IIntegrationModel //{ // Type type = typeof(T); // IIntegration integration = RegisteredTypes.FirstOrDefault(x => x.ModelType == type); // if (integration == null) // { // return default; // } // await Preload(); // return Items.FirstOrDefault(x => x.IntegrationAlias == integration.Alias) as T; //} ///// //public async Task GetByAlias(string alias) //{ // IIntegration 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, IIntegrationModel //{ // return await GetById(id) as T; //} } public interface IIntegrationsCollection : ICollectionBase { ///// ///// Get settings for a specific integration ///// //Task Get() where T : class, IIntegrationModel; ///// ///// Get settings for a specific integration ///// //Task GetByAlias(string alias); ///// ///// Get settings for a specific integration ///// //Task GetById(string id) where T : class, IIntegrationModel; } }