diff --git a/TakeoutSaaS.Docs b/TakeoutSaaS.Docs
index 657849a..de7aefd 160000
--- a/TakeoutSaaS.Docs
+++ b/TakeoutSaaS.Docs
@@ -1 +1 @@
-Subproject commit 657849a5f7efa354d1a3e750f4707245dc8a0aaf
+Subproject commit de7aefd0ffe5c3ab842207c62aaa736edf7b8dfb
diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/CacheMetricsController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/CacheMetricsController.cs
deleted file mode 100644
index 31e66d1..0000000
--- a/src/Api/TakeoutSaaS.AdminApi/Controllers/CacheMetricsController.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using TakeoutSaaS.Domain.Dictionary.Entities;
-using TakeoutSaaS.Domain.Dictionary.Repositories;
-using TakeoutSaaS.Infrastructure.Dictionary.Caching;
-using TakeoutSaaS.Shared.Abstractions.Results;
-using TakeoutSaaS.Shared.Web.Api;
-
-namespace TakeoutSaaS.AdminApi.Controllers;
-
-///
-/// 缓存监控指标接口。
-///
-[ApiVersion("1.0")]
-[Authorize(Roles = "PlatformAdmin")]
-[Route("api/admin/v{version:apiVersion}/dictionary/metrics")]
-public sealed class CacheMetricsController(
- CacheMetricsCollector metricsCollector,
- ICacheInvalidationLogRepository invalidationLogRepository)
- : BaseApiController
-{
- ///
- /// 获取缓存统计信息。
- ///
- [HttpGet("cache-stats")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public ApiResponse GetCacheStats([FromQuery] string? timeRange = "1h")
- {
- var window = timeRange?.ToLowerInvariant() switch
- {
- "24h" => TimeSpan.FromHours(24),
- "7d" => TimeSpan.FromDays(7),
- _ => TimeSpan.FromHours(1)
- };
-
- var snapshot = metricsCollector.GetSnapshot(window);
- return ApiResponse.Ok(snapshot);
- }
-
- ///
- /// 获取缓存失效事件列表。
- ///
- [HttpGet("invalidation-events")]
- [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
- public async Task>> GetInvalidationEvents(
- [FromQuery] int page = 1,
- [FromQuery] int pageSize = 20,
- [FromQuery] DateTime? startDate = null,
- [FromQuery] DateTime? endDate = null,
- CancellationToken cancellationToken = default)
- {
- var safePage = page <= 0 ? 1 : page;
- var safePageSize = pageSize <= 0 ? 20 : pageSize;
-
- var (items, total) = await invalidationLogRepository.GetPagedAsync(
- safePage,
- safePageSize,
- startDate,
- endDate,
- cancellationToken);
-
- var result = new PagedResult(items, safePage, safePageSize, total);
- return ApiResponse>.Ok(result);
- }
-}
diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs
index 8f756d2..5cec074 100644
--- a/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs
+++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs
@@ -90,7 +90,8 @@ public sealed class MerchantsController(IMediator mediator) : BaseApiController
return ApiResponse.Error(StatusCodes.Status400BadRequest, "路由 merchantId 与请求体 merchantId 不一致");
}
- command = command with { MerchantId = merchantId };
+ // 1. Admin 端调用,跳过敏感字段审核
+ command = command with { MerchantId = merchantId, SkipReview = true };
// 2. 执行更新
var result = await mediator.Send(command, cancellationToken);
@@ -447,4 +448,88 @@ public sealed class MerchantsController(IMediator mediator) : BaseApiController
// 2. 返回类目列表
return ApiResponse>.Ok(result);
}
+
+ ///
+ /// 更新商户经营模式。
+ ///
+ /// 商户 ID。
+ /// 请求体。
+ /// 取消标记。
+ /// 更新结果。
+ [HttpPut("{merchantId:long}/operating-mode")]
+ [PermissionAuthorize("merchant:update")]
+ [ProducesResponseType(typeof(ApiResponse