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)); }
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(); }