chore(architecture): enforce app data boundaries
This commit is contained in:
@@ -5,6 +5,37 @@ import nextTs from "eslint-config-next/typescript";
|
|||||||
const eslintConfig = defineConfig([
|
const eslintConfig = defineConfig([
|
||||||
...nextVitals,
|
...nextVitals,
|
||||||
...nextTs,
|
...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.
|
// Override default ignores of eslint-config-next.
|
||||||
globalIgnores([
|
globalIgnores([
|
||||||
// Default ignores of eslint-config-next:
|
// Default ignores of eslint-config-next:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import Link from "next/link";
|
|||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
import { MobileShell } from "@/app/_components/core/mobile-shell";
|
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";
|
import { ROUTES } from "@/router/routes";
|
||||||
|
|
||||||
export default function SubscriptionSuccessPage() {
|
export default function SubscriptionSuccessPage() {
|
||||||
@@ -33,7 +33,7 @@ export default function SubscriptionSuccessPage() {
|
|||||||
let cancelled = false;
|
let cancelled = false;
|
||||||
const tryRefresh = async (attemptsLeft: number) => {
|
const tryRefresh = async (attemptsLeft: number) => {
|
||||||
if (cancelled) return;
|
if (cancelled) return;
|
||||||
const r = await getPaymentRepository().getVipStatus();
|
const r = await getCurrentVipPaymentStatus();
|
||||||
if (cancelled) return;
|
if (cancelled) return;
|
||||||
if (r.success) {
|
if (r.success) {
|
||||||
if (r.data.isVip) {
|
if (r.data.isVip) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user