package com.njcn.rdms.module.project.service.project.permission;

/**
 * 计算当前登录用户在某项目 / 某执行下的数据可见性 scope。
 *
 * 规则：
 * - 项目经理（project.manager_user_id == userId）→ seesAll=true
 * - 非项目经理 → 取以下 4 项的并集，构成 (executionIds, taskIds)：
 *   1. 我作为 execution.owner_id 的执行 ID
 *   2. 我作为 execution_assignee 活跃协办的执行 ID（removed_at IS NULL）
 *   3. 我作为 task.owner_id 的任务 ID 及其全部子孙 ID（递归 CTE 一次展开）
 *   4. 我作为 task_assignee 活跃协办的任务 ID（removed_at IS NULL）
 *
 * 任务参与者集合 ⊆ 执行参与者集合（业务约束：任务负责人/协办人必须从执行团队挑选）。
 */
public interface VisibilityScopeResolver {

    /**
     * 项目维度 scope（用于执行分页 / 执行看板）。
     */
    VisibilityScope resolveForProject(Long projectId, Long userId);

    /**
     * 执行维度 scope（用于任务分页 / 任务看板 / 任务详情）。
     * 调用方需先保证 executionId 属于 projectId（由 URL 路径约束）。
     */
    VisibilityScope resolveForExecution(Long projectId, Long executionId, Long userId);
}
