chore(architecture): enforce app data boundaries

This commit is contained in:
2026-06-30 17:37:53 +08:00
parent 8d5ee68e5f
commit e75865865f
3 changed files with 44 additions and 2 deletions
+31
View File
@@ -5,6 +5,37 @@ import nextTs from "eslint-config-next/typescript";
const eslintConfig = defineConfig([
...nextVitals,
...nextTs,
{
files: ["src/app/**/*.{ts,tsx}"],
ignores: ["src/app/api/**", "src/app/**/route.ts"],
rules: {
"no-restricted-imports": [
"error",
{
patterns: [
{
group: [
"@/data/repositories",
"@/data/repositories/*",
"@/data/repositories/**",
],
message:
"App UI should depend on stores or lib use-case helpers instead of repositories.",
},
{
group: [
"@/data/storage",
"@/data/storage/*",
"@/data/storage/**",
],
message:
"App UI should not access storage directly; move persistence behind lib or stores.",
},
],
},
],
},
},
// Override default ignores of eslint-config-next.
globalIgnores([
// Default ignores of eslint-config-next:
+2 -2
View File
@@ -16,7 +16,7 @@ import Link from "next/link";
import { useRouter } from "next/navigation";
import { MobileShell } from "@/app/_components/core/mobile-shell";
import { getPaymentRepository } from "@/data/repositories/payment_repository";
import { getCurrentVipPaymentStatus } from "@/lib/payment/payment_status";
import { ROUTES } from "@/router/routes";
export default function SubscriptionSuccessPage() {
@@ -33,7 +33,7 @@ export default function SubscriptionSuccessPage() {
let cancelled = false;
const tryRefresh = async (attemptsLeft: number) => {
if (cancelled) return;
const r = await getPaymentRepository().getVipStatus();
const r = await getCurrentVipPaymentStatus();
if (cancelled) return;
if (r.success) {
if (r.data.isVip) {
+11
View File
@@ -0,0 +1,11 @@
"use client";
import type { PaymentVipStatusResponse } from "@/data/dto/payment";
import { getPaymentRepository } from "@/data/repositories/payment_repository";
import type { Result } from "@/utils";
export function getCurrentVipPaymentStatus(): Promise<
Result<PaymentVipStatusResponse>
> {
return getPaymentRepository().getVipStatus();
}