Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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();
            }
        }