Example #1
0
        async Task GivenGroupsInDatabase()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = Builder <Api.Domain.User> .CreateNew()
                           .With(u => u.Id            = 1)
                           .With(u => u.Name          = "user")
                           .With(u => u.Password      = Host.EncrypterMock.Object.Md5Hash("pass"))
                           .With(u => u.LastLoginDate = new DateTime(2020, 1, 1))
                           .With(u => u.CreationDate  = new DateTime(2020, 1, 1))
                           .Build();

                dbContext.Users.Add(user);

                var sequence = new SequentialGenerator <long> {
                    Direction = GeneratorDirection.Ascending, Increment = 1
                };
                sequence.StartingWith(1);

                var builder = Builder <Api.Domain.Group> .CreateNew()
                              .With(g => g.Id             = sequence.Generate())
                              .With(g => g.GroupLanguage1 = 1)
                              .With(g => g.GroupLanguage2 = 2)
                              .With(g => g.Name           = "name");

                var groups = new Api.Domain.Group[] { builder.Build(), builder.Build() };

                dbContext.Groups.AddRange(groups);
                await dbContext.SaveChangesAsync();
            }
        }
        public async Task <long> Handle(AddGroupCommand request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var user   = await dbContext.Users.Include(u => u.Groups).SingleOrDefaultAsync(u => u.Id == userId);

            var newGroup = new Domain.Group
            {
                Name              = request.Name,
                GroupLanguage1    = request.LanguageFront,
                GroupLanguage2    = request.LanguageBack,
                User              = user,
                GroupCreationDate = dateTimeProvider.GetTime()
            };

            foreach (var card in request.Cards)
            {
                newGroup.Words.Add(
                    new Domain.Card
                {
                    Heads            = Domain.Side.New(card.Front.Value, card.Front.Example),
                    Tails            = Domain.Side.New(card.Back.Value, card.Back.Example),
                    Comment          = string.Empty,
                    Group            = newGroup,
                    IsVisible        = true,
                    WordCreationDate = dateTimeProvider.GetTime(),
                });
            }

            await dbContext.Groups.AddAsync(newGroup);

            await dbContext.SaveChangesAsync();

            return(newGroup.Id);
        }
Example #3
0
        public async Task <long> Handle(AddCardCommand request, CancellationToken cancellationToken)
        {
            var group = await dbContext.Groups.SingleOrDefaultAsync(g => g.Id == request.GroupId);

            if (group == null)
            {
                throw new Exception();
            }
            var heads   = Domain.Side.New(request.Front.Value, request.Front.Example);
            var tails   = Domain.Side.New(request.Back.Value, request.Back.Example);
            var newCard = new Domain.Card
            {
                Group            = group,
                Heads            = heads,
                Tails            = tails,
                IsVisible        = request.IsVisible,
                WordCreationDate = dateTimeProvider.GetDate(),
            };

            await dbContext.Words.AddAsync(newCard);

            await dbContext.SaveChangesAsync();

            return(newCard.Id);
        }
Example #4
0
 async Task GivenUserInDatabase()
 {
     using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
     {
         dbContext.Users.Add(Utils.GetUser());
         await dbContext.SaveChangesAsync();
     }
 }
        public async Task <Unit> Handle(FinishCommand request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var lesson = await dbContext.Lessons.SingleOrDefaultAsync(l => l.Id == request.LessonId && l.User.Id == userId);

            lesson.FinishDate = timeProvider.GetTime();

            dbContext.Lessons.Update(lesson);
            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
        public async Task <Unit> Handle(DeleteGroupCommand request, CancellationToken cancellationToken)
        {
            ValidateRequest(request);
            var group = await dbContext.Groups.SingleOrDefaultAsync(g => g.Id == request.GroupId);

            if (group == null)
            {
                throw new Exception();
            }
            dbContext.Groups.Remove(group);
            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
        public async Task <Unit> Handle(UpdateGroupCommand request, CancellationToken cancellationToken)
        {
            ValidateRequest(request);
            var group = await dbContext.Groups.SingleOrDefaultAsync(g => g.Id == request.Id);

            group.Name           = request.Name;
            group.GroupLanguage1 = request.LanguageFront;
            group.GroupLanguage2 = request.LanguageBack;

            dbContext.Groups.Update(group);
            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
        public async Task <Unit> Handle(DeleteCardComamnd request, CancellationToken cancellationToken)
        {
            ValidateReqest(request);
            var card = await dbContext.Words.SingleOrDefaultAsync(c => c.Id == request.Id);

            if (card == null)
            {
                throw new Exception();
            }
            dbContext.Words.Remove(card);
            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
Example #9
0
        async Task GivenGroupInDatabase()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = Utils.GetUser();
                dbContext.Users.Add(user);

                var group = Utils.GetGroup();
                group.User = user;

                dbContext.Groups.Add(group);
                await dbContext.SaveChangesAsync();
            }
        }
Example #10
0
        public async Task <Unit> Handle(RegisterCommand request, CancellationToken cancellationToken)
        {
            var hashedPassword = encrypter.Md5Hash(request.Password);

            if (await dbContext.Users.AnyAsync(u => u.Name.Equals(request.UserName) && u.Password.Equals(hashedPassword)))
            {
                throw new ApiException("User already exists", ErrorCode.RegisterUserAlreadyExists);
            }
            var newUser = userCreator.Create(request.UserName, hashedPassword);
            await dbContext.Users.AddAsync(newUser);

            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
Example #11
0
        async Task GivenUserInDatabase()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = Utils.GetUser();
                dbContext.Users.Add(user);

                var lesson = Utils.GetLesson();
                lesson.FinishDate = null;
                lesson.User       = user;
                await dbContext.Lessons.AddAsync(lesson);

                await dbContext.SaveChangesAsync();
            }
        }
        public async Task <Unit> Handle(UpdateCardCommand request, CancellationToken cancellationToken)
        {
            ValidateRequest(request);
            var card = await dbContext.Words.SingleOrDefaultAsync(c => c.Id == request.Id);

            card.Heads.Value   = request.Front.Value;
            card.Heads.Example = request.Front.Example;
            card.Tails.Value   = request.Back.Value;
            card.Tails.Example = request.Back.Example;
            card.IsVisible     = request.IsVisible;
            dbContext.Words.Update(card);
            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
Example #13
0
        async Task GivenUserInDatabase()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = Builder <Api.Domain.User> .CreateNew()
                           .With(u => u.Id            = 1)
                           .With(u => u.Name          = "user")
                           .With(u => u.Password      = Host.EncrypterMock.Object.Md5Hash(GivenPassword))
                           .With(u => u.LastLoginDate = new DateTime(2020, 1, 1))
                           .With(u => u.CreationDate  = new DateTime(2020, 1, 1))
                           .Build();

                dbContext.Users.Add(user);
                await dbContext.SaveChangesAsync();
            }
        }
