示例#1
0
        /// <summary>
        /// This method returns the reference key and version for the suple reftype/value pair.
        /// </summary>
        /// <param name="transform">The transform.</param>
        /// <param name="reference">The tuple reference.</param>
        /// <returns>Returns the response holder with a response code of 200 if successful</returns>
        public override async Task <IResponseHolder <Tuple <K, string> > > VersionRead(EntityTransformHolder <K, E> transform, Tuple <string, string> reference)
        {
            if (transform == null)
            {
                throw new ArgumentNullException(nameof(transform), "The EntityTransformHolder cannot be null.");
            }

            try
            {
                var resolve = await RedisResolveReference(transform, reference);

                if (resolve.Item1)
                {
                    return new PersistenceResponseHolder <Tuple <K, string> > {
                               StatusCode = 200, IsSuccess = true, Id = transform.KeySerializer(resolve.Item2), VersionId = resolve.Item3, Entity = new Tuple <K, string>(resolve.Item2, resolve.Item3)
                    }
                }
                ;

                return(new PersistenceResponseHolder <Tuple <K, string> > {
                    StatusCode = 404, IsSuccess = false
                });
            }
            catch (Exception)
            {
                return(new PersistenceResponseHolder <Tuple <K, string> > {
                    StatusCode = 500, IsSuccess = false
                });
            }
        }
示例#2
0
        /// <summary>
        /// This method writes out the references for the entity.
        /// </summary>
        /// <param name="batch">The redis batch.</param>
        /// <param name="transform">The entity transform.</param>
        /// <param name="reference">The reference.</param>
        /// <param name="key">The root key.</param>
        /// <param name="version">The entity version.</param>
        /// <param name="expiry">Expiry time of the key</param>
        /// <returns>Returns an async task.</returns>
        protected virtual List <Task> WriteReference(IBatch batch, EntityTransformHolder <K, E> transform, Tuple <string, string> reference, K key, string version, TimeSpan?expiry = null)
        {
            //entityreference.{entitytype}.{keytype i.e., EMAIL, ID etc.}
            RedisKey hashkey = RedisReferenceKeyGet(transform, transform.ReferenceHashMaker(reference));

            return(new List <Task>(3)
            {
                batch.HashSetAsync(hashkey, cnKeyEntityId, transform.KeySerializer(key), when: When.Always),
                batch.HashSetAsync(hashkey, cnKeyVersion, version, when: When.Always),
                batch.KeyExpireAsync(hashkey, expiry ?? mEntityTtl)
            });
        }
示例#3
0
 /// <summary>
 /// This method creates the hash table key to hold the entity information in Redis cache.
 /// </summary>
 /// <param name="transform">The transform object.</param>
 /// <param name="key">The entity key.</param>
 /// <returns>Returns the redis key.</returns>
 protected virtual RedisKey RedisKeyGet(EntityTransformHolder <K, E> transform, K key)
 {
     return($"entity.{transform.EntityName}.{transform.KeySerializer(key)}");
 }
示例#4
0
        /// <summary>
        /// This method reads the version from the cache.
        /// </summary>
        /// <param name="transform">The entity transform.</param>
        /// <param name="key">The entity key.</param>
        /// <returns>Returns the async task.</returns>
        public override async Task <IResponseHolder <Tuple <K, string> > > VersionRead(EntityTransformHolder <K, E> transform, K key)
        {
            if (transform == null)
            {
                throw new ArgumentNullException(nameof(transform), "The EntityTransformHolder cannot be null.");
            }
            try
            {
                IDatabase rDb     = mLazyConnection.Value.GetDatabase();
                RedisKey  hashkey = RedisKeyGet(transform, key);

                //Entity
                RedisValue result = await rDb.HashGetAsync(hashkey, cnKeyVersion);

                if (result.HasValue)
                {
                    return new PersistenceResponseHolder <Tuple <K, string> > {
                               StatusCode = 200, IsSuccess = true, VersionId = result, Id = transform.KeySerializer(key), Entity = new Tuple <K, string>(key, result)
                    }
                }
                ;

                return(new PersistenceResponseHolder <Tuple <K, string> > {
                    StatusCode = 404, IsSuccess = false
                });
            }
            catch (Exception)
            {
                return(new PersistenceResponseHolder <Tuple <K, string> > {
                    StatusCode = 500, IsSuccess = false
                });
            }
        }
示例#5
0
        /// <summary>
        /// Reads the entity from the cache, if it is present.
        /// </summary>
        /// <param name="transform">The transform.</param>
        /// <param name="key">The entity key.</param>
        /// <returns>Returns the response holder.</returns>
        public override async Task <IResponseHolder <E> > Read(EntityTransformHolder <K, E> transform, K key)
        {
            if (transform == null)
            {
                throw new ArgumentNullException(nameof(transform), "The EntityTransformHolder cannot be null.");
            }
            try
            {
                IDatabase rDb     = mLazyConnection.Value.GetDatabase();
                RedisKey  hashkey = RedisKeyGet(transform, key);

                //Entity
                RedisValue result = await rDb.HashGetAsync(hashkey, cnKeyEntity);

                if (result.HasValue)
                {
                    var entity = transform.CacheEntitySerializer.Deserializer(result);
                    return(new PersistenceResponseHolder <E> {
                        StatusCode = 200, Content = result, IsSuccess = true, Entity = entity, Id = transform.KeySerializer(key), VersionId = transform.Version?.EntityVersionAsString(entity)
                    });
                }

                return(new PersistenceResponseHolder <E> {
                    StatusCode = 404, IsSuccess = false
                });
            }
            catch (Exception)
            {
                return(new PersistenceResponseHolder <E> {
                    StatusCode = 500, IsSuccess = false
                });
            }
        }