示例#1
0
        public async Task <IActionResult> PostCardOfUser([FromBody] PostCardOfUserRequest card)
        {
            if (card.FrontSide == null)
            {
                return(ControllerError.BadRequest(localizer["InvalidCardEmptyFrontSide"].Value, this));
            }
            if (card.BackSide == null)
            {
                card.BackSide = "";
            }
            if (card.AdditionalInfo == null)
            {
                card.AdditionalInfo = "";
            }
            if (card.FrontSideImageList == null)
            {
                return(ControllerError.BadRequest("Invalid input: card.FrontSideImageList == null", this));
            }
            if (card.BackSideImageList == null)
            {
                return(ControllerError.BadRequest("Invalid input: card.BackSideImageList == null", this));
            }
            if (card.AdditionalInfoImageList == null)
            {
                return(ControllerError.BadRequest("Invalid input: card.AdditionalInfoImageList == null", this));
            }
            if (card.UsersWithVisibility == null)
            {
                return(ControllerError.BadRequest("Invalid input: card.UsersWithVisibility == null", this));
            }
            if (card.Tags == null)
            {
                return(ControllerError.BadRequest("Invalid input: card.Tags == null", this));
            }

            try
            {
                var user = await userManager.GetUserAsync(HttpContext.User);

                var versionDescription = localizer["InitialCardVersionCreation"].Value;
                var request            = new CreateCard.Request(user, card.FrontSide, card.FrontSideImageList, card.BackSide, card.BackSideImageList, card.AdditionalInfo, card.AdditionalInfoImageList, card.LanguageId, card.Tags, card.UsersWithVisibility, versionDescription);
                var cardId             = await new CreateCard(dbContext).RunAsync(request, localizer);

                if (card.AddToDeck != Guid.Empty)
                {
                    await new AddCardInDeck(dbContext).RunAsync(card.AddToDeck, cardId);
                }

                return(Ok());
            }
            catch (RequestInputException e)
            {
                return(ControllerError.BadRequest(e.Message, this));
            }
            catch (Exception e)
            {
                return(ControllerError.BadRequest(e, this));
            }
        }
示例#2
0
        private async Task GenerateNumberFromNameAsync(BeaufortForce f, Guid userId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = $"Quel est le numéro de la force Beaufort _{f.Name}_ ?";

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == userId && card.FrontSide == frontSide).Any())
            {
                logger.LogInformation($"Card already exists for {f.Name}: {frontSide}");
                return;
            }
            var request = new CreateCard.Request(userId, frontSide, Array.Empty <Guid>(), $"_{f.Number}_", Array.Empty <Guid>(), additionalInfo, Array.Empty <Guid>(), frenchLanguageId, tagId.AsArray(), Array.Empty <Guid>(), CardVersionDescription);

            await new CreateCard(dbContext.AsCallContext()).RunAsync(request);
        }
示例#3
0
        private async Task GenerateMinSpeedForNameAsync(BeaufortForce f, Guid userId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = $"Quelle est la plus faible vitesse de vent par force _{f.Name}_ ?{Environment.NewLine}(En nœuds)";

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == userId && card.FrontSide == frontSide).Any())
            {
                logger.LogInformation($"Card already exists for {f.Name}: {frontSide}");
                return;
            }
            var backSide = $"{f.MinWind} nœuds";
            var request  = new CreateCard.Request(userId, frontSide, Array.Empty <Guid>(), backSide, Array.Empty <Guid>(), additionalInfo, Array.Empty <Guid>(), frenchLanguageId, tagId.AsArray(), Array.Empty <Guid>(), CardVersionDescription);

            await new CreateCard(dbContext.AsCallContext()).RunAsync(request);
        }
示例#4
0
        private async Task CreateCard_WhatIsThisRegionAsync(Region region, MemCheckUser user, Guid regionsAndDepartmentsWithNamesImageId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = "Comment s'appelle cette région française ?";
            var backSide  = region.Name;

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == user.Id && card.FrontSide == frontSide && card.BackSide == backSide).Any())
            {
                logger.LogInformation($"Card already exists for {region.Name}: {frontSide}");
                return;
            }

            var frontSideImages = new[] { region.GetImageDbId(dbContext) };
            var backSideImages  = new[] { regionsAndDepartmentsWithNamesImageId };
            var additionalInfo  = $"Elle est constituée de ces {region.Departments.Count()} départements :{Environment.NewLine}{string.Join(Environment.NewLine, region.Departments)}{Environment.NewLine}{Environment.NewLine}En 2017, sa densité était de {region.Density} habitants par km² (la moyenne métropolitaine étant de 168 h/km²).";
            var request         = new CreateCard.Request(user, frontSide, frontSideImages, backSide, backSideImages, additionalInfo, new Guid[0], frenchLanguageId, new[] { tagId }, new Guid[0], CardVersionDescription);

            await new CreateCard(dbContext).RunAsync(request, new FakeStringLocalizer());
        }
