using TakeoutSaaS.Domain.Tenants.Entities;
using TakeoutSaaS.Domain.Tenants.Enums;
namespace TakeoutSaaS.Domain.Tenants.Repositories;
///
/// 租户公告仓储。
///
public interface ITenantAnnouncementRepository
{
///
/// 查询公告列表(包含平台公告 TenantId=0),按类型、状态与生效时间筛选。
///
/// 租户 ID。
/// 公告状态。
/// 公告类型。
/// 启用状态。
/// 生效开始时间筛选。
/// 生效结束时间筛选。
/// 生效时间点,为空不限制。
/// 是否按优先级降序和生效时间降序排序,默认 false。
/// 限制返回数量,为空不限制。
/// 取消标记。
/// 公告集合。
Task> SearchAsync(
long tenantId,
AnnouncementStatus? status,
TenantAnnouncementType? type,
bool? isActive,
DateTime? effectiveFrom,
DateTime? effectiveTo,
DateTime? effectiveAt,
bool orderByPriority = false,
int? limit = null,
CancellationToken cancellationToken = default);
///
/// 按 ID 获取公告(包含平台公告 TenantId=0)。
///
/// 租户 ID。
/// 公告 ID。
/// 取消标记。
/// 公告实体或 null。
Task FindByIdInScopeAsync(long tenantId, long announcementId, CancellationToken cancellationToken = default);
///
/// 查询未读公告(包含平台公告 TenantId=0)。
///
/// 租户 ID。
/// 用户 ID。
/// 公告状态。
/// 启用状态。
/// 生效时间点,为空不限制。
/// 取消标记。
/// 未读公告集合。
Task> SearchUnreadAsync(
long tenantId,
long? userId,
AnnouncementStatus? status,
bool? isActive,
DateTime? effectiveAt,
CancellationToken cancellationToken = default);
///
/// 按 ID 获取公告。
///
/// 租户 ID。
/// 公告 ID。
/// 取消标记。
/// 公告实体或 null。
Task FindByIdAsync(long tenantId, long announcementId, CancellationToken cancellationToken = default);
///
/// 新增公告。
///
/// 公告实体。
/// 取消标记。
/// 异步任务。
Task AddAsync(TenantAnnouncement announcement, CancellationToken cancellationToken = default);
///
/// 更新公告。
///
/// 公告实体。
/// 取消标记。
/// 异步任务。
Task UpdateAsync(TenantAnnouncement announcement, CancellationToken cancellationToken = default);
///
/// 删除公告。
///
/// 租户 ID。
/// 公告 ID。
/// 取消标记。
/// 异步任务。
Task DeleteAsync(long tenantId, long announcementId, CancellationToken cancellationToken = default);
///
/// 保存变更。
///
/// 取消标记。
/// 异步任务。
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}