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] [Tags("平台端-支付设置")] [Authorize(Policy = TikuPolicies.PlatformBackofficeBootstrap)] [Produces("application/json")] [Route("api/platform-admin/payment-settings")] public sealed class PlatformPaymentSettingsController( IPlatformPaymentSettingsService paymentSettingsService, ICurrentUser currentUser) : ControllerBase { [HttpGet("apps")] [EndpointSummary("查询平台支付应用")] [Authorize(Policy = BackendPermissions.PlatformPaymentRead)] public Task> Apps(string? status, int limit = 100, CancellationToken cancellationToken = default) => paymentSettingsService.GetAppsAsync(Actor(), status, limit, cancellationToken); [HttpPut("apps")] [EndpointSummary("新增或更新平台支付应用")] [Authorize(Policy = BackendPermissions.PlatformPaymentWrite)] public Task UpsertApp(UpsertPlatformPaymentAppDto request, CancellationToken cancellationToken) => paymentSettingsService.UpsertAppAsync(Actor(), request.ToCommand(), cancellationToken); [HttpGet("channels")] [EndpointSummary("查询平台支付渠道")] [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")] [EndpointSummary("新增或更新平台支付渠道")] [Authorize(Policy = BackendPermissions.PlatformPaymentWrite)] public Task UpsertChannel(UpsertPlatformPaymentChannelDto request, CancellationToken cancellationToken) => paymentSettingsService.UpsertChannelAsync(Actor(), request.ToCommand(), cancellationToken); [HttpPost("channels/{id:guid}/disable")] [EndpointSummary("禁用平台支付渠道")] [Authorize(Policy = BackendPermissions.PlatformPaymentWrite)] public Task DisableChannel(Guid id, CancellationToken cancellationToken) => paymentSettingsService.DisableChannelAsync(Actor(), id, cancellationToken); [HttpGet("events")] [EndpointSummary("查询平台支付事件")] [Authorize(Policy = BackendPermissions.PlatformPaymentRead)] public Task> Events(string? status, int limit = 100, CancellationToken cancellationToken = default) => paymentSettingsService.GetEventsAsync(Actor(), status, limit, cancellationToken); [HttpGet("rebates/summary")] [EndpointSummary("查询平台返佣汇总")] [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"); }