Exemplo n.º 1
0
        private async Task SetAsync(Guid userId, Action <UserSetting> setFunction, CancellationToken ct)
        {
            var setting = await _storage.UserSettings
                          .FirstOrDefaultAsync(x => x.UserId == userId, ct);

            if (setting == null)
            {
                setting = new UserSetting();
                var change = setting.CreateWithLog(userId, x =>
                {
                    x.Id     = Guid.NewGuid();
                    x.UserId = userId;
                    setFunction(x);
                    x.CreateDateTime = DateTime.UtcNow;
                });

                await _storage.AddAsync(setting, ct);

                await _storage.AddAsync(change, ct);
            }
            else
            {
                var change = setting.UpdateWithLog(userId, x =>
                {
                    setFunction(x);
                    x.ModifyDateTime = DateTime.UtcNow;
                });

                _storage.Update(setting);
                await _storage.AddAsync(change, ct);
            }

            await _storage.SaveChangesAsync(ct);
        }