/// <summary>
 /// Add non-unique index to store.
 /// </summary>
 /// <param name="store">IndexedDb Store</param>
 /// <param name="name"></param>
 /// <returns>Given IndexedDbStore Instance</returns>
 public static IndexedDbStore AddIndex(this IndexedDbStore store, string name)
 {
     return(store.CreateIndex(name, new IndexedDbIndexParameter()
     {
         Unique = false
     }));
 }
        private static IndexedDbStore CreateKey(this IndexedDbStore store, string name, bool autoIncrement)
        {
            store.Key = new IndexedDbStoreParameter
            {
                KeyPath       = name.ToCamelCase(),
                AutoIncrement = autoIncrement
            };

            return(store);
        }
Beispiel #3
0
        /// <summary>
        /// Creates a new IndexedDbStore and adds it to the Database Model
        /// </summary>
        /// <param name="model"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static IndexedDbStore AddStore(this IndexedDbDatabaseModel model, string name)
        {
            model.Stores ??= new List <IndexedDbStore>();

            var store = new IndexedDbStore {
                Name = name
            };

            model.Stores.Add(store);

            return(store);
        }
Beispiel #4
0
        /// <summary>
        /// Adds a new store named TEntity.Name and adds Key and Indexes based on IndexedDbKey and IndexedDbIndex Attributes
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="model"></param>
        /// <returns></returns>
        public static IndexedDbStore AddStore <TEntity>(this IndexedDbDatabaseModel model)
        {
            model.Stores ??= new List <IndexedDbStore>();

            var store = new IndexedDbStore {
                Name = typeof(TEntity).Name
            };

            store.SetupFrom <TEntity>();

            model.Stores.Add(store);

            return(store);
        }
Beispiel #5
0
        private static IndexedDbStore CreateIndex(this IndexedDbStore store, string name, IndexedDbIndexParameter definition)
        {
            store.Indexes ??= new List <IndexedDbIndex>();

            var index = new IndexedDbIndex
            {
                Name       = name.ToCamelCase(),
                Definition = definition
            };

            store.Indexes.Add(index);

            return(store);
        }
        /// <summary>
        /// Creates a new IndexedDbStore and adds it to the Database Model
        /// </summary>
        /// <param name="model"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static IndexedDbStore AddStore(this IndexedDbDatabaseModel model, string name)
        {
            if (model.Stores == null)
            {
                model.Stores = new List <IndexedDbStore>();
            }

            var store = new IndexedDbStore();

            store.Name = name;

            model.Stores.Add(store);

            return(store);
        }
        private static IndexedDbStore CreateIndex(this IndexedDbStore store, string name, IndexedDbIndexParameter definition)
        {
            if (store.Indexes == null)
            {
                store.Indexes = new List <IndexedDbIndex>();
            }

            var index = new IndexedDbIndex();

            index.Name       = name.ToCamelCase();
            index.Definition = definition;

            store.Indexes.Add(index);

            return(store);
        }
        /// <summary>
        /// Adds a new store and adds Key and Indexes based on IndexedDbKey and IndexedDbIndex Attributes
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="model"></param>
        /// <param name="storeName"></param>
        /// <returns></returns>
        public static IndexedDbStore AddStore <TEntity>(this IndexedDbDatabaseModel model, string storeName)
        {
            if (model.Stores == null)
            {
                model.Stores = new List <IndexedDbStore>();
            }

            var store = new IndexedDbStore();

            store.Name = storeName;

            store.SetupFrom <TEntity>();

            model.Stores.Add(store);

            return(store);
        }
        /// <summary>
        /// Adds Key and Indexes to Store based on IndexedDbKey and IndexedDbIndex Attributes on properties in Type T
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="store"></param>
        /// <returns></returns>
        public static IndexedDbStore SetupFrom <T>(this IndexedDbStore store)
        {
            store.Indexes = null;

            var type  = typeof(T);
            var props = type.GetProperties();

            foreach (var prop in props)
            {
                var keyAttribute   = prop.GetCustomAttribute <IndexDbKeyAttribute>();
                var indexAttribute = prop.GetCustomAttribute <IndexDbIndexAttribute>();

                if (keyAttribute is not null)
                {
                    store.CreateKey(prop.Name, keyAttribute.AutoIncrement);
                    store.CreateIndex(prop.Name, new IndexedDbIndexParameter()
                    {
                        Unique = keyAttribute.Unique
                    });
                }

                if (indexAttribute is not null)
                {
                    store.CreateIndex(prop.Name, new IndexedDbIndexParameter()
                    {
                        Unique = indexAttribute.Unique
                    });
                }
            }

            if (store.Key == null)
            {
                throw new System.Exception($"No IndexDbKey Found on Property Attributes in Class {type.Name}");
            }

            return(store);
        }
 /// <summary>
 /// Add auto-incrementing key to store.
 /// </summary>
 /// <param name="store">IndexedDb Store</param>
 /// <param name="name"></param>
 /// <returns>Given IndexedDbStore Instance</returns>
 public static IndexedDbStore WithAutoIncrementingKey(this IndexedDbStore store, string name)
 {
     return(store.CreateKey(name, autoIncrement: true));
 }