public void RemoveResource(long resourceId) { var resource = m_resourceRepository.FindById <Resource>(resourceId); var pageResource = m_resourceRepository.GetLatestResourceVersion <PageResource>(resourceId); var trackResource = m_resourceRepository.GetLatestResourceVersion <TrackResource>(resourceId); resource.IsRemoved = true; m_resourceRepository.Update(resource); if (pageResource != null) { var textResourceVersion = m_resourceRepository.GetLatestPageText(resourceId); TryRemoveResource(textResourceVersion); var imageResourceVersion = m_resourceRepository.GetLatestPageImage(resourceId); TryRemoveResource(imageResourceVersion); var chapterResourcesVersion = m_resourceRepository.GetLatestChaptersByPages(new[] { resourceId }); TryRemoveResources(chapterResourcesVersion); } if (trackResource != null) { var audioResourceVersion = m_resourceRepository.GetAudioRecordingsByTrack(resourceId); TryRemoveResources(audioResourceVersion); } }
protected override long ExecuteWorkImplementation() { var now = DateTime.UtcNow; var user = m_favoritesRepository.Load <User>(m_userId); var bookPage = m_resourceRepository.GetLatestResourceVersion <PageResource>(m_data.PageId); if (bookPage == null) { throw new MainServiceException(MainServiceErrorCode.PageNotFound, $"Page with ID {m_data.PageId} not found", HttpStatusCode.NotFound, new object[] { m_data.PageId }); } var label = GetFavoriteLabelAndCheckAuthorization(m_data.FavoriteLabelId, user.Id); label.LastUseTime = now; var favoriteItem = new FavoritePage { ResourcePage = bookPage.Resource, Title = m_data.Title, FavoriteLabel = label, CreateTime = now, }; var resultId = (long)m_favoritesRepository.Create(favoriteItem); return(resultId); }
protected override void ExecuteWorkImplementation() { var now = DateTime.UtcNow; var user = m_resourceRepository.Load <User>(m_userId); var resourceBeginningPage = m_resourceRepository.Load <Resource>(m_chapterData.BeginningPageId); var resourceParentChapter = m_chapterData.ParentChapterId != null ? m_resourceRepository.Load <Resource>(m_chapterData.ParentChapterId.Value) : null; if ((m_projectId == null && m_resourceId == null) || (m_projectId != null && m_resourceId != null)) { throw new MainServiceException(MainServiceErrorCode.ProjectIdOrResourceId, "Exactly one parameter (ProjectId or ResourceId) has to be specified"); } var chapterResource = new ChapterResource { Name = m_chapterData.Name, Comment = m_chapterData.Comment, Position = m_chapterData.Position, ParentResource = resourceParentChapter, ResourceBeginningPage = resourceBeginningPage, Resource = null, VersionNumber = 0, CreateTime = now, CreatedByUser = user, }; if (m_resourceId != null) { var latestChapterResource = m_resourceRepository.GetLatestResourceVersion <ChapterResource>(m_resourceId.Value); if (latestChapterResource == null) { throw new MainServiceException(MainServiceErrorCode.EntityNotFound, "The entity was not found."); } chapterResource.Resource = latestChapterResource.Resource; chapterResource.VersionNumber = latestChapterResource.VersionNumber + 1; } else { var resource = new Resource { ContentType = ContentTypeEnum.Chapter, ResourceType = ResourceTypeEnum.Chapter, Project = m_resourceRepository.Load <Project>(m_projectId), }; chapterResource.Resource = resource; chapterResource.VersionNumber = 1; } chapterResource.Resource.Name = m_chapterData.Name; chapterResource.Resource.LatestVersion = chapterResource; m_resourceRepository.Create(chapterResource); ResourceId = chapterResource.Resource.Id; VersionId = chapterResource.Id; }
protected override void ExecuteWorkImplementation() { var now = DateTime.UtcNow; var user = m_resourceRepository.Load <User>(m_userId); if ((m_projectId == null && m_resourceId == null) || (m_projectId != null && m_resourceId != null)) { throw new MainServiceException(MainServiceErrorCode.ProjectIdOrResourceId, "Exactly one parameter (ProjectId or ResourceId) has to be specified"); } var pageResource = new PageResource { Name = m_pageData.Name, Comment = m_pageData.Comment, Position = m_pageData.Position, Resource = null, VersionNumber = 0, CreateTime = now, CreatedByUser = user, Terms = null, // Terms must be also updated }; if (m_resourceId != null) { var latestPageResource = m_resourceRepository.GetLatestResourceVersion <PageResource>(m_resourceId.Value); if (latestPageResource == null) { throw new MainServiceException(MainServiceErrorCode.EntityNotFound, "The entity was not found."); } pageResource.Resource = latestPageResource.Resource; pageResource.VersionNumber = latestPageResource.VersionNumber + 1; pageResource.Terms = new List <Term>(latestPageResource.Terms); // Lazy fetch } else { var resource = new Resource { ContentType = ContentTypeEnum.Page, ResourceType = ResourceTypeEnum.Page, Project = m_resourceRepository.Load <Project>(m_projectId), }; pageResource.Resource = resource; pageResource.VersionNumber = 1; } pageResource.Resource.Name = m_pageData.Name; pageResource.Resource.LatestVersion = pageResource; m_resourceRepository.Create(pageResource); ResourceId = pageResource.Resource.Id; VersionId = pageResource.Id; }
protected override long ExecuteWorkImplementation() { var timeNow = DateTime.UtcNow; var latestPageVersion = m_resourceRepository.GetLatestResourceVersion <PageResource>(m_pageId); if (latestPageVersion == null) { throw new MainServiceException(MainServiceErrorCode.EntityNotFound, $"PageResource with ResourceId={m_pageId} was not found"); } var latestTextVersion = m_resourceRepository.GetLatestPageText(m_pageId); if (latestTextVersion != null) { throw new MainServiceException( MainServiceErrorCode.ChangeInConflict, $"Conflict. Text already exists for specified page with ID {m_pageId}." ); } var newResource = new Resource { Project = latestPageVersion.Resource.Project, Name = $"{latestPageVersion.Name}.md", ContentType = ContentTypeEnum.Page, NamedResourceGroup = null, ResourceType = ResourceTypeEnum.Text, }; var newVersion = new TextResource { CreatedByUser = m_resourceRepository.Load <User>(m_userId), CreateTime = timeNow, ExternalId = null, ResourcePage = latestPageVersion.Resource, Resource = newResource, VersionNumber = 1, }; newVersion.Resource.LatestVersion = newVersion; m_resourceRepository.Create(newVersion); var externalTextId = m_fulltextStorage.CreateNewTextVersion(newVersion, m_data.Text); newVersion.ExternalId = externalTextId; m_resourceRepository.Update(newVersion); return(newResource.Id); }
protected override long ExecuteWorkImplementation() { var now = DateTime.UtcNow; var latestAudio = m_resourceRepository.GetLatestResourceVersion <AudioResource>(m_audioId); if (latestAudio.Id != m_data.OriginalVersionId) { throw new MainServiceException( MainServiceErrorCode.ResourceModified, $"Conflict. Current latest versionId is {latestAudio.Id}, but originalVersionId was specified {m_data.OriginalVersionId}", HttpStatusCode.Conflict ); } var audioType = AudioEnumHelper.FileNameToAudioType(m_data.FileName); var mimeType = MimeMapping.MimeUtility.GetMimeMapping(m_data.FileName); var user = m_resourceRepository.Load <User>(m_userId); var resourceTrack = m_data.ResourceTrackId != null ? m_resourceRepository.Load <Resource>(m_data.ResourceTrackId.Value) : null; var newAudioResource = new AudioResource { CreateTime = now, CreatedByUser = user, Comment = m_data.Comment, FileId = null, // Must be added after saving in FileStorageManager FileName = m_data.FileName, MimeType = mimeType, Resource = latestAudio.Resource, ResourceTrack = resourceTrack, AudioType = audioType, Duration = m_data.Duration, VersionNumber = latestAudio.VersionNumber + 1, }; newAudioResource.Resource.LatestVersion = newAudioResource; var resourceVersionId = (long)m_resourceRepository.Create(newAudioResource); var fileInfo = m_fileSystemManager.SaveResource(ResourceType.Audio, latestAudio.Resource.Project.Id, m_fileStream); newAudioResource.FileId = fileInfo.FileNameId; m_resourceRepository.Update(newAudioResource); return(resourceVersionId); }
protected override void ExecuteWorkImplementation() { var termList = new List <Term>(); foreach (var id in m_termIdList) { var termEntity = m_resourceRepository.Load <Term>(id); termList.Add(termEntity); } var pageResource = m_resourceRepository.GetLatestResourceVersion <PageResource>(m_pageId); pageResource.Terms = termList; m_resourceRepository.Update(pageResource); }
protected override void ExecuteWorkImplementation() { var now = DateTime.UtcNow; var user = m_resourceRepository.Load <User>(m_userId); var dbChapters = m_resourceRepository.GetProjectLatestChapters(m_projectId); var updatedResourceChapterIds = new List <long>(); foreach (var chapter in m_chapterData) { var resourceBeginningPage = m_resourceRepository.Load <Resource>(chapter.BeginningPageId); var resourceParentChapter = chapter.ParentChapterId != null ? m_resourceRepository.Load <Resource>(chapter.ParentChapterId.Value) : null; var chapterResource = new ChapterResource { Name = chapter.Name, Comment = chapter.Comment, Position = chapter.Position, Resource = null, ParentResource = resourceParentChapter, ResourceBeginningPage = resourceBeginningPage, VersionNumber = 0, CreateTime = now, CreatedByUser = user, }; if (chapter.Id == null) { var resource = new Resource { ContentType = ContentTypeEnum.Chapter, ResourceType = ResourceTypeEnum.Chapter, Project = m_resourceRepository.Load <Project>(m_projectId), }; chapterResource.Resource = resource; chapterResource.VersionNumber = 1; } else { var latestChapterResource = m_resourceRepository.GetLatestResourceVersion <ChapterResource>(chapter.Id.Value); if (latestChapterResource == null) { throw new MainServiceException(MainServiceErrorCode.EntityNotFound, "The entity was not found."); } chapterResource.Resource = latestChapterResource.Resource; chapterResource.VersionNumber = latestChapterResource.VersionNumber + 1; updatedResourceChapterIds.Add(chapter.Id.Value); } chapterResource.Resource.Name = chapter.Name; chapterResource.Resource.LatestVersion = chapterResource; m_resourceRepository.Create(chapterResource); } var removeResourceSubwork = new RemoveResourceSubwork(m_resourceRepository); foreach (var dbChapter in dbChapters) { if (!updatedResourceChapterIds.Contains(dbChapter.Resource.Id)) { removeResourceSubwork.RemoveResource(dbChapter.Resource.Id); } } }
protected override NewResourceResultContract ExecuteWorkImplementation() { var now = DateTime.UtcNow; ImageResource latestImage; if (m_data.ImageId == null || m_data.OriginalVersionId == null) { var newResourceResult = TryCreateNewResource(); latestImage = new ImageResource // simulate previous ImageResource version which doesn't exist yet { Resource = newResourceResult.Item1, ResourcePage = newResourceResult.Item2.Resource, VersionNumber = 0, }; } else { latestImage = m_resourceRepository.GetLatestResourceVersion <ImageResource>(m_data.ImageId.Value); if (latestImage.Id != m_data.OriginalVersionId) { throw new MainServiceException( MainServiceErrorCode.ResourceModified, $"Conflict. Current latest versionId is {latestImage.Id}, but originalVersionId was specified {m_data.OriginalVersionId}", HttpStatusCode.Conflict ); } } var user = m_resourceRepository.Load <User>(m_userId); var mimeType = MimeMapping.MimeUtility.GetMimeMapping(m_data.FileName); var newImageResource = new ImageResource { CreateTime = now, CreatedByUser = user, Comment = m_data.Comment, FileId = null, // Must be added after saving in FileStorageManager FileName = m_data.FileName, MimeType = mimeType, Resource = latestImage.Resource, ResourcePage = latestImage.ResourcePage, Size = 0, // Must be added after saving in FileStorageManager VersionNumber = latestImage.VersionNumber + 1, }; newImageResource.Resource.LatestVersion = newImageResource; newImageResource.Resource.Name = m_data.FileName; m_resourceRepository.Create(newImageResource); var fileInfo = m_fileSystemManager.SaveResource(ResourceType.Image, latestImage.Resource.Project.Id, m_fileStream); newImageResource.FileId = fileInfo.FileNameId; newImageResource.Size = fileInfo.FileSize; m_resourceRepository.Update(newImageResource); return(new NewResourceResultContract { ResourceId = newImageResource.Resource.Id, ResourceVersionId = newImageResource.Id, VersionNumber = newImageResource.VersionNumber, }); }
protected override void ExecuteWorkImplementation() { var now = DateTime.UtcNow; var user = m_resourceRepository.Load <User>(m_userId); var dbPages = m_resourceRepository.GetProjectLatestPages(m_projectId); var updatedResourcePageIds = new List <long>(); foreach (var newPage in m_newPages) { var pageResource = new PageResource { Name = newPage.Name, Comment = null, Position = newPage.Position, Resource = null, VersionNumber = 0, CreateTime = now, CreatedByUser = user, Terms = null, // Terms must be also updated }; if (newPage.Id == null) { var resource = new Resource { ContentType = ContentTypeEnum.Page, ResourceType = ResourceTypeEnum.Page, Project = m_resourceRepository.Load <Project>(m_projectId), }; pageResource.Resource = resource; pageResource.VersionNumber = 1; } else { var latestPageResource = m_resourceRepository.GetLatestResourceVersion <PageResource>(newPage.Id.Value); if (latestPageResource == null) { throw new MainServiceException(MainServiceErrorCode.EntityNotFound, "The entity was not found."); } pageResource.Resource = latestPageResource.Resource; pageResource.VersionNumber = latestPageResource.VersionNumber + 1; pageResource.Terms = new List <Term>(latestPageResource.Terms); // Lazy fetch updatedResourcePageIds.Add(newPage.Id.Value); } pageResource.Resource.Name = newPage.Name; pageResource.Resource.LatestVersion = pageResource; m_resourceRepository.Create(pageResource); } var removeResourceSubwork = new RemoveResourceSubwork(m_resourceRepository); foreach (var dbPage in dbPages) { if (!updatedResourcePageIds.Contains(dbPage.Resource.Id)) { removeResourceSubwork.RemoveResource(dbPage.Resource.Id); } } }