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(创建、读取、更新、删除)操作,以及一些特定的查询和缓存管理功能。

主要方法说明

查询方法

  1. GetPageMetadataAsync - 根据关系集合获取页面元数据

    • 参数:relations(包含 controller、action、id 等的字符串集合)
    • 用于通过路由关系查找对应的元数据
  2. GetPageMetadataByRouteAsync (2个重载)

    • 第一个重载:通过控制器名、动作名和可选的路由ID查询
    • 第二个重载:通过结构化的 PageMetadataRoute 对象查询
    • 用于基于 MVC 路由信息获取元数据
  3. ResolvePageMetadataAsync - 解析最终的页面元数据

    • 可以传入显式的元数据进行合并处理
    • 用于获取经过处理后的最终元数据
  4. GetPublicMetadataAsync - 获取公共页面元数据

    • 可能用于获取全站通用的默认元数据
  5. GetByIdAsync - 根据ID直接获取元数据

  6. GetPageAsync - 分页查询页面元数据

    • 支持搜索文本过滤
    • 返回分页结果
  7. GetPageMetadataAsync (无参) - 获取所有页面元数据列表

修改方法

  1. SavePageMetadataAsync - 保存(创建或更新)页面元数据

  2. DeleteAsync - 删除指定ID的页面元数据

缓存管理

  1. RefreshCacheAsync - 刷新页面元数据缓存
    • 用于在数据更新后同步缓存

设计特点

  • ✅ 异步优先:所有方法都是异步的(async/await模式)
  • ✅ 取消令牌支持:所有方法都支持 CancellationToken,便于取消长时间运行的操作
  • ✅ 可空返回:查询方法返回可空类型(VmPageMetadata?),明确表示可能找不到数据
  • ✅ 分页支持:提供标准的分页查询功能
  • ✅ 灵活查询:提供多种查询方式(ID、路由、关系集合等)

这是一个典型的仓储服务接口,遵循了现代 .NET 应用的最佳实践。

评论加载中...