private void ThrowNotFoundIfNull(CaffItem caffItem)
 {
     if (caffItem == null)
     {
         throw new CaffStoreNotFoundException();
     }
 }
 private void ThrowForbiddenIfNotCreatedByCurrentUser(CaffItem caffItem)
 {
     if (caffItem.CreatedById != _requestContext.CurrentUserId.Value)
     {
         throw new CaffStoreForbiddenException("CaffItem was not created by current user");
     }
 }
        public async Task <CaffItemDetailsDto> AddCaffItemAsync(AddCaffItemDto caffItem)
        {
            var parseResult = await CaffParser.ParseCaffFileAsync(caffItem.CaffFile.OpenReadStream());

            if (!parseResult.Succeeded)
            {
                throw new CaffStoreBusinessException(parseResult.Message);
            }

            var caffData = _mapper.Map <CaffData>(parseResult.Result);

            // Get all tags
            var parsedTags = caffData.Animations.Select(a => a.CiffData.Tags).SelectMany(t => t).ToList();
            var tagStrings = parsedTags.Select(t => t.Tag.Text).ToHashSet();

            // Prefetch existing tags
            var existingTags = await _context
                               .Tags
                               .Where(t => tagStrings.Contains(t.Text))
                               .ToListAsync();

            // If a tag is already in the database, do not store again, only set reference
            foreach (var parsedTag in parsedTags)
            {
                var existingTag = existingTags
                                  .FirstOrDefault(t => t.Text == parsedTag.Tag.Text);

                if (existingTag == null)
                {
                    existingTags.Add(parsedTag.Tag);
                }
                else
                {
                    parsedTag.Tag = existingTag;
                }
            }

            Guid caffFileId = await _fileService.UploadFileAsync(caffItem.CaffFile.OpenReadStream(), ".caff", FileType.Caff);

            Guid previewFileId;

            await using (var previewStream = new MemoryStream())
            {
                parseResult.Preview.Save(previewStream, ImageFormat.Png);
                previewStream.Position = 0;

                previewFileId = await _fileService.UploadFileAsync(previewStream, ".png", FileType.Preview);
            }

            var caffItemEntity = new CaffItem
            {
                Title           = caffItem.Title,
                Description     = caffItem.Description,
                CaffFileId      = caffFileId,
                PreviewFileId   = previewFileId,
                CaffData        = caffData,
                DownloadedTimes = 0,
            };

            _context.CaffItems.Add(caffItemEntity);

            await _context.SaveChangesAsync();

            return(await GetCaffItemAsync(caffItemEntity.Id));
        }
示例#4
0
        public DatabaseFixture(ITimeService timeService, IHttpRequestContext requestContext)
        {
            var options = new DbContextOptionsBuilder <CaffStoreDbContext>()
                          .UseInMemoryDatabase("CaffStore" + Guid.NewGuid())
                          .Options;

            Context = new CaffStoreDbContext(options, timeService, requestContext);

            Context.Users.Add(new User
            {
                Id                   = 1,
                Email                = "test@test",
                EmailConfirmed       = false,
                PhoneNumberConfirmed = false,
                TwoFactorEnabled     = false,
                LockoutEnabled       = false,
                AccessFailedCount    = 0,
                FirstName            = "Test",
                LastName             = "Name",
                IsDeleted            = false
            });

            var caffItem = new CaffItem
            {
                Id          = 1,
                Title       = "Test Title",
                Description = "Test Description",
                CaffData    = new CaffData
                {
                    Creation   = DateTime.Now,
                    Creator    = "Test Creator",
                    Animations = new List <CaffAnimationData>
                    {
                        new CaffAnimationData
                        {
                            Order    = 0,
                            Duration = 100,
                            CiffData = new CiffData
                            {
                                Width   = 300,
                                Height  = 500,
                                Caption = "Test Caption",
                                Tags    = new List <CiffDataTag>
                                {
                                    new CiffDataTag {
                                        Tag = new Tag {
                                            Text = "Test Tag"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var deletedCaffItem = new CaffItem
            {
                Id          = 2,
                Title       = "Deleted Test Title",
                Description = "Deleted Test Description",
                CaffData    = new CaffData
                {
                    Creation   = DateTime.Now.AddDays(-1),
                    Creator    = "Deleted Test Creator",
                    Animations = new List <CaffAnimationData>
                    {
                        new CaffAnimationData
                        {
                            Order    = 0,
                            Duration = 100,
                            CiffData = new CiffData
                            {
                                Width   = 300,
                                Height  = 500,
                                Caption = "Deleted Test Caption",
                                Tags    = new List <CiffDataTag>
                                {
                                    new CiffDataTag {
                                        Tag = new Tag {
                                            Text = "Test Tag"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            Context.CaffItems.Add(caffItem);
            Context.CaffItems.Add(deletedCaffItem);

            Context.CaffItemComments.Add(new CaffItemComment
            {
                CaffItem = caffItem,
                Comment  = new Comment
                {
                    Id   = 1,
                    Text = "Test comment",
                }
            });

            Context.SaveChanges();
        }