You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.0 KiB
70 lines
2.0 KiB
import { cookies } from "next/headers";
|
|
import { fail, ok } from "@/lib/response";
|
|
import {
|
|
EMBED_DEMO_COOKIE,
|
|
verifyEmbedDemoToken,
|
|
} from "@/modules/embed-demo/auth";
|
|
import { isKnownCustomer } from "@/modules/auth/service-token-env";
|
|
import { isDbCustomerActive } from "@/modules/customer/customer-service";
|
|
import {
|
|
defaultMarkupDto,
|
|
serializeMarkupConfig,
|
|
} from "@/modules/pricing/markup-service";
|
|
import { hasCustomerProviderCredential } from "@/modules/customer/provider-credentials";
|
|
import { prisma } from "@/lib/prisma";
|
|
|
|
async function isEmbedCustomerAllowed(customerId: string): Promise<boolean> {
|
|
if (isKnownCustomer(customerId)) {
|
|
return true;
|
|
}
|
|
return isDbCustomerActive(customerId);
|
|
}
|
|
|
|
async function loadProviderFlags(customerId: string) {
|
|
const [mothership, flock] = await Promise.all([
|
|
hasCustomerProviderCredential(customerId, "mothership"),
|
|
hasCustomerProviderCredential(customerId, "flock"),
|
|
]);
|
|
return {
|
|
mothership: { has_password: mothership },
|
|
flock: { has_password: flock },
|
|
};
|
|
}
|
|
|
|
/** GET /api/embed-demo/me — 当前演示会话与加价配置 */
|
|
export async function GET() {
|
|
const cookieStore = await cookies();
|
|
const raw = cookieStore.get(EMBED_DEMO_COOKIE)?.value;
|
|
if (!raw) {
|
|
return fail("UNAUTHORIZED", "未登录", 401);
|
|
}
|
|
|
|
let customerId: string;
|
|
let loginType: string;
|
|
try {
|
|
const payload = await verifyEmbedDemoToken(raw);
|
|
customerId = payload.sub;
|
|
loginType = payload.loginType;
|
|
} catch {
|
|
return fail("UNAUTHORIZED", "演示会话无效或已过期", 401);
|
|
}
|
|
|
|
if (!(await isEmbedCustomerAllowed(customerId))) {
|
|
return fail("FORBIDDEN", "客户已停用", 403);
|
|
}
|
|
|
|
const markupRow = await prisma.markupConfig.findFirst({
|
|
where: { customerId, isDeleted: false },
|
|
});
|
|
const markup = markupRow
|
|
? serializeMarkupConfig(markupRow)
|
|
: defaultMarkupDto(customerId);
|
|
|
|
return ok({
|
|
customer_id: customerId,
|
|
login_type: loginType,
|
|
markup,
|
|
providers: await loadProviderFlags(customerId),
|
|
});
|
|
}
|