public ICollection <PresentationTag> MapToPresentationTag(PresentationViewModel presentationViewModel, SpeakerProfile presentationOwner) { ICollection <string> tags = presentationViewModel.Tags.Split(" "); Presentation presentation = new Presentation() { Title = presentationViewModel.Title, ShortDescription = presentationViewModel.ShortDescription, LongDescription = presentationViewModel.LongDescription, PresentationOwner = presentationOwner }; ICollection <PresentationTag> presentationTags = new List <PresentationTag>(); foreach (var tagName in tags) { PresentationTag presentationTag = new PresentationTag() { Presentation = presentation, Tag = new Tag() { TagName = tagName } }; presentationTags.Add(presentationTag); } return(presentationTags); }
private async Task <OperationStatus> ModifyPresentationInPlace(string userId, Presentation p, UploadPresentationModel updateModel) { p.Name = updateModel.Name; p.Description = updateModel.Description; p.CategoryId = updateModel.CategoryId; p.IsPublic = updateModel.IsPublic; p.PresentationTags = new List <PresentationTag>(); var associatedPTs = await _context.PresentationTags.Where(pt => pt.PresentationId == p.Id).ToListAsync(); _context.PresentationTags.RemoveRange(associatedPTs); var newTagsResult = await _tagsRepository.CreateOrGetTags(updateModel.Tags); if (newTagsResult.ErrorMessageIfAny != null) { return(newTagsResult); } foreach (var tag in newTagsResult.Value) { var pt = new PresentationTag { Tag = tag, Presentation = p }; tag.PresentationTags.Add(pt); p.PresentationTags.Add(pt); } if (updateModel.SourceStream != null) { await _filesRepository.DeleteFileWithId(p.FileID); var createResult = await _filesRepository.SaveFile(updateModel.SourceStream); if (createResult.ErrorMessageIfAny != null) { return(createResult); } p.FileID = createResult.Value; } _context.Presentations.Update(p); var rows = await _context.SaveChangesAsync(); if (rows == 0) { return(new OperationStatus { ErrorMessageIfAny = "An error ocurred while trying to update the database" }); } return(new OperationStatus()); }
public async Task <OperationStatus> UploadPresentationForUser(string userId, UploadPresentationModel model) { var upList = await _context.UserPresentations.Where(userPresentation => userPresentation.UserId == userId) .Include(userp => userp.Presentation).Where(userp => userp.Presentation.Name == model.Name).ToListAsync(); if (upList.Count > 0) { return(new OperationStatus { ErrorMessageIfAny = OperationStatus.kPresentationWithSameNameExists }); } if (!_context.Categories.Any(c => c.Id == model.CategoryId)) { return(new OperationStatus { ErrorMessageIfAny = OperationStatus.kNoSuchCategoryWithId }); } var tagsForPresentationResult = await _tagsRepository.CreateOrGetTags(model.Tags); if (tagsForPresentationResult.ErrorMessageIfAny != null) { return(tagsForPresentationResult); } var tagsForPresentation = tagsForPresentationResult.Value; var currentPresentation = new Presentation { Name = model.Name, Description = model.Description, UserPresentations = new List <UserPresentation>(), CategoryId = model.CategoryId, PresentationTags = new List <PresentationTag>(), IsPublic = model.IsPublic }; var saveResult = await _filesRepository.SaveFile(model.SourceStream); if (saveResult.ErrorMessageIfAny != null) { return(saveResult); } currentPresentation.FileID = saveResult.Value; await _context.Presentations.AddAsync(currentPresentation); foreach (var tag in tagsForPresentation) { var pt = new PresentationTag { Tag = tag, Presentation = currentPresentation }; tag.PresentationTags.Add(pt); currentPresentation.PresentationTags.Add(pt); } var up = new UserPresentation { PresentationId = currentPresentation.Id, UserId = userId }; _context.UserPresentations.Add(up); int rows = await _context.SaveChangesAsync(); if (rows > 0) { return(new OperationStatus()); } return(new OperationStatus() { ErrorMessageIfAny = OperationStatus.kUnknownError }); }