public async Task <bool> TryUpdateItemAsync(long userId, Action <UserMutationData> updateAction) { if (userId == 0) { throw new ArgumentNullException(nameof(userId)); } var entity = await OpenDndContext.Users .FirstOrDefaultAsync(x => x.UserId == userId); if (entity == null) { return(false); } var data = UserMutationData.FromEntity(entity); updateAction.Invoke(data); data.ApplyTo(entity); OpenDndContext.UpdateProperty(entity, x => x.Username); OpenDndContext.UpdateProperty(entity, x => x.Password); OpenDndContext.UpdateProperty(entity, x => x.FirstName); OpenDndContext.UpdateProperty(entity, x => x.LastName); OpenDndContext.UpdateProperty(entity, x => x.Role); OpenDndContext.UpdateProperty(entity, x => x.Token); OpenDndContext.UpdateProperty(entity, x => x.Campaigns); await OpenDndContext.SaveChangesAsync(); return(true); }
public async Task <bool> TryUpdateAsync(ulong userId, Action <UserMutationData> updateAction) { if (updateAction == null) { throw new ArgumentNullException(nameof(updateAction)); } var longUserID = (long)userId; var entity = await ModixContext.Users .Where(x => x.Id == longUserID) .FirstOrDefaultAsync(); if (entity == null) { return(false); } var data = UserMutationData.FromEntity(entity); updateAction.Invoke(data); data.ApplyTo(entity); ModixContext.UpdateProperty(entity, x => x.Username); ModixContext.UpdateProperty(entity, x => x.Discriminator); ModixContext.UpdateProperty(entity, x => x.Nickname); ModixContext.UpdateProperty(entity, x => x.LastSeen); await ModixContext.SaveChangesAsync(); return(true); }
/// <inheritdoc /> public async Task CreateOrUpdateAsync(ulong userId, Action <UserMutationData> updateAction) { if (updateAction == null) { throw new ArgumentNullException(nameof(updateAction)); } var longUserId = (long)userId; var createLock = await _createLock.LockAsync(); var entity = await ModixContext.Users .SingleOrDefaultAsync(x => x.Id == longUserId); if (entity != null) { createLock.Dispose(); createLock = null; } else { entity = new UserEntity() { Id = longUserId, FirstSeen = DateTimeOffset.Now }; await ModixContext.Users.AddAsync(entity); } var mutation = UserMutationData.FromEntity(entity); updateAction.Invoke(mutation); mutation.ApplyTo(entity); entity.LastSeen = DateTimeOffset.Now; if (createLock == null) { ModixContext.UpdateProperty(entity, x => x.Username); ModixContext.UpdateProperty(entity, x => x.Discriminator); ModixContext.UpdateProperty(entity, x => x.Nickname); ModixContext.UpdateProperty(entity, x => x.LastSeen); } await ModixContext.SaveChangesAsync(); if (createLock != null) { createLock.Dispose(); } }