예제 #1
0
        public string Execute(string key, string userId)
        {
            IQueryable <KeyKeyValue> kkvs = _dbContext
                                            .AsQueryable <KeyKeyValue>()
                                            .Where(kkv => kkv.Keys.Contains(key) &&
                                                   (string.IsNullOrEmpty(kkv.Scope) || kkv.Scope == userId));

            if (!kkvs.Any())
            {
                return(string.Empty);
            }

            KeyKeyValue keyKeyValue = kkvs.FirstOrDefault(kkv => kkv.Scope == userId) ?? kkvs.First();

            if (keyKeyValue.AlternativeResponses.Count() > 1)
            {
                var number = Random.Next(-1, keyKeyValue.AlternativeResponses.Count());

                return(number == -1 ? keyKeyValue.Response : keyKeyValue.AlternativeResponses.ElementAt(number));
            }

            return(keyKeyValue.Response);
        }
예제 #2
0
        public async Task ExecuteAsync(string userId, string value, ICollection <string> keys)
        {
            foreach (var key in keys)
            {
                var existingKey = _dbContext.AsQueryable <KeyKeyValue>()
                                  .FirstOrDefault(kkv => kkv.Keys.Contains(key) && kkv.Scope == userId);

                if (existingKey != null)
                {
                    await _dbContext.DeleteAsync(existingKey);
                }
            }

            var kkvs = new KeyKeyValue()
            {
                Keys                 = keys,
                Response             = value,
                AlternativeResponses = new List <string>(0),
                Scope                = userId
            };

            await _dbContext.SaveAsync(kkvs);
        }