Example #14
0
        public async Task <string> Handle(LoginCommnad request, CancellationToken cancellationToken)
        {
            var hashedPassword = encrypter.Md5Hash(request.Password);
            var user           = await dbContext.Users.SingleOrDefaultAsync(u =>
                                                                            u.Name.Equals(request.UserName) &&
                                                                            u.Password.Equals(hashedPassword));

            if (user == null)
            {
                throw new ApiException("User is not found", ErrorCode.LoginUserNotFound);
            }
            user.LastLoginDate = dateTimeProvider.GetTime();

            dbContext.Users.Update(user);
            await dbContext.SaveChangesAsync();

            return(authenticationService.Authenticate(user.Id, new string[0]));
        }
Example #15
0
        async Task GivenDatabaseContainData()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = Utils.GetUser();
                dbContext.Users.Add(user);

                var group = Utils.GetGroup();
                group.User = user;
                dbContext.Groups.Add(group);

                var card = Utils.GetCard();
                card.Group = group;

                await dbContext.Words.AddAsync(card);

                await dbContext.SaveChangesAsync();
            }
        }
Example #16
0
        public async Task <long> Handle(StartCommand request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var user   = await dbContext.Users.SingleOrDefaultAsync(u => u.Id == userId);

            if (user == null)
            {
                throw new Exception("user == null");
            }
            var now = timeProvider.GetTime();

            var newLesson = new Domain.Lesson
            {
                User      = user,
                StartDate = now
            };

            dbContext.Lessons.Add(newLesson);
            await dbContext.SaveChangesAsync();

            return(newLesson.Id);
        }
Example #17
0
        async Task GivenGroupInDatabase()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = new Api.Domain.User
                {
                    Id            = 1,
                    Name          = "user",
                    Password      = Host.EncrypterMock.Object.GetSalt(string.Empty),
                    CreationDate  = Host.Time2ProviderMock.Object.GetTime(),
                    LastLoginDate = Host.Time2ProviderMock.Object.GetTime()
                };
                dbContext.Users.Add(user);

                var group = new Api.Domain.Group
                {
                    Id                = 1,
                    GroupLanguage1    = 1,
                    GroupLanguage2    = 2,
                    Name              = "group",
                    GroupCreationDate = Host.Time2ProviderMock.Object.GetTime()
                };
                dbContext.Groups.Add(group);

                var word = new Api.Domain.Card
                {
                    Heads = new Side {
                        Value = "word1"
                    },
                    Tails = new Side {
                        Value = "word2"
                    },
                    IsVisible        = true,
                    WordCreationDate = new DateTime(2020, 01, 01),
                };
                dbContext.Words.Add(word);
                await dbContext.SaveChangesAsync();
            }
        }
Example #18
0
        async Task GivenDatabaseContainData()
        {
            using (var dbContext = new WordkiDbContext(ConnectionStringProvider))
            {
                var user = Utils.GetUser();
                dbContext.Users.Add(user);

                var group = Utils.GetGroup();
                group.User = user;
                dbContext.Groups.Add(group);

                for (int i = 1; i < 4; i++)
                {
                    var word = Utils.GetCard();
                    word.Group            = group;
                    word.Id               = i;
                    word.WordCreationDate = word.WordCreationDate.AddDays(i);
                    dbContext.Words.Add(word);
                }

                await dbContext.SaveChangesAsync();
            }
        }