using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Tiku.Api.Contracts; using Tiku.Application.PlatformAdmin; using Tiku.Application.Security; using Tiku.Domain.Platform; namespace Tiku.Api.Controllers; [ApiController] [Authorize(Policy = TikuPolicies.PlatformBackofficeBootstrap)] [Produces("application/json")] [Route("api/platform-admin/payment-settings")] public sealed class PlatformPaymentSettingsController( IPlatformPaymentSettingsService paymentSettingsService, ICurrentUser currentUser) : ControllerBase { [HttpGet("apps")] [Authorize(Policy = BackendPermissions.PlatformPaymentRead)] public Task> Apps(string? status, int limit = 100, CancellationToken cancellationToken = default) => paymentSettingsService.GetAppsAsync(Actor(), status, limit, cancellationToken); [HttpPut("apps")] [Authorize(Policy = BackendPermissions.PlatformPaymentWrite)] public Task UpsertApp(UpsertPlatformPaymentAppDto request, CancellationToken cancellationToken) => paymentSettingsService.UpsertAppAsync(Actor(), request.ToCommand(), cancellationToken); [HttpGet("channels")] [Authorize(Policy = BackendPermissions.PlatformPaymentRead)] public Task> Channels(Guid? appId, string? status, int limit = 100, CancellationToken cancellationToken = default) => paymentSettingsService.GetChannelsAsync(Actor(), appId, status, limit, cancellationToken); [HttpPut("channels")] [Authorize(Policy = BackendPermissions.PlatformPaymentWrite)] public Task UpsertChannel(UpsertPlatformPaymentChannelDto request, CancellationToken cancellationToken) => paymentSettingsService.UpsertChannelAsync(Actor(), request.ToCommand(), cancellationToken); [HttpPost("channels/{id:guid}/disable")] [Authorize(Policy = BackendPermissions.PlatformPaymentWrite)] public Task DisableChannel(Guid id, CancellationToken cancellationToken) => paymentSettingsService.DisableChannelAsync(Actor(), id, cancellationToken); [HttpGet("events")] [Authorize(Policy = BackendPermissions.PlatformPaymentRead)] public Task> Events(string? status, int limit = 100, CancellationToken cancellationToken = default) => paymentSettingsService.GetEventsAsync(Actor(), status, limit, cancellationToken); [HttpGet("rebates/summary")] [Authorize(Policy = BackendPermissions.PlatformPaymentRead)] public Task RebateSummary(CancellationToken cancellationToken) => paymentSettingsService.GetRebateSummaryAsync(Actor(), cancellationToken); private PlatformCapabilityActor Actor() => currentUser.UserId is { } userId ? new PlatformCapabilityActor(userId) : throw new PlatformCapabilityException("Platform actor was not resolved.", "platform_access_denied"); }