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