From 4e9923ce6877d00a0f2364679e4983db7e5383dd Mon Sep 17 00:00:00 2001
From: lili
Date: Wed, 17 Jun 2026 14:08:19 -0700
Subject: [PATCH] =?UTF-8?q?refactor(market):=20pom=20=E5=9D=90=E6=A0=87?=
=?UTF-8?q?=E6=94=B6=E5=8F=A3=20market=E2=86=92member-api(facade=20?=
=?UTF-8?q?=E7=A7=BB=E5=85=A5=20member-api)+=20tenant=20=E4=BE=9D=E8=B5=96?=
=?UTF-8?q?=E8=AF=9A=E5=AE=9E=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
承 bc-boundaries §三遗留(更深一层 BC 收口)。market-server pom 此前依赖
muse-module-member-server(可见 member 全部 internal),根因是 market 唯一引用的
member-server 类型 MarketAccountProjectionFacade(单方法读校验端口、无 DTO)。
- 接口 MarketAccountProjectionFacade 从 member-server application.account.facade
移到 member-api api.account(对称写端口 MuseAccountRecordProjectionApi:member 定义端口、
market 提供适配器 MarketAccountProjectionProvider、member-alone 回落 Unavailable*,
符合 bc-boundaries §一"本域定义端口、他域提供适配器")
- market-server pom: muse-module-member-server → muse-module-member-api
- market-server 直接声明 muse-spring-boot-starter-biz-tenant(此前经 member-server 传递,
收口暴露的隐性传递耦合 → 依赖诚实化)
- 顺带修预存潜伏 test 编译破损:AppMuseMarketPublishControllerTest 的 9 参
PublishRecordItem 构造(record 自 commit a00c758 加 marketAssetId/appealStatus 变 10 参、
test 未同步;因 CI 从未在本特性分支运行而潜伏)→补 marketAssetId=null
验收:member-api/member-server/market-server scoped reactor test-compile BUILD SUCCESS;
AccountMarketRecordServiceTest 8/0、MarketAccountProjectionFacadeConfigurationTest 3/0、
MarketAccountProjectionProviderTest 5/0、AppMuseMarketPublishControllerTest 10/0;
BcBoundaryArchTest 1/0(0 Architecture Violation)。同步 bc-boundaries §三 + 台账 §一 TODO。
Co-Authored-By: Claude Opus 4.8 (1M context)
---
.agents/rules/bc-boundaries.md | 2 +-
docs/mvp/进度总账.md | 2 +-
.../muse-module-market-server/pom.xml | 8 +++++-
.../muse/MarketAccountProjectionProvider.java | 4 +--
.../MarketAccountProjectionProviderTest.java | 2 +-
.../AppMuseMarketPublishControllerTest.java | 2 +-
.../MarketAccountProjectionFacade.java | 25 +++++++++++++++++++
.../MuseAccountRecordProjectionApi.java | 4 +--
...ountProjectionFacadeAutoConfiguration.java | 2 +-
.../AccountMarketRecordServiceImpl.java | 2 +-
.../facade/MarketAccountProjectionFacade.java | 18 -------------
...vailableMarketAccountProjectionFacade.java | 1 +
.../AccountMarketRecordServiceTest.java | 2 +-
...ountProjectionFacadeConfigurationTest.java | 1 +
14 files changed, 45 insertions(+), 30 deletions(-)
create mode 100644 muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MarketAccountProjectionFacade.java
delete mode 100644 muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacade.java
diff --git a/.agents/rules/bc-boundaries.md b/.agents/rules/bc-boundaries.md
index df0cb8e9..a4b3c796 100644
--- a/.agents/rules/bc-boundaries.md
+++ b/.agents/rules/bc-boundaries.md
@@ -42,7 +42,7 @@
> 豁免一律**临时、显式、可见**(测试源码点名)。违例消除后必须从 `KNOWN_VIOLATION_EXEMPTIONS` 删除该类——**收紧即整改验收**。新违例不在豁免内,一律红。
-> 遗留(更深一层 BC 收口,不在本次范围):market-server 的 pom 仍依赖 `muse-module-member-server`(可见 member 全部 internal);本次只消除 member.dal 的**代码 import**(ArchUnit 校验 import、不校验 pom 坐标),pom 坐标收口可登记后续。
+> ✅ **pom 坐标收口已完成(2026-06-17)**:market-server pom 由 `muse-module-member-server`(可见 member 全部 internal)收窄为 `muse-module-member-api`。前置整改:market 唯一引用的 member-server 类型 `MarketAccountProjectionFacade`(单方法读校验端口、无 DTO)移到 member-api `api.account`——对称于写端口 `MuseAccountRecordProjectionApi`(member 定义端口、market 提供适配器 `MarketAccountProjectionProvider`、member-alone 回落 `UnavailableMarketAccountProjectionFacade`,符合 §一"本域定义端口、他域提供适配器");并把 market-server 此前**经 member-server 传递**获得的 `muse-spring-boot-starter-biz-tenant` 显式直接声明(依赖诚实化,收口暴露的隐性传递耦合)。验收:member-api/member-server/market-server scoped reactor `test-compile` BUILD SUCCESS;AccountMarketRecordServiceTest 8/0、MarketAccountProjectionFacadeConfigurationTest 3/0、MarketAccountProjectionProviderTest 5/0、AppMuseMarketPublishControllerTest 10/0;`BcBoundaryArchTest` 1/0(0 违例)。**顺带修**预存潜伏 test 编译破损:`AppMuseMarketPublishControllerTest` 的 9 参 `PublishRecordItem` 构造(record 自 commit a00c758 加 marketAssetId/appealStatus 变 10 参、该 test 未同步,因 CI 从未在本特性分支运行而潜伏)。
---
diff --git a/docs/mvp/进度总账.md b/docs/mvp/进度总账.md
index a071473f..3779dd8c 100644
--- a/docs/mvp/进度总账.md
+++ b/docs/mvp/进度总账.md
@@ -22,7 +22,7 @@
**market 写路径整改(2026-06-14,ultracode)**:member 暴露写端口 `MuseAccountRecordProjectionApi` + DTO(member-server 实现读写自有 DAL、tenantId 由实现侧从上下文注入防伪造、事务沿用调用方),market 5 类改消费端口、移除 member.dal 依赖 → `KNOWN_VIOLATION_EXEMPTIONS` 清空、BC 门全绿。**附带修复**:round-2 重构 `ContentKnowledgeWorkOwnerFacade` 时遗留的旧测试 `KnowledgeWorkOwnerFacadeTest`(仍断言旧 WorkMapper 行为)已删除,其装配守卫/兜底两用例并入 `ContentKnowledgeWorkOwnerFacadeTest`(5/0F)——此为 round-2 一处假绿(当时构建在平台时区用例处中止、未真正跑到 knowledge),现已补正。
-**后续基建 TODO**:openapi-diff CI 首跑验证(🔧 检测逻辑+循环聚合已本地实证 2026-06-17:oasdiff v1.19.1 对 7 域真实契约 5/5 拦真破坏/放行安全演化,镜像钉版本+复现脚本已落地;**仅余 GHA 触发管道待真实 PR 首跑**)、`completed=测试证据`兜底(台账加 testFiles 字段 + 门禁)、`dev-baseline` 收敛进 rules、跨域 `.application` 边界门、market-server→member-server pom 坐标收口(本次只消除 member.dal 代码 import,见 bc-boundaries §三遗留)、**ai/平台预存红测试整改**(CI 接电后将暴露;均非本轮改动引入):`MuseAiTaskServiceTest` 缺 `eventPublishOutboxService`/`candidateReviewService` 桩致 11 例 NPE **✅ 已整改 40/40(2026-06-15,补桩 + review lenient,零产代码改动)**;`QiniuSmsClientTest` 时区硬编码 **✅ 已整改 5/5(2026-06-15,断言改用与生产同款 `LocalDateTimeUtil.of` 由系统时区换算→机器无关)**;`MuseAiEventPublishOutboxMapperTest` **✅ 真实 PG 实跑 5/5(2026-06-15,mini-infra PG 100.64.0.8:5433;跑法=`source infra.env` + `-DargLine='-DsocksProxyHost= -DsocksProxyPort='`;隔离 schema 自建自清、零代码改动——原"红"仅缺真 PG 环境)**。**至此 ai/平台预存红三项全清。**
+**后续基建 TODO**:openapi-diff CI 首跑验证(🔧 检测逻辑+循环聚合已本地实证 2026-06-17:oasdiff v1.19.1 对 7 域真实契约 5/5 拦真破坏/放行安全演化,镜像钉版本+复现脚本已落地;**仅余 GHA 触发管道待真实 PR 首跑**)、`completed=测试证据`兜底(台账加 testFiles 字段 + 门禁)、`dev-baseline` 收敛进 rules、跨域 `.application` 边界门、market-server→member-server pom 坐标收口(✅ **已完成 2026-06-17**:接口 `MarketAccountProjectionFacade` 移入 member-api→market-server pom 收窄至 member-api + 直接声明 tenant starter[依赖诚实化];编译/4 测试 26 用例/BcBoundaryArchTest 0 违例全绿;顺带修预存潜伏 test 编译破损 AppMuseMarketPublishControllerTest;详见 bc-boundaries §三)、**ai/平台预存红测试整改**(CI 接电后将暴露;均非本轮改动引入):`MuseAiTaskServiceTest` 缺 `eventPublishOutboxService`/`candidateReviewService` 桩致 11 例 NPE **✅ 已整改 40/40(2026-06-15,补桩 + review lenient,零产代码改动)**;`QiniuSmsClientTest` 时区硬编码 **✅ 已整改 5/5(2026-06-15,断言改用与生产同款 `LocalDateTimeUtil.of` 由系统时区换算→机器无关)**;`MuseAiEventPublishOutboxMapperTest` **✅ 真实 PG 实跑 5/5(2026-06-15,mini-infra PG 100.64.0.8:5433;跑法=`source infra.env` + `-DargLine='-DsocksProxyHost= -DsocksProxyPort='`;隔离 schema 自建自清、零代码改动——原"红"仅缺真 PG 环境)**。**至此 ai/平台预存红三项全清。**
---
diff --git a/muse-cloud/muse-module-market/muse-module-market-server/pom.xml b/muse-cloud/muse-module-market/muse-module-market-server/pom.xml
index 3c67b0c8..e9977de9 100644
--- a/muse-cloud/muse-module-market/muse-module-market-server/pom.xml
+++ b/muse-cloud/muse-module-market/muse-module-market-server/pom.xml
@@ -29,9 +29,15 @@
cn.iocoder.cloud
- muse-module-member-server
+ muse-module-member-api
${revision}
+
+
+ cn.iocoder.cloud
+ muse-spring-boot-starter-biz-tenant
+
cn.iocoder.cloud
muse-spring-boot-starter-security
diff --git a/muse-cloud/muse-module-market/muse-module-market-server/src/main/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProvider.java b/muse-cloud/muse-module-market/muse-module-market-server/src/main/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProvider.java
index c6db2c84..b99e282d 100644
--- a/muse-cloud/muse-module-market/muse-module-market-server/src/main/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProvider.java
+++ b/muse-cloud/muse-module-market/muse-module-market-server/src/main/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProvider.java
@@ -5,7 +5,7 @@ import cn.iocoder.muse.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.muse.module.market.dal.dataobject.muse.MuseMarketAccountProjectionDO;
import cn.iocoder.muse.module.member.api.account.MuseAccountRecordProjectionApi;
import cn.iocoder.muse.module.member.api.account.dto.MuseAccountRecordProjectionSaveReqDTO;
-import cn.iocoder.muse.module.member.application.account.facade.MarketAccountProjectionFacade;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -17,7 +17,7 @@ import static cn.iocoder.muse.module.market.enums.ErrorCodeConstants.MARKET_ACCO
/**
* Market 提供给 member Account 的真实投影 provider。
*
- * 该 Bean 实现 member 模块既有 {@link MarketAccountProjectionFacade}(该端口在 member-server, 非 .dal, 合规),
+ *
该 Bean 实现 member 模块既有 {@link MarketAccountProjectionFacade}(该端口在 member-api, 非 .dal, 合规),
* 用于替换默认 fail-closed unavailable facade,让读侧"投影已接入"判定不变。Account 查询仍只读 member 的
* muse_account_record_projection。
*
diff --git a/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProviderTest.java b/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProviderTest.java
index fd89d37f..961df523 100644
--- a/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProviderTest.java
+++ b/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/application/muse/MarketAccountProjectionProviderTest.java
@@ -6,7 +6,7 @@ import cn.iocoder.muse.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.muse.module.market.dal.dataobject.muse.MuseMarketAccountProjectionDO;
import cn.iocoder.muse.module.member.api.account.MuseAccountRecordProjectionApi;
import cn.iocoder.muse.module.member.api.account.dto.MuseAccountRecordProjectionSaveReqDTO;
-import cn.iocoder.muse.module.member.application.account.facade.MarketAccountProjectionFacade;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
diff --git a/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/controller/app/muse/AppMuseMarketPublishControllerTest.java b/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/controller/app/muse/AppMuseMarketPublishControllerTest.java
index c59d79bc..7eab3f50 100644
--- a/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/controller/app/muse/AppMuseMarketPublishControllerTest.java
+++ b/muse-cloud/muse-module-market/muse-module-market-server/src/test/java/cn/iocoder/muse/module/market/controller/app/muse/AppMuseMarketPublishControllerTest.java
@@ -185,7 +185,7 @@ class AppMuseMarketPublishControllerTest extends BaseMockitoUnitTest {
setLoginUser(9001L);
when(publishService.listMyPublishRecords(9001L, "1", 1, 20, "work", "draft"))
.thenReturn(new PageResult<>(List.of(new MarketPublishService.PublishRecordItem("8101",
- "可发布作品", "work", "2", "draft", "run_check", null, null, "publisher_only")), 1L));
+ "可发布作品", "work", "2", "draft", "run_check", null, null, "publisher_only", null)), 1L));
mockMvc.perform(get("/muse/marketplace/my-publish-records")
.header("X-API-Version", "1")
diff --git a/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MarketAccountProjectionFacade.java b/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MarketAccountProjectionFacade.java
new file mode 100644
index 00000000..bb91af91
--- /dev/null
+++ b/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MarketAccountProjectionFacade.java
@@ -0,0 +1,25 @@
+package cn.iocoder.muse.module.member.api.account;
+
+/**
+ * Account 市场记录投影可用性边界(BC 对外 SPI 契约)。
+ *
+ * Purchase / License / Publish records 在 Account 域只能读取
+ * {@code muse_account_record_projection}。该 Facade 用来表达外部 Market 投影同步是否已经接入,
+ * 防止 Account 在上游投影不可用时返回伪造的空数据。
+ *
+ * 端口归属 member(读侧 fail-closed 判定, 由 member-server 的 {@code AccountMarketRecordServiceImpl} 消费);
+ * 适配器由 Market owner 提供(market-server 的 {@code MarketAccountProjectionProvider} 实现),
+ * member-alone(无 Market 接入)时回落 member-server 的 {@code UnavailableMarketAccountProjectionFacade}。
+ * 置于 member-api 以便 market 在【不依赖 member-server internal】前提下提供适配器(对称于写端口
+ * {@code MuseAccountRecordProjectionApi} 的布局, 使 market-server 的 pom 仅需依赖 member-api)。
+ * 与【写】端口职责不同、刻意保持分离。
+ */
+public interface MarketAccountProjectionFacade {
+
+ /**
+ * 确认指定记录类型的 Market 投影已经可用。
+ *
+ * @param recordType Account 投影记录类型,只允许 service 内部传入固定值
+ */
+ void requireProjectionAvailable(String recordType);
+}
diff --git a/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MuseAccountRecordProjectionApi.java b/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MuseAccountRecordProjectionApi.java
index f00a80e0..175392ae 100644
--- a/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MuseAccountRecordProjectionApi.java
+++ b/muse-cloud/muse-module-member/muse-module-member-api/src/main/java/cn/iocoder/muse/module/member/api/account/MuseAccountRecordProjectionApi.java
@@ -17,8 +17,8 @@ import cn.iocoder.muse.module.member.api.account.dto.MuseAccountRecordProjection
* (由 ArchUnit BcBoundaryArchTest 机械约束)。
*
* 注:故意不把 member 既有【读校验】端口 {@code MarketAccountProjectionFacade.requireProjectionAvailable}
- * 合并进来 —— 那是 member 读侧 fail-closed 判定(member-server 内部用, 见 AccountMarketRecordServiceImpl),
- * 与本【写】端口职责不同, 保持分离。
+ * 合并进来 —— 那是 member 读侧 fail-closed 判定(同置本 member-api 包, 由 AccountMarketRecordServiceImpl 消费、
+ * Market 适配器实现), 与本【写】端口职责不同, 保持分离。
*/
public interface MuseAccountRecordProjectionApi {
diff --git a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/autoconfigure/member/account/MarketAccountProjectionFacadeAutoConfiguration.java b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/autoconfigure/member/account/MarketAccountProjectionFacadeAutoConfiguration.java
index 9a5edda2..7d83e49d 100644
--- a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/autoconfigure/member/account/MarketAccountProjectionFacadeAutoConfiguration.java
+++ b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/autoconfigure/member/account/MarketAccountProjectionFacadeAutoConfiguration.java
@@ -1,6 +1,6 @@
package cn.iocoder.muse.autoconfigure.member.account;
-import cn.iocoder.muse.module.member.application.account.facade.MarketAccountProjectionFacade;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import cn.iocoder.muse.module.member.application.account.facade.UnavailableMarketAccountProjectionFacade;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
diff --git a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceImpl.java b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceImpl.java
index 525622d2..09bf0ef6 100644
--- a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceImpl.java
+++ b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceImpl.java
@@ -3,7 +3,7 @@ package cn.iocoder.muse.module.member.application.account;
import cn.iocoder.muse.framework.common.exception.ServiceException;
import cn.iocoder.muse.framework.common.pojo.PageParam;
import cn.iocoder.muse.framework.common.pojo.PageResult;
-import cn.iocoder.muse.module.member.application.account.facade.MarketAccountProjectionFacade;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import cn.iocoder.muse.module.member.controller.account.vo.AccountPageResult;
import cn.iocoder.muse.module.member.controller.admin.account.vo.AdminPurchaseRecordRespVO;
import cn.iocoder.muse.module.member.controller.app.account.vo.AppLicenseRecordRespVO;
diff --git a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacade.java b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacade.java
deleted file mode 100644
index 25a2caa6..00000000
--- a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacade.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.iocoder.muse.module.member.application.account.facade;
-
-/**
- * Account 市场记录投影可用性边界。
- *
- * Purchase / License / Publish records 在 Account 域只能读取
- * {@code muse_account_record_projection}。该 Facade 用来表达外部 Market 投影同步是否已经接入,
- * 防止 Account 在上游投影不可用时返回伪造的空数据。
- */
-public interface MarketAccountProjectionFacade {
-
- /**
- * 确认指定记录类型的 Market 投影已经可用。
- *
- * @param recordType Account 投影记录类型,只允许 service 内部传入固定值
- */
- void requireProjectionAvailable(String recordType);
-}
diff --git a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/UnavailableMarketAccountProjectionFacade.java b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/UnavailableMarketAccountProjectionFacade.java
index 870e274a..392a6159 100644
--- a/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/UnavailableMarketAccountProjectionFacade.java
+++ b/muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member/application/account/facade/UnavailableMarketAccountProjectionFacade.java
@@ -1,6 +1,7 @@
package cn.iocoder.muse.module.member.application.account.facade;
import cn.iocoder.muse.framework.common.exception.ServiceException;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import static cn.iocoder.muse.module.member.enums.ErrorCodeConstants.ACCOUNT_MARKET_PROJECTION_UNAVAILABLE;
diff --git a/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceTest.java b/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceTest.java
index 9be83604..9b05efbf 100644
--- a/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceTest.java
+++ b/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/AccountMarketRecordServiceTest.java
@@ -4,7 +4,7 @@ import cn.iocoder.muse.framework.common.exception.ServiceException;
import cn.iocoder.muse.framework.common.pojo.PageParam;
import cn.iocoder.muse.framework.common.pojo.PageResult;
import cn.iocoder.muse.framework.test.core.ut.BaseMockitoUnitTest;
-import cn.iocoder.muse.module.member.application.account.facade.MarketAccountProjectionFacade;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import cn.iocoder.muse.module.member.application.account.facade.UnavailableMarketAccountProjectionFacade;
import cn.iocoder.muse.module.member.controller.account.vo.AccountPageResult;
import cn.iocoder.muse.module.member.controller.admin.account.vo.AdminPurchaseRecordRespVO;
diff --git a/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacadeConfigurationTest.java b/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacadeConfigurationTest.java
index 9afc351a..41c9733b 100644
--- a/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacadeConfigurationTest.java
+++ b/muse-cloud/muse-module-member/muse-module-member-server/src/test/java/cn/iocoder/muse/module/member/application/account/facade/MarketAccountProjectionFacadeConfigurationTest.java
@@ -2,6 +2,7 @@ package cn.iocoder.muse.module.member.application.account.facade;
import cn.iocoder.muse.autoconfigure.member.account.MarketAccountProjectionFacadeAutoConfiguration;
import cn.iocoder.muse.framework.common.exception.ServiceException;
+import cn.iocoder.muse.module.member.api.account.MarketAccountProjectionFacade;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfiguration;