示例#1
0
        private void UpdateNextRepeat(Domain.Card card, QuestionSideEnum questionSide)
        {
            var nextRepeat = nextRepeatCalculator.Calculate(card, questionSide);
            var side       = questionSide == QuestionSideEnum.Heads ? card.Heads : card.Tails;

            side.State.NextRepeat = nextRepeat;
        }
示例#2
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _context.Users.FindAsync(request.UserId);

                if (user == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { user = "******" });
                }

                var card = new Domain.Card
                {
                    AppUser    = user,
                    CardNumber = request.CardNumber,
                    Created    = DateTime.Now
                };

                _context.Cards.Add(card);

                var success = await _context.SaveChangesAsync() > 0;

                if (success)
                {
                    return(Unit.Value);
                }

                throw new Exception("Problem saving changes");
            }
示例#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);
        }
示例#4
0
 public Card(Domain.Card obj)
 {
     CardholderName = obj.CardholderName?.EncryptedString;
     Brand          = obj.Brand?.EncryptedString;
     Number         = obj.Number?.EncryptedString;
     ExpMonth       = obj.ExpMonth?.EncryptedString;
     ExpYear        = obj.ExpYear?.EncryptedString;
     Code           = obj.Code?.EncryptedString;
 }
示例#5
0
        private void AddRepeat(Domain.Card card, QuestionSideEnum questionSide, RepeatResultEnum repeatReuslt, Domain.Lesson lesson)
        {
            var newResult = new Repeat
            {
                DateTime     = timeProvider.GetTime(),
                Lesson       = lesson,
                QuestionSide = questionSide,
                Result       = (int)repeatReuslt,
                Word         = card
            };

            dbContext.Repeats.Add(newResult);
        }
 private Domain.Card GetNextRepeat(Domain.Card minHeads, Domain.Card minTails)
 {
     if (minHeads == null && minTails == null)
     {
         return(null);
     }
     if (minHeads == null)
     {
         return(minTails);
     }
     if (minTails == null)
     {
         return(minHeads);
     }
     return(minHeads.Heads.State.NextRepeat < minTails.Tails.State.NextRepeat ? minHeads : minTails);
 }
示例#7
0
        public async Task Handle_WhenSameCardDifferentUser_ExpectedFailureAsync()
        {
            _mocker.GetMock <IMediator>()
            .Setup(x => x.Send(It.IsAny <GetBankPaymentVerification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(true);

            var cardResponseMock = new Domain.Card(Guid.NewGuid(), "1234567891234567", 541, new Domain.ExpirationDate(2025, 1));

            _mocker.GetMock <IMediator>()
            .Setup(x => x.Send(It.IsAny <GetCardByNumber>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(Option <Domain.Card> .Some(cardResponseMock));

            var paymentTimeStampMock = DateTime.UtcNow;
            var userIdMock           = Guid.NewGuid();

            var paymentListMock = new List <Payment>()
            {
                new Payment(Guid.NewGuid(), new Domain.Card(userIdMock, "1234567891234567", 541, new Domain.ExpirationDate(2025, 1)), new Domain.Money(30, "EUR"), DateTime.UtcNow.AddSeconds(-10))
            };

            _mocker.GetMock <IPaymentRepository>()
            .Setup(x => x.GetPaymentsByUserIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(paymentListMock);



            _mocker.GetMock <ICardRepository>()
            .Setup(x => x.GetCardByNumberAsync(It.IsAny <string>()))
            .ReturnsAsync(cardResponseMock);

            var requestMock = new CreatePayment
                              (
                userIdMock,
                paymentTimeStampMock,
                new Common.Money(25, "EUR"),
                new Common.Card("1234567891234567", 541, new Common.ExpirationDate(2025, 1))
                              );

            var result = await _classUnderTest.Handle(requestMock, It.IsAny <CancellationToken>());

            result.ShouldBeLeft(fail =>
            {
                fail.Should().NotBeNull();
            });
            _mocker.GetMock <IPaymentRepository>().Verify(x => x.SavePaymentAsync(It.IsAny <Payment>()), Times.Never);
            _mocker.GetMock <IMediator>().Verify(x => x.Send(It.IsAny <GetBankPaymentVerification>(), It.IsAny <CancellationToken>()), Times.Never);
        }
示例#8
0
        public static CardRepeatDto ConvertIntoRepeatDto(Domain.Card card, bool revert = false)
        => revert
        ? new CardRepeatDto
        {
            Id     = card.Id,
            Answer = new SideRepeatDto
            {
                Value    = card.Heads.Value,
                Example  = card.Heads.Example,
                Drawer   = card.Heads.State.Drawer.Value,
                Language = card.Group.GroupLanguage1
            },
            Question = new SideRepeatDto
            {
                Value    = card.Tails.Value,
                Example  = card.Tails.Example,
                Drawer   = card.Tails.State.Drawer.Value,
                Language = card.Group.GroupLanguage2
            }
        }

        : new CardRepeatDto
        {
            Id       = card.Id,
            Question = new SideRepeatDto
            {
                Value    = card.Heads.Value,
                Example  = card.Heads.Example,
                Drawer   = card.Heads.State.Drawer.Value,
                Language = card.Group.GroupLanguage1
            },
            Answer = new SideRepeatDto
            {
                Value    = card.Tails.Value,
                Example  = card.Tails.Example,
                Drawer   = card.Tails.State.Drawer.Value,
                Language = card.Group.GroupLanguage2
            }
        };
示例#9
0
            public async Task <CardEnvelope> Handle(Command request, CancellationToken cancellationToken)
            {
                if (await _context.Cards.Where(x => x.CardNumber == request.CardNumber).AnyAsync(cancellationToken))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Card = Constants.ALREADY_EXIST });
                }
                var auditId = _currentUserAccessor.GetAuditId();

                var cardData = new Domain.Card
                {
                    CardNumber  = request.CardNumber,
                    IsActive    = true,
                    CreatedDate = DateTime.Now,
                    AuditId     = auditId
                };
                await _context.Cards.AddAsync(cardData, cancellationToken);

                await _context.SaveChangesAsync(cancellationToken);

                var card = _mapper.Map <Domain.Card, Card>(cardData);

                return(new CardEnvelope(card));
            }
        public async Task Init()
        {
            logger.LogInformation("Beginnin init");
            await dbContext.Database.EnsureCreatedAsync();

            logger.LogInformation("finish init");

            if (!options.Mocks)
            {
                return;
            }

            if (await dbContext.Users.AnyAsync(u => u.Name.Equals("testUser")))
            {
                return;
            }

            var random = new Random();

            var beginningDate = timeProvider.GetTime().AddDays(-7);

            Domain.User user = new Domain.User
            {
                Name          = "testUser",
                CreationDate  = timeProvider.GetTime().AddDays(-7),
                LastLoginDate = timeProvider.GetTime().AddDays(-1),
                Password      = encrypter.Md5Hash("testPassword"),
            };

            for (var i = 0; i < 6; i++)
            {
                var newLesson = new Lesson
                {
                    StartDate  = timeProvider.GetTime().AddDays(-i),
                    FinishDate = timeProvider.GetTime().AddDays(-i).AddMinutes(random.Next(20, 30)),
                    User       = user
                };
                user.Lessons.Add(newLesson);
            }

            for (var i = 0; i < 7; i++)
            {
                var newGroup = new Domain.Group
                {
                    GroupCreationDate = timeProvider.GetTime().AddDays(-i - 1),
                    GroupLanguage1    = 1,
                    GroupLanguage2    = 2,
                    Name = $"Test group {i + 1}",
                    User = user
                };
                user.Groups.Add(newGroup);

                for (var j = 0; j < random.Next(15, 20); j++)
                {
                    var newCard = new Domain.Card
                    {
                        WordCreationDate = timeProvider.GetTime().AddDays(-i - 1),
                        Comment          = "Test comment to word",
                        Group            = newGroup,
                        IsVisible        = true,
                        Heads            = new Side
                        {
                            Value   = $"Word {j + 1}",
                            Example = $"Simple sentance where Word {j + 1} is used.",
                            State   = new State
                            {
                                Drawer     = Drawer.Create(random.Next(0, 4)),
                                NextRepeat = timeProvider.GetTime().AddDays(random.Next(-4, 4))
                            }
                        },
                        Tails = new Side
                        {
                            Value   = $"Słowo {j + 1}",
                            Example = $"Proste zdanie gdzie słowo {j + 1} jest użyte.",
                            State   = new State
                            {
                                Drawer     = Drawer.Create(random.Next(0, 4)),
                                NextRepeat = timeProvider.GetTime().AddDays(random.Next(-4, 4))
                            }
                        },
                    };

                    newGroup.Words.Add(newCard);

                    for (var k = 0; k < random.Next(1, 7); k++)
                    {
                        var lesson    = user.Lessons[random.Next(user.Lessons.Count - 1)];
                        var newRepeat = new Repeat
                        {
                            Lesson       = lesson,
                            DateTime     = newCard.WordCreationDate.AddDays(random.Next(-7, 0)),
                            Result       = random.Next(-1, 1),
                            QuestionSide = random.Next(0, 1) > 0 ? QuestionSideEnum.Heads : QuestionSideEnum.Tails,
                            Word         = newCard
                        };
                        lesson.Repeats.Add(newRepeat);
                        newCard.Repeats.Add(newRepeat);
                    }
                }
            }

            dbContext.Users.Add(user);
            await dbContext.SaveChangesAsync();
        }
示例#11
0
        public async Task <Result <Guid> > Handle(CreatePreAuthorizationForOrderCommand request, CancellationToken token)
        {
            var validationResult = await _orderService.ValidateConsumerOrderAsync(request.OrderId, request.RequestUser, token);

            if (!validationResult.Succeeded)
            {
                return(Failure <Guid>(validationResult));
            }

            var checkResult = await _mediatr.Process(new CheckConsumerConfigurationCommand(request.RequestUser), token);

            if (!checkResult.Succeeded)
            {
                return(Failure <Guid>(checkResult));
            }

            var order = await _context.Orders.SingleAsync(e => e.Id == request.OrderId, token);

            using (var transaction = await _context.BeginTransactionAsync(token))
            {
                var card = await _context.Cards.SingleOrDefaultAsync(c => c.Identifier == request.CardIdentifier, token);

                if (card == null)
                {
                    card = new Domain.Card(Guid.NewGuid(), request.CardIdentifier,
                                           $"Carte_{DateTime.UtcNow.ToString("YYYYMMDDTHHmmss")}", order.User);
                    await _context.AddAsync(card, token);

                    await _context.SaveChangesAsync(token);
                }

                var preAuthorization =
                    new Domain.PreAuthorization(Guid.NewGuid(), order, card, _pspOptions.PreAuthorizeUrl);
                await _context.AddAsync(preAuthorization, token);

                await _context.SaveChangesAsync(token);

                var result = await _pspService.CreatePreAuthorizationAsync(preAuthorization, request.IpAddress, request.BrowserInfo, token);

                if (!result.Succeeded)
                {
                    return(Failure <Guid>(result));
                }

                preAuthorization.SetIdentifier(result.Data.Identifier);
                preAuthorization.SetStatus(result.Data.Status);
                preAuthorization.SetPaymentStatus(result.Data.PaymentStatus);
                preAuthorization.SetExpirationDate(result.Data.ExpirationDate);
                preAuthorization.SetRemaining(result.Data.Remaining);
                preAuthorization.SetDebited(result.Data.Debited);
                preAuthorization.SetResult(result.Data.ResultCode, result.Data.ResultMessage);
                preAuthorization.SetSecureModeRedirectUrl(result.Data.SecureModeRedirectUrl);
                preAuthorization.SetSecureModeNeeded(result.Data.SecureModeNeeded);

                order.SetStatus(OrderStatus.Validated);

                await _context.SaveChangesAsync(token);

                await transaction.CommitAsync(token);

                return(Success(preAuthorization.Id));
            }
        }