using FlatRender.IdentitySvc.Models.Requests; using FlatRender.IdentitySvc.Models.Responses; namespace FlatRender.IdentitySvc.Application.Services.Interfaces; public interface IPaymentService { Task> GetUserPaymentsAsync(Guid userId, int page, int pageSize); Task GetByIdAsync(Guid paymentId, Guid userId); // ── ZarinPal ──────────────────────────────────────────────────────────────── /// Calls ZarinPal request API and returns the zarinpal.com redirect URL. /// When the FlatRender Pay broker is configured, routes through it instead /// (the broker owns the single ZarinPal-verified domain pay.flatrender.ir). Task InitiateZarinPalAsync(Guid paymentId, Guid userId); Task HandleZarinPalCallbackAsync(string authority, string status); // ── FlatRender Pay broker (pay.flatrender.ir) ───────────────────────────────── /// Confirms a broker payment via the inquiry API and activates the plan. /// Called from the broker's return redirect (/v1/payments/callback/broker). Task HandleBrokerCallbackAsync(Guid paymentId, string brokerTxnId); // ── SnapPay ────────────────────────────────────────────────────────────────── /// Calls SnapPay token API and returns the snappay.ir redirect URL. Task InitiateSnapPayAsync(Guid paymentId, Guid userId); /// Handles SnapPay callback query params (paymentToken, shapSnapStatus). Task HandleSnapPayCallbackAsync(string paymentToken, string shapStatus); // ── Tara ───────────────────────────────────────────────────────────────────── /// Calls Tara request API and returns the tara.ir redirect URL. Task InitiateTaraAsync(Guid paymentId, Guid userId); /// Handles Tara callback query params (token, status). Task HandleTaraCallbackAsync(string token, string status); // ── Stripe ─────────────────────────────────────────────────────────────────── Task HandleStripeWebhookAsync(string payload, string signature); // ── Refunds ─────────────────────────────────────────────────────────────────── Task IssueRefundAsync(Guid paymentId, long? amountMinor, string reason, string refundTo); }