Beispiel #1
0
 public CircleNotFoundException(CircleId id, string message) : base(message)
 {
     Id = id.Value;
 }
Beispiel #2
0
 public CircleNotFoundException(CircleId id)
 {
     Id = id.Value;
 }
        public CircleGetCandidatesResult GetCandidates(CircleGetCandidatesCommand command)
        {
            var circleId = new CircleId(command.CircleId);
            var circle   = circleRepository.Find(circleId);

            if (circle == null)
            {
                throw new CircleNotFoundException(circleId);
            }

            using (var sqlCommand = provider.Connection.CreateCommand())
            {
                var parameterNames = circle.Members.Select((_, i) => "@member" + i).ToList();

                var selectQuery = new StringBuilder(@" SELECT * FROM users");

                var appendWhere = false;
                if (circle.ExistsOwner())
                {
                    selectQuery.Append(" WHERE id <> @ownerId");
                    appendWhere = true;
                }

                if (parameterNames.Any())
                {
                    var inParameters = string.Join(",", parameterNames);
                    var inPhrase     = new StringBuilder();
                    if (appendWhere)
                    {
                        inPhrase.Append(" AND");
                    }
                    inPhrase.Append($" id NOT IN ({inParameters})");

                    if (!appendWhere)
                    {
                        selectQuery.Append(" WHERE");
                        appendWhere = true;
                    }

                    selectQuery.Append(inPhrase);
                }
                selectQuery.Append(@"
 ORDER BY id
   OFFSET @skip ROWS
   FETCH NEXT @size ROWS ONLY
");

                sqlCommand.CommandText = selectQuery.ToString();

                if (circle.ExistsOwner())
                {
                    sqlCommand.Parameters.Add(new SqlParameter("@ownerId", circle.Owner.Value));
                }

                foreach (var tpl in circle.Members.Zip(parameterNames, (memberId, parameter) => new { memberId, parameter }))
                {
                    sqlCommand.Parameters.Add(new SqlParameter(tpl.parameter, tpl.memberId.Value));
                }

                var page = command.Page;
                var size = command.Size;
                sqlCommand.Parameters.Add(new SqlParameter("@skip", (page - 1) * size));
                sqlCommand.Parameters.Add(new SqlParameter("@size", size));

                using (var reader = sqlCommand.ExecuteReader())
                {
                    var members = new List <UserData>();
                    while (reader.Read())
                    {
                        var id   = (string)reader["id"];
                        var name = (string)reader["name"];
                        var data = new UserData(id, name);

                        members.Add(data);
                    }

                    return(new CircleGetCandidatesResult(members));
                }
            }
        }
Beispiel #4
0
 public CircleMembers(CircleId id, User owner, List <User> members)
 {
     Id           = id;
     this.owner   = owner;
     this.members = members;
 }
Beispiel #5
0
 public Circle Find(CircleId id)
 {
     throw new System.NotImplementedException();
 }
 public void Id(CircleId id)
 {
     this.id = id;
 }
Beispiel #7
0
 public CircleMembers(CircleId id, User owner, List <User> members)
 {
     Id       = id;
     _owner   = owner;
     _members = members;
 }