protected virtual UpdateDefinition <T> ToUpdateDefinition(Updates <T> updates)
        {
            UpdateDefinition <T> updateDefinition = Builders <T> .Update.Combine();

            if (updates.Sets != null)
            {
                foreach (Update <T> update in updates.Sets)
                {
                    updateDefinition = updateDefinition.Set(update.PropertyExpression, update.Value);
                }
            }
            if (updates.Increments != null)
            {
                foreach (Update <T> update in updates.Increments)
                {
                    updateDefinition = updateDefinition.Inc(update.PropertyExpression, update.Value);
                }
            }
            if (updates.SetOnInserts != null)
            {
                foreach (Update <T> update in updates.SetOnInserts)
                {
                    updateDefinition = updateDefinition.SetOnInsert(update.PropertyExpression, update.Value);
                }
            }
            if (updates.Pushes != null)
            {
                foreach (UpdateCollection <T> update in updates.Pushes)
                {
                    var property = new ExpressionFieldDefinition <T>(update.PropertyExpression);
                    updateDefinition = updateDefinition.Push(property, update.Value);
                }
            }
            if (updates.Pulls != null)
            {
                foreach (UpdateCollection <T> update in updates.Pulls)
                {
                    var property = new ExpressionFieldDefinition <T>(update.PropertyExpression);
                    updateDefinition = updateDefinition.Pull(property, update.Value);
                }
            }

            return(updateDefinition);
        }
Exemple #2
0
        public async Task <bool> AddActivityAndManageConnectionToUserAsync(string userId, Activity activity, Connection connection)
        {
            try {
                if (activity != null)
                {
                    UpdateDefinition <User> updateQuery = Builders <User> .Update.Push("Activities", activity);

                    bool isOnline = activity.ActivityType == ChatServer.API.Model.Enum.ActivityType.getOnline;
                    updateQuery = updateQuery.Set("IsOnline", isOnline);
                    if (connection != null)
                    {
                        updateQuery = (isOnline) ? updateQuery.Push("Connections", connection) : updateQuery.Pull("Connections", connection);
                    }
                    await _users.FindOneAndUpdateAsync(Builders <User> .Filter.Eq("Id", userId), updateQuery);

                    return(true);
                }
            } catch (Exception ex) {
                _logger.LogError(ex, "AddActivityAndManageConnectionToUserAsync UserRepository Exception");
            }
            return(false);
        }