示例#5
0
        private async Task GenerateNameOfForceBelowNumberAsync(BeaufortForce f, Guid userId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = $"Comment s'appelle la force Beaufort juste en-dessous de force {f.Number} ?";

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == userId && card.FrontSide == frontSide).Any())
            {
                logger.LogInformation($"Card already exists for {f.Name}: {frontSide}");
                return;
            }
            if (f.Number - 1 < 0)
            {
                return;
            }
            var backSide = $"_{forceFromNumber[f.Number - 1].Name}_";
            var request  = new CreateCard.Request(userId, frontSide, Array.Empty <Guid>(), backSide, Array.Empty <Guid>(), additionalInfo, Array.Empty <Guid>(), frenchLanguageId, tagId.AsArray(), Array.Empty <Guid>(), CardVersionDescription);

            await new CreateCard(dbContext.AsCallContext()).RunAsync(request);
        }
示例#6
0
        private async Task CreateCard_WhatAreTheDepartmentsInThisRegionAsync(Region region, MemCheckUser user, Guid regionsAndDepartmentsWithNamesImageId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = $"Quels départements y a-t-il dans la région {region.Name} ?";

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == user.Id && card.FrontSide == frontSide).Any())
            {
                logger.LogInformation($"Card already exists for {region.Name}: {frontSide}");
                return;
            }

            var backSide             = string.Join(Environment.NewLine, region.Departments);
            var frontSideImages      = new Guid[0];
            var backSideImages       = new[] { regionsAndDepartmentsWithNamesImageId };
            var additionalInfo       = $"La région {region.Name} est constituée de {region.Departments.Count()} départements.{Environment.NewLine}En 2017, sa densité était de {region.Density} habitants par km² (la moyenne métropolitaine étant de 168 h/km²).";
            var additionalInfoImages = new Guid[0];
            var request = new CreateCard.Request(user, frontSide, frontSideImages, backSide, backSideImages, additionalInfo, additionalInfoImages, frenchLanguageId, new[] { tagId }, new Guid[0], CardVersionDescription);

            await new CreateCard(dbContext).RunAsync(request, new FakeStringLocalizer());
        }
示例#7
0
        private async Task CreateCard_HowManyDepartmentsInThisRegionAsync(Region region, MemCheckUser user, Guid regionsAndDepartmentsWithNamesImageId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = $"Combien y a-t-il de départements dans la région {region.Name} ?";

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == user.Id && card.FrontSide == frontSide).Any())
            {
                logger.LogInformation($"Card already exists for {region.Name}: {frontSide}");
                return;
            }

            var backSide             = region.Departments.Count().ToString();
            var frontSideImages      = new Guid[0];
            var backSideImages       = new[] { regionsAndDepartmentsWithNamesImageId };
            var additionalInfo       = string.Join(Environment.NewLine, region.Departments);
            var additionalInfoImages = new Guid[0];
            var request = new CreateCard.Request(user, frontSide, frontSideImages, backSide, backSideImages, additionalInfo, additionalInfoImages, frenchLanguageId, new[] { tagId }, new Guid[0], CardVersionDescription);

            await new CreateCard(dbContext).RunAsync(request, new FakeStringLocalizer());
        }
示例#8
0
        private async Task CreateCard_WhereIsThisRegionAsync(Region region, MemCheckUser user, Guid regionsWithoutNamesImageId, Guid regionsAndDepartmentsWithNamesImageId, Guid frenchLanguageId, Guid tagId)
        {
            var frontSide = $"Où est la région {region.Name} ?";

            if (dbContext.Cards.Where(card => card.VersionCreator.Id == user.Id && card.FrontSide == frontSide).Any())
            {
                logger.LogInformation($"Card already exists for {region.Name}: {frontSide}");
                return;
            }

            var backSide             = "";
            var frontSideImages      = new[] { regionsWithoutNamesImageId };
            var backSideImages       = new[] { region.GetImageDbId(dbContext) };
            var additionalInfo       = $"Elle est constituée de ces {region.Departments.Length} départements :{Environment.NewLine}{string.Join(Environment.NewLine, region.Departments)}{Environment.NewLine}{Environment.NewLine}En 2017, sa densité était de {region.Density} habitants par km² (la moyenne métropolitaine étant de 168 h/km²).";
            var additionalInfoImages = new[] { regionsAndDepartmentsWithNamesImageId };
            var request = new CreateCard.Request(user.Id, frontSide, frontSideImages, backSide, backSideImages, additionalInfo, additionalInfoImages, frenchLanguageId, tagId.AsArray(), Array.Empty <Guid>(), CardVersionDescription);

            await new CreateCard(dbContext.AsCallContext()).RunAsync(request);
        }
