IMapRepository.cs 2.01 KB
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Rcs.Domain.Entities;

namespace Rcs.Domain.Repositories;

/// <summary>
/// 地图仓储接口
/// </summary>
public interface IMapRepository : IRepository<Map>
{
    /// <summary>
    /// 根据地图编码获取地图
    /// </summary>
    Task<Map?> GetByMapCodeAsync(
        string mapCode,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// 获取所有激活的地图
    /// </summary>
    Task<IEnumerable<Map>> GetActiveAsync(
        CancellationToken cancellationToken = default);

    /// <summary>
    /// 获取包含所有关联数据的地图(Nodes、Edges、Resources)
    /// </summary>
    Task<Map?> GetWithFullDetailsAsync(
        Guid mapId,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// 根据地图编码获取包含所有关联数据的地图
    /// </summary>
    Task<Map?> GetWithFullDetailsByCodeAsync(
        string mapCode,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// 根据查询参数筛选地图
    /// </summary>
    Task<IEnumerable<Map>> GetByFilterAsync(
        string? mapCode = null,
        string? mapName = null,
        bool? active = null,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// 根据查询参数筛选地图(带分页)
    /// </summary>
    Task<(IEnumerable<Map> Maps, int TotalCount)> GetByFilterWithPaginationAsync(
        string? mapCode = null,
        string? mapName = null,
        bool? active = null,
        DateTime? createdAtFrom = null,
        DateTime? createdAtTo = null,
        int pageNumber = 1,
        int pageSize = 10,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// 根据地图ID删除地图及其所有关联数据(Nodes、Edges、Resources)
    /// </summary>
    Task<bool> DeleteWithNavigationDataAsync(
        Guid mapId,
        CancellationToken cancellationToken = default);
}