namespace Shared.Contracts.Account;
///
/// Contract Interface برای دسترسی به اطلاعات پایه کاربران از سایر ماژولها
/// این Interface به عنوان ACL (Anti-Corruption Layer) عمل میکند
///
/// مزایا:
/// - هیچ وابستگی به Implementation ندارد
/// - ماژولهای دیگر فقط به این Contract دسترسی دارند
/// - امکان تبدیل به Microservice بدون Breaking Change
/// - Testability بالا (Mock کردن آسان)
///
public interface IAccountQueryService
{
///
/// دریافت اطلاعات پایه یک کاربر
///
Task GetAccountAsync(long accountId);
///
/// دریافت اطلاعات پایه لیستی از کاربران (Batch Query برای جلوگیری از N+1)
///
Task> GetProgramManagerAccountListAsync(List accountIds);
}