Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
        }
Пример #4
0
        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;
        }
Пример #5
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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,
            });
        }
Пример #10
0
        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);
                }
            }
        }