using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Tiku.Api.Contracts; using Tiku.Application.Auth; using Tiku.Application.Catalog; using Tiku.Application.Content; using Tiku.Application.Security; using Tiku.Application.TenantAdmin; namespace Tiku.Api.Controllers; [ApiController] [Tags("租户端-运营管理")] [Produces("application/json")] [Route("api/tenant")] public sealed class TenantDomainProviderController( ITenantDomainProviderService domainProviderService, TenantAdminActorResolver actorResolver) : ControllerBase { [HttpGet("domains")] [Authorize(Policy = BackendPermissions.TenantSettingsManage)] [EndpointSummary("查询租户域名")] [ProducesResponseType>(StatusCodes.Status200OK)] public async Task>> GetDomains(CancellationToken cancellationToken) { return Ok(await domainProviderService.GetDomainsAsync(actorResolver.Resolve(), cancellationToken)); } [HttpPost("domains")] [Authorize(Policy = BackendPermissions.TenantSettingsManage)] [EndpointSummary("添加租户域名")] [ProducesResponseType>(StatusCodes.Status200OK)] public async Task>> CreateDomain( CreateTenantDomainDto request, CancellationToken cancellationToken) { return Ok(await domainProviderService.CreateDomainAsync(actorResolver.Resolve(), request.ToCommand(), cancellationToken)); } [HttpGet("auth-providers")] [Authorize(Policy = BackendPermissions.TenantProviderManage)] [EndpointSummary("查询租户登录 Provider 公开配置")] [ProducesResponseType>(StatusCodes.Status200OK)] public async Task>> GetAuthProviders( CancellationToken cancellationToken) { return Ok(await domainProviderService.GetAuthProvidersAsync(actorResolver.Resolve(), cancellationToken)); } [HttpPut("auth-providers")] [Authorize(Policy = BackendPermissions.TenantProviderManage)] [EndpointSummary("新增或更新租户登录 Provider")] [ProducesResponseType>(StatusCodes.Status200OK)] public async Task>> UpsertAuthProvider( UpsertTenantIdentityProviderDto request, CancellationToken cancellationToken) { return Ok(await domainProviderService.UpsertAuthProviderAsync(actorResolver.Resolve(), request.ToCommand(), cancellationToken)); } }