using Fitness_core_BE.DTOs.PaymentsEnablement; using Fitness_core_BE.DTOs.PaymentGateways; using Fitness_core_BE.Helpers; using Fitness_core_BE.Interfaces.Services; using Fitness_core_BE.Models.IOs; using Microsoft.AspNetCore.Mvc; using static Fitness_core_BE.Helpers.JwtMiddleware; using static Fitness_core_BE.Helpers.ApiResponseHelper; namespace Fitness_core_BE.Controllers { // Gym owner's payment-gateway registration/enablement: choosing a payout track // (own gateway vs. HexaFitness-held), submitting payout KYC, and viewing the // resulting wallet/payout schedule. The platform-admin equivalent (the global // gateway catalog) lives in AdminPaymentGatewayController. [ApiController] [Route("api/client")] public class PaymentsEnablementController : ControllerBase { private readonly IPaymentsEnablementService _payments; public PaymentsEnablementController(IPaymentsEnablementService payments) { _payments = payments; } [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpGet("payments/tracks")] public async Task>>> GetPaymentTracks() => Response(await _payments.GetTrackOptionsAsync()); [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpPost("payments/track-selection")] public async Task>> SelectTrack([FromBody] SelectPaymentTrackRequest request) => Response(await _payments.SelectTrackAsync(HttpContext, request)); [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpGet("payments/gateways")] public async Task>>> GetAvailableGateways() => Response(await _payments.GetAvailableGatewaysAsync(HttpContext.RequestAborted)); [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpPost("payments/kyc")] public async Task>> SubmitKyc( [FromBody] SubmitGatewayOnboardingRequest request) => Response(await _payments.SubmitKycAsync( HttpContext, request, HttpContext.RequestAborted)); [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpGet("payments/kyc/status")] public async Task>> GetKycStatus() => Response(await _payments.GetKycStatusAsync(HttpContext)); [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpGet("payments/wallet")] public async Task>> GetWallet() => Response(await _payments.GetWalletAsync(HttpContext)); [CustomMiddleware] [TenantResolution] [RequiresPermission("payment-gateway")] [HttpGet("payments/payout-schedule")] public async Task>> GetPayoutSchedule() => Response(await _payments.GetPayoutScheduleAsync(HttpContext)); } }