示例#9
0
        async public Task RunAsync(MemCheckDbContext dbContext)
        {
            var lesson = GetPaukerLesson();

            Console.WriteLine(string.Join(',', dbContext.Users));

            var user = dbContext.Users.Where(user => user.UserName == "Voltan").Single();
            var deck = dbContext.Decks.Where(deck => deck.Owner == user).First();
            //var tag = dbContext.Tags.Where(tag => tag.Name == "PaukerImport").Single();
            var cardLanguage = dbContext.CardLanguages.Where(cardLanguage => cardLanguage.Name == "Français").Single();

            logger.LogInformation($"Cards will be added to deck {deck.Description} of user {user.UserName}");// and tag {tag.Name} will be attached");

            const int paukerDisplayedStackIndex = 1;
            var       stack = lesson.Stacks[paukerDisplayedStackIndex + 2];

            logger.LogDebug($"Working on stack '{stack.Name}'");
            logger.LogDebug($"Stack contains {stack.Cards.Count} cards");

            for (int cardIndex = 0; cardIndex < stack.Cards.Count; cardIndex++)
            {
                logger.LogInformation($"Working on card {cardIndex} of {stack.Cards.Count}");
                PaukerCard paukerCard = stack.Cards[cardIndex];
                if (dbContext.Cards.Where(card => card.FrontSide == paukerCard.Front.Text.Trim()).Any())
                {
                    logger.LogInformation($"Card already exists in MemCheck with this front, skipping: {paukerCard.Front.Text}");
                }
                else
                {
                    //var creator = new CreateCard(dbContext);
                    CreateCard.Request request = new CreateCard.Request(
                        user,
                        paukerCard.Front.Text.Trim(),
                        new Guid[0],
                        paukerCard.Reverse.Text.Trim(),
                        new Guid[0],
                        "",
                        new Guid[0],
                        cardLanguage.Id,
                        new Guid[0],
                        new[] { user.Id },
                        CardVersionDescription);

                    var card = new Card()
                    {
                        FrontSide              = request.FrontSide,
                        BackSide               = request.BackSide,
                        AdditionalInfo         = request.AdditionalInfo,
                        CardLanguage           = cardLanguage,
                        VersionCreator         = user,
                        InitialCreationUtcDate = DateTime.Now.ToUniversalTime(),
                        VersionUtcDate         = DateTime.Now.ToUniversalTime()
                    };
                    await dbContext.Cards.AddAsync(card);

                    var usersWithView = new List <UserWithViewOnCard>();
                    var userWithView  = new UserWithViewOnCard()
                    {
                        UserId = user.Id, User = user, CardId = card.Id, Card = card
                    };
                    dbContext.UsersWithViewOnCards.Add(userWithView);
                    usersWithView.Add(userWithView);
                    card.UsersWithView = usersWithView;



                    //return new GetCardsOfUser.ViewModel(card.Id, card.FrontSide, card.BackSide, card.TagsInCards.Select(tagInCard => tagInCard.Tag.Name));



                    //var card = await creator.RunAsync(request, user);

                    var targetHeap = GetBestMemCheckHeap(paukerCard, paukerDisplayedStackIndex);

                    var cardInDeck = new CardInDeck()
                    {
                        CardId                  = card.Id,
                        DeckId                  = deck.Id,
                        CurrentHeap             = targetHeap,
                        LastLearnUtcTime        = paukerCard.LearnedDate().ToUniversalTime(),
                        AddToDeckUtcTime        = DateTime.UtcNow,
                        NbTimesInNotLearnedHeap = 1,
                        BiggestHeapReached      = targetHeap
                    };
                    await dbContext.CardsInDecks.AddAsync(cardInDeck);

                    //dbContext.SaveChanges();

                    //            var cardLoaded = dbContext.Cards.Where(card => card.Id == memCheckCard.Id).Include(card => card.UsersWithView).Single();
                    //            if (!cardLoaded.UsersWithView.Contains(user))
                    //                throw new ApplicationException();
                }

                //logger.LogDebug($"In stack {paukerDisplayedStackIndex}, {expiredCount} would be expired");
            }
            await dbContext.SaveChangesAsync();
        }