Example #1
0
        public IActionResult Search()
        {
            var userSearchSpec    = new UserSearchSpec();
            var criteria          = new Criteria();
            var attributeToReturn = new List <string>();

            attributeToReturn.Add("Username");
            attributeToReturn.Add("Firstname");
            attributeToReturn.Add("UserGuid");
            criteria.Attribute = new ResourceAttribute()
            {
                AttributeType = ResourceAttributeType.String,
                ResourceType  = "User",
                Name          = "Username",
            };

            criteria.Operator = OperatorName.StringEquals;
            criteria.Value    = new List <object>
            {
                "santosh.aryal",
                "shishir.baral"
            };
            userSearchSpec.AddCriteria(criteria);
            userSearchSpec.AttributesToReturn = attributeToReturn;
            return(Json(_userService.Find(userSearchSpec)));
        }
        public IEnumerable <User> Find(UserSearchSpec spec)
        {
            var o   = new Dictionary <string, object>();
            var sql = BuildSql(spec, out o);

            if (sql == string.Empty)
            {
                throw new Exception("Empty Sql");
            }
            return(_context.Connection.Query <User>(sql, new DynamicParameters(o)));
        }
        private string BuildSql(UserSearchSpec spec, out Dictionary <string, object> o)
        {
            var sql = string.Empty;
            var listOfAttributes = string.Join(",", spec.AttributesToReturn);
            var stringBuilder    = new StringBuilder();
            var dict             = new Dictionary <string, object>();

            stringBuilder.AppendLine($"SELECT {listOfAttributes} FROM dbo.Users ");
            if (spec.Criteria.Count > 0)
            {
                stringBuilder.AppendLine(" WHERE ");
            }
            foreach (var criteria in spec.Criteria)
            {
                switch (criteria.Operator)
                {
                case OperatorName.StringEquals:

                    stringBuilder.AppendLine("(");
                    var criteriaBuilder = new List <string>();
                    var i = 0;
                    foreach (var value in criteria.Value)
                    {
                        criteriaBuilder.Add($"{criteria.Attribute.Name}=@{criteria.Attribute.Name}{i}");
                        dict.Add($"@{criteria.Attribute.Name}{i}", value.ToString());
                        ++i;
                    }
                    stringBuilder.Append(string.Join(" OR ", criteriaBuilder));
                    stringBuilder.AppendLine(")");

                    break;

                default:
                    break;
                }
            }
            o = dict;
            return(stringBuilder.ToString());
        }
Example #4
0
 public IEnumerable <User> Find(UserSearchSpec spec)
 {
     return(_userRepo.Find(spec));
 }
Example #5
0
 public IEnumerable <User> Find(UserSearchSpec spec)
 {
     throw new NotImplementedException();
 }
Example #6
0
        public void User_Search_WithSpec_ItemsFound()
        {
            var searchSpec = new UserSearchSpec
            {
                Name = "",
                NameFilter = "%{0}%",
                Active = true,
                Email = "",
                EmailFilter = "%{0}%",
                Login = "",
                LoginFilter = "%{0}%"
            };

            var users = Repository.FindAll<User>(searchSpec);
            Assert.IsTrue(users.Any());
        }