From 88c4bfa9cd5400b3342c2e4bad24c52b9a6cc6f3 Mon Sep 17 00:00:00 2001 From: Sam <315859133@qq.com> Date: Thu, 5 Feb 2026 14:20:46 +0800 Subject: [PATCH] feat(console): add TenantsController with all CRUD endpoints --- Controllers/TenantsController.cs | 195 +++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 Controllers/TenantsController.cs diff --git a/Controllers/TenantsController.cs b/Controllers/TenantsController.cs new file mode 100644 index 0000000..8e232e4 --- /dev/null +++ b/Controllers/TenantsController.cs @@ -0,0 +1,195 @@ +using Fengling.Console.Models.Dtos; +using Fengling.Console.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Fengling.Console.Controllers; + +[ApiController] +[Route("api/[controller]")] +[Authorize] +public class TenantsController : ControllerBase +{ + private readonly ITenantService _tenantService; + private readonly ILogger _logger; + + public TenantsController(ITenantService tenantService, ILogger logger) + { + _tenantService = tenantService; + _logger = logger; + } + + [HttpGet] + public async Task> GetTenants( + [FromQuery] int page = 1, + [FromQuery] int pageSize = 10, + [FromQuery] string? name = null, + [FromQuery] string? tenantId = null, + [FromQuery] string? status = null) + { + try + { + var (items, totalCount) = await _tenantService.GetTenantsAsync(page, pageSize, name, tenantId, status); + return Ok(new { items, totalCount, page, pageSize }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting tenants"); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpGet("{id}")] + public async Task> GetTenant(long id) + { + try + { + var tenant = await _tenantService.GetTenantAsync(id); + if (tenant == null) + { + return NotFound(); + } + return Ok(tenant); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting tenant {TenantId}", id); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpGet("{tenantId}/users")] + public async Task>> GetTenantUsers(long tenantId) + { + try + { + var users = await _tenantService.GetTenantUsersAsync(tenantId); + return Ok(users); + } + catch (KeyNotFoundException ex) + { + _logger.LogWarning(ex, "Tenant not found: {TenantId}", tenantId); + return NotFound(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting users for tenant {TenantId}", tenantId); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpGet("{tenantId}/roles")] + public async Task>> GetTenantRoles(long tenantId) + { + try + { + var roles = await _tenantService.GetTenantRolesAsync(tenantId); + return Ok(roles); + } + catch (KeyNotFoundException ex) + { + _logger.LogWarning(ex, "Tenant not found: {TenantId}", tenantId); + return NotFound(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting roles for tenant {TenantId}", tenantId); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpGet("{tenantId}/settings")] + public async Task> GetTenantSettings(string tenantId) + { + try + { + var settings = await _tenantService.GetTenantSettingsAsync(tenantId); + return Ok(settings); + } + catch (KeyNotFoundException ex) + { + _logger.LogWarning(ex, "Tenant not found: {TenantId}", tenantId); + return NotFound(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting settings for tenant {TenantId}", tenantId); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpPut("{tenantId}/settings")] + public async Task UpdateTenantSettings(string tenantId, [FromBody] TenantSettingsDto settings) + { + try + { + await _tenantService.UpdateTenantSettingsAsync(tenantId, settings); + return NoContent(); + } + catch (KeyNotFoundException ex) + { + _logger.LogWarning(ex, "Tenant not found: {TenantId}", tenantId); + return NotFound(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error updating settings for tenant {TenantId}", tenantId); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpPost] + public async Task> CreateTenant([FromBody] CreateTenantDto dto) + { + try + { + var tenant = await _tenantService.CreateTenantAsync(dto); + return CreatedAtAction(nameof(GetTenant), new { id = tenant.Id }, tenant); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error creating tenant"); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpPut("{id}")] + public async Task UpdateTenant(long id, [FromBody] UpdateTenantDto dto) + { + try + { + await _tenantService.UpdateTenantAsync(id, dto); + return NoContent(); + } + catch (KeyNotFoundException ex) + { + _logger.LogWarning(ex, "Tenant not found: {TenantId}", id); + return NotFound(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error updating tenant {TenantId}", id); + return StatusCode(500, new { message = ex.Message }); + } + } + + [HttpDelete("{id}")] + public async Task DeleteTenant(long id) + { + try + { + await _tenantService.DeleteTenantAsync(id); + return NoContent(); + } + catch (KeyNotFoundException ex) + { + _logger.LogWarning(ex, "Tenant not found: {TenantId}", id); + return NotFound(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error deleting tenant {TenantId}", id); + return StatusCode(500, new { message = ex.Message }); + } + } +}