Example #1
0
        public async Task TrackUsagesAsync(UsageUpdate update)
        {
            Guard.NotNull(update, nameof(update));

            if (update.Counters.Count > 0)
            {
                var(filter, updateStatement) = CreateOperation(update);

                await Collection.UpdateOneAsync(filter, updateStatement, Upsert);
            }
        }
Example #2
0
        public async Task TrackUsagesAsync(UsageUpdate update,
                                           CancellationToken ct = default)
        {
            Guard.NotNull(update);

            if (update.Counters.Count > 0)
            {
                var(filter, updateStatement) = CreateOperation(update);

                await Collection.UpdateOneAsync(filter, updateStatement, Upsert, ct);
            }
        }
Example #3
0
        private static (FilterDefinition <MongoUsage>, UpdateDefinition <MongoUsage>) CreateOperation(UsageUpdate usageUpdate)
        {
            var id = $"{usageUpdate.Key}_{usageUpdate.Date:yyyy-MM-dd}_{usageUpdate.Category}";

            var update = Update
                         .SetOnInsert(x => x.Key, usageUpdate.Key)
                         .SetOnInsert(x => x.Date, usageUpdate.Date)
                         .SetOnInsert(x => x.Category, usageUpdate.Category);

            foreach (var(key, value) in usageUpdate.Counters)
            {
                update = update.Inc($"Counters.{key}", value);
            }

            var filter = Filter.Eq(x => x.Id, id);

            return(filter, update);
        }