示例#1
0
            public async Task CheckValidityAsync(IStringLocalizer localizer, MemCheckDbContext dbContext)
            {
                CardInputValidator.Run(this, localizer);

                var cards = dbContext.Cards
                            .Include(card => card.CardLanguage)
                            .Include(card => card.Images)
                            .Include(card => card.TagsInCards)
                            .ThenInclude(tag => tag.Tag)
                            .Include(card => card.UsersWithView)
                            .AsSingleQuery()
                            .Where(card => card.Id == CardId);

                if (!await cards.AnyAsync())
                {
                    throw new RequestInputException("Unknown card id");
                }
                var card             = cards.Single();
                var dataBeforeUpdate = new
                {
                    CardLanguageId = card.CardLanguage.Id,
                    card.FrontSide,
                    card.BackSide,
                    card.AdditionalInfo,
                    TagIds = card.TagsInCards.Select(tag => tag.TagId),
                    UserWithVisibilityIds = card.UsersWithView.Select(u => u.UserId),
                    card.Images
                };

                if ((dataBeforeUpdate.CardLanguageId == LanguageId) &&
                    (dataBeforeUpdate.FrontSide == FrontSide) &&
                    (dataBeforeUpdate.BackSide == BackSide) &&
                    (dataBeforeUpdate.AdditionalInfo == AdditionalInfo) &&
                    Enumerable.SequenceEqual(dataBeforeUpdate.TagIds.OrderBy(tagId => tagId), Tags.OrderBy(tagId => tagId)) &&
                    Enumerable.SequenceEqual(dataBeforeUpdate.UserWithVisibilityIds.OrderBy(userId => userId), UsersWithVisibility.OrderBy(userId => userId)) &&
                    SameImageLists(dataBeforeUpdate.Images))
                {
                    throw new RequestInputException(localizer["CanNotUpdateMetadataBecauseSameAsOriginal"].Value);
                }

                //to do: reducing UsersWithView must check that this will not break anybody's deck, nor prevent an author of a version of this card from viewing it
            }
示例#2
0
        public async Task <Guid> RunAsync(Request request, IStringLocalizer localizer)
        {
            CardInputValidator.Run(request, localizer);

            var language = dbContext.CardLanguages.Where(language => language.Id == request.LanguageId).Single();

            var card = new Card()
            {
                FrontSide              = request.FrontSide,
                BackSide               = request.BackSide,
                AdditionalInfo         = request.AdditionalInfo,
                CardLanguage           = language,
                VersionCreator         = request.VersionCreator,
                InitialCreationUtcDate = DateTime.Now.ToUniversalTime(),
                VersionUtcDate         = DateTime.Now.ToUniversalTime(),
                VersionDescription     = request.VersionDescription
            };

            dbContext.Cards.Add(card);

            var usersWithView = new List <UserWithViewOnCard>();

            foreach (var userFromRequestId in request.UsersWithVisibility)
            {
                var userFromDb   = dbContext.Users.Where(u => u.Id == userFromRequestId).Single();
                var userWithView = new UserWithViewOnCard()
                {
                    UserId = userFromDb.Id, User = userFromDb, CardId = card.Id, Card = card
                };
                dbContext.UsersWithViewOnCards.Add(userWithView);
                usersWithView.Add(userWithView);
            }
            card.UsersWithView = usersWithView;

            var tagsInCards = new List <TagInCard>();

            foreach (var tagToAdd in request.Tags)
            {
                var tagFromDb = dbContext.Tags.Where(t => t.Id == tagToAdd).Single();
                var tagInCard = new TagInCard()
                {
                    TagId = tagFromDb.Id, Tag = tagFromDb, CardId = card.Id
                };
                dbContext.TagsInCards.Add(tagInCard);
                tagsInCards.Add(tagInCard);
            }
            card.TagsInCards = tagsInCards;

            var cardImageList = new List <ImageInCard>();

            foreach (var image in request.FrontSideImageList)
            {
                AddImage(card.Id, image, 1, cardImageList);
            }
            foreach (var image in request.BackSideImageList)
            {
                AddImage(card.Id, image, 2, cardImageList);
            }
            foreach (var image in request.AdditionalInfoImageList)
            {
                AddImage(card.Id, image, 3, cardImageList);
            }
            card.Images = cardImageList;

            await dbContext.SaveChangesAsync();

            return(card.Id);
        }
示例#3
0
 public async Task CheckValidityAsync(CallContext callContext)
 {
     CardInputValidator.Run(this, callContext.Localized);
     await Task.CompletedTask;
 }