using Dpz.Core.Public.Entity.Seo;
namespace Dpz.Core.Service.RepositoryService;
public interface IPageMetadataService
{
/// <summary>
/// relations:[controller,action,id,...]
/// </summary>
/// <param name="relations"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<VmPageMetadata?> GetPageMetadataAsync(
IReadOnlyCollection<string> relations,
CancellationToken cancellationToken = default
);
/// <summary>
/// 根据路由获取页面元数据
/// </summary>
/// <param name="controller">控制器</param>
/// <param name="action">动作</param>
/// <param name="routeId">路由ID(可选)</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<VmPageMetadata?> GetPageMetadataByRouteAsync(
string? controller,
string? action,
string? routeId = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// 根据结构化路由获取页面元数据
/// </summary>
Task<VmPageMetadata?> GetPageMetadataByRouteAsync(
PageMetadataRoute route,
CancellationToken cancellationToken = default
);
/// <summary>
/// 根据结构化路由获取最终页面元数据
/// </summary>
Task<VmPageMetadata?> ResolvePageMetadataAsync(
PageMetadataRoute route,
VmPageMetadata? explicitMetadata = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取公共页面元数据
/// </summary>
Task<VmPageMetadata?> GetPublicMetadataAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 根据ID获取页面元数据
/// </summary>
/// <param name="id"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<VmPageMetadata?> GetByIdAsync(string id, CancellationToken cancellationToken = default);
/// <summary>
/// get page metadata pages.
/// </summary>
/// <param name="searchText">query text</param>
/// <param name="pageIndex">page index</param>
/// <param name="pageSize">page size</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IPagedList<VmPageMetadata>> GetPageAsync(
string? searchText = null,
int pageIndex = 1,
int pageSize = 20,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取全部页面元数据
/// </summary>
/// <returns></returns>
Task<IList<VmPageMetadata>> GetPageMetadataAsync(CancellationToken cancellationToken = default);
/// <summary>
/// update page metadata
/// </summary>
/// <param name="pageMetadata"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task SavePageMetadataAsync(
VmPageMetadata pageMetadata,
CancellationToken cancellationToken = default
);
/// <summary>
/// 刷新页面元数据缓存
/// </summary>
/// <returns></returns>
Task RefreshCacheAsync(CancellationToken cancellationToken = default);
/// <summary>
/// delete page metadata
/// </summary>
/// <param name="id"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task DeleteAsync(string id, CancellationToken cancellationToken = default);
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码说明
这是一个 C# 接口定义文件,定义了页面元数据服务(IPageMetadataService)的契约。该接口主要用于管理和操作网站页面的 SEO 元数据信息。
功能概述
该接口提供了对页面元数据的完整 CRUD(创建、读取、更新、删除)操作,以及一些特定的查询和缓存管理功能。
主要方法说明
查询方法
GetPageMetadataAsync- 根据关系集合获取页面元数据- 参数:relations(包含 controller、action、id 等的字符串集合)
- 用于通过路由关系查找对应的元数据
GetPageMetadataByRouteAsync(2个重载)- 第一个重载:通过控制器名、动作名和可选的路由ID查询
- 第二个重载:通过结构化的
PageMetadataRoute对象查询 - 用于基于 MVC 路由信息获取元数据
ResolvePageMetadataAsync- 解析最终的页面元数据- 可以传入显式的元数据进行合并处理
- 用于获取经过处理后的最终元数据
GetPublicMetadataAsync- 获取公共页面元数据- 可能用于获取全站通用的默认元数据
GetByIdAsync- 根据ID直接获取元数据GetPageAsync- 分页查询页面元数据- 支持搜索文本过滤
- 返回分页结果
GetPageMetadataAsync(无参) - 获取所有页面元数据列表
修改方法
SavePageMetadataAsync- 保存(创建或更新)页面元数据DeleteAsync- 删除指定ID的页面元数据
缓存管理
RefreshCacheAsync- 刷新页面元数据缓存- 用于在数据更新后同步缓存
设计特点
- ✅ 异步优先:所有方法都是异步的(
async/await模式) - ✅ 取消令牌支持:所有方法都支持
CancellationToken,便于取消长时间运行的操作 - ✅ 可空返回:查询方法返回可空类型(
VmPageMetadata?),明确表示可能找不到数据 - ✅ 分页支持:提供标准的分页查询功能
- ✅ 灵活查询:提供多种查询方式(ID、路由、关系集合等)
这是一个典型的仓储服务接口,遵循了现代 .NET 应用的最佳实践。
AI 正在分析代码…
评论加载中...