Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 37 additions & 5 deletions src/SSCMS.Web/Controllers/V1/ChannelsController.Get.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using NSwag.Annotations;
using SSCMS.Configuration;
using SSCMS.Models;
using SSCMS.Core.Utils;
using SSCMS.Utils;

namespace SSCMS.Web.Controllers.V1
Expand All @@ -11,7 +12,7 @@ public partial class ChannelsController
{
[OpenApiOperation("获取栏目 API", "获取栏目,使用GET发起请求,请求地址为/api/v1/channels/{siteId}/{channelId}")]
[HttpGet, Route(RouteChannel)]
public async Task<ActionResult<Channel>> Get([FromRoute] int siteId, [FromRoute] int channelId)
public async Task<ActionResult<Dictionary<string, object>>> Get([FromRoute] int siteId, [FromRoute] int channelId)
{
if (!await _accessTokenRepository.IsScopeAsync(_authManager.ApiToken, Constants.ScopeChannels))
{
Expand All @@ -24,9 +25,40 @@ public async Task<ActionResult<Channel>> Get([FromRoute] int siteId, [FromRoute]
var channel = await _channelRepository.GetAsync(channelId);
if (channel == null) return this.Error("无法确定内容对应的栏目");

channel.Children = await _channelRepository.GetChildrenAsync(siteId, channelId);
var retVal = channel.ToDictionary();

return channel;
var navigationUrl = await _pathManager.GetChannelUrlAsync(site, channel, false);
retVal[nameof(ColumnsManager.NavigationUrl)] = navigationUrl;

var imageUrl = string.Empty;
if (!string.IsNullOrEmpty(channel.ImageUrl))
{
imageUrl = await _pathManager.ParseSiteUrlAsync(site, channel.ImageUrl, true);
retVal[nameof(channel.ImageUrl)] = imageUrl;
}

// channel.Children = await _channelRepository.GetChildrenAsync(siteId, channelId);

retVal[nameof(channel.Children)] = await _channelRepository.GetCascadeChildrenAsync(site, channel.Id, async summary =>
{
var channel = await _channelRepository.GetAsync(summary.Id);

var dict = channel.ToDictionary();

var navigationUrl = await _pathManager.GetChannelUrlAsync(site, channel, false);
dict[nameof(ColumnsManager.NavigationUrl)] = navigationUrl;

var imageUrl = string.Empty;
if (!string.IsNullOrEmpty(channel.ImageUrl))
{
imageUrl = await _pathManager.ParseSiteUrlAsync(site, channel.ImageUrl, true);
dict[nameof(channel.ImageUrl)] = imageUrl;
}

return dict;
});

return (Dictionary<string, object>)retVal;
}
}
}
23 changes: 18 additions & 5 deletions src/SSCMS.Web/Controllers/V1/ChannelsController.GetChannels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Microsoft.AspNetCore.Mvc;
using NSwag.Annotations;
using SSCMS.Configuration;
using SSCMS.Core.Utils;
using SSCMS.Utils;

namespace SSCMS.Web.Controllers.V1
Expand All @@ -21,15 +22,27 @@ public async Task<ActionResult<List<IDictionary<string, object>>>> GetChannels([
var site = await _siteRepository.GetAsync(siteId);
if (site == null) return this.Error(Constants.ErrorNotFound);

var channelInfoList = await _channelRepository.GetChannelsAsync(siteId);
var channels = await _channelRepository.GetChannelsAsync(siteId);

var dictInfoList = new List<IDictionary<string, object>>();
foreach (var channelInfo in channelInfoList)
var dictList = new List<IDictionary<string, object>>();
foreach (var channel in channels)
{
dictInfoList.Add(channelInfo.ToDictionary());
var dict = channel.ToDictionary();

var navigationUrl = await _pathManager.GetChannelUrlAsync(site, channel, false);
dict[nameof(ColumnsManager.NavigationUrl)] = navigationUrl;

var imageUrl = string.Empty;
if (!string.IsNullOrEmpty(channel.ImageUrl))
{
imageUrl = await _pathManager.ParseSiteUrlAsync(site, channel.ImageUrl, true);
dict[nameof(channel.ImageUrl)] = imageUrl;
}

dictList.Add(dict);
}

return dictInfoList;
return dictList;
}
}
}
4 changes: 3 additions & 1 deletion src/SSCMS.Web/Controllers/V1/ChannelsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,17 @@ public partial class ChannelsController : ControllerBase
private const string RouteChannelDelete = "channels/{siteId:int}/{channelId:int}/actions/delete";

private readonly IAuthManager _authManager;
private readonly IPathManager _pathManager;
private readonly ICreateManager _createManager;
private readonly IAccessTokenRepository _accessTokenRepository;
private readonly ISiteRepository _siteRepository;
private readonly IChannelRepository _channelRepository;
private readonly IContentRepository _contentRepository;

public ChannelsController(IAuthManager authManager, ICreateManager createManager, IAccessTokenRepository accessTokenRepository, ISiteRepository siteRepository, IChannelRepository channelRepository, IContentRepository contentRepository)
public ChannelsController(IAuthManager authManager, IPathManager pathManager, ICreateManager createManager, IAccessTokenRepository accessTokenRepository, ISiteRepository siteRepository, IChannelRepository channelRepository, IContentRepository contentRepository)
{
_authManager = authManager;
_pathManager = pathManager;
_createManager = createManager;
_accessTokenRepository = accessTokenRepository;
_siteRepository = siteRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public async Task<ActionResult<QueryResult>> GetContents([FromBody] QueryRequest
var pageContent =
await columnsManager.CalculateContentListAsync(sequence++, site, content.ChannelId, content, columns);
var navigationUrl = await _parseManager.PathManager.GetContentUrlAsync(site, content, false);
pageContent.Set("NavigationUrl", navigationUrl);
pageContent.Set(nameof(ColumnsManager.NavigationUrl), navigationUrl);

pageContents.Add(pageContent);
}
Expand Down