示例#1
0
        public ArticleView Render(ArticleModel source, int libraryId, int periodicalId, int volumeNumber, int issueNumber)
        {
            var result = source.Map();
            var links  = new List <LinkView>
            {
                _linkRenderer.Render(new Link
                {
                    ActionName = nameof(ArticleController.GetArticleById),
                    Method     = HttpMethod.Get,
                    Rel        = RelTypes.Self,
                    Parameters = new { libraryId = libraryId, periodicalId = periodicalId, volumeNumber = volumeNumber, issueNumber = issueNumber, articleId = source.Id }
                }),
                _linkRenderer.Render(new Link
                {
                    ActionName = nameof(PeriodicalController.GetPeriodicalById),
                    Method     = HttpMethod.Get,
                    Rel        = RelTypes.Periodical,
                    Parameters = new { libraryId = libraryId, periodicalId = periodicalId }
                }),
                _linkRenderer.Render(new Link
                {
                    ActionName = nameof(IssueController.GetIssueById),
                    Method     = HttpMethod.Get,
                    Rel        = RelTypes.Issue,
                    Parameters = new { libraryId = libraryId, periodicalId = periodicalId, volumeNumber = volumeNumber, issueNumber = issueNumber }
                })
            };

            if (_userHelper.IsWriter(libraryId))
            {
                links.Add(_linkRenderer.Render(new Link
                {
                    ActionName = nameof(ArticleController.UpdateArticle),
                    Method     = HttpMethod.Put,
                    Rel        = RelTypes.Update,
                    Parameters = new { libraryId = libraryId, periodicalId = periodicalId, volumeNumber = volumeNumber, issueNumber = issueNumber, articleId = source.Id }
                }));

                links.Add(_linkRenderer.Render(new Link
                {
                    ActionName = nameof(ArticleController.DeleteArticle),
                    Method     = HttpMethod.Delete,
                    Rel        = RelTypes.Delete,
                    Parameters = new { libraryId = libraryId, periodicalId = periodicalId, volumeNumber = volumeNumber, issueNumber = issueNumber, articleId = source.Id }
                }));

                links.Add(_linkRenderer.Render(new Link
                {
                    ActionName = nameof(ArticleController.CreateArticleContent),
                    Method     = HttpMethod.Post,
                    Rel        = RelTypes.AddContent,
                    Parameters = new { libraryId = libraryId, periodicalId = periodicalId, volumeNumber = volumeNumber, issueNumber = issueNumber, articleId = source.Id }
                }));
            }

            if (_userHelper.IsAuthenticated)
            {
                var contents = new List <ArticleContentView>();
                foreach (var content in source.Contents)
                {
                    contents.Add(Render(content, libraryId));
                }

                result.Contents = contents;
            }

            result.Links = links;
            return(result);
        }