Add D9 and Moon evidence to synastry API
This commit is contained in:
@@ -42,6 +42,32 @@ function moonLongitude(chart: Record<string, unknown>) {
|
||||
return numeric;
|
||||
}
|
||||
|
||||
function moonSummary(chart: Record<string, unknown>) {
|
||||
const planets = chart.planets && typeof chart.planets === "object" ? chart.planets as Record<string, unknown> : {};
|
||||
const moon = planets.Moon && typeof planets.Moon === "object" ? planets.Moon as Record<string, unknown> : {};
|
||||
return {
|
||||
sign: moon.sign,
|
||||
nakshatra: moon.nakshatra,
|
||||
pada: moon.nakshatra_pada,
|
||||
lord: moon.nakshatra_lord,
|
||||
longitude: moonLongitude(chart),
|
||||
};
|
||||
}
|
||||
|
||||
function d9Summary(varga: Record<string, unknown>) {
|
||||
const result = varga.result && typeof varga.result === "object" ? varga.result as Record<string, unknown> : {};
|
||||
const d9 = result.D9_Navamsa && typeof result.D9_Navamsa === "object" ? result.D9_Navamsa as Record<string, unknown> : {};
|
||||
const ascendant = d9.ascendant && typeof d9.ascendant === "object" ? d9.ascendant as Record<string, unknown> : {};
|
||||
const planets = d9.planets && typeof d9.planets === "object" ? d9.planets as Record<string, unknown> : {};
|
||||
return {
|
||||
ascendant,
|
||||
moon: planets.Moon,
|
||||
venus: planets.Venus,
|
||||
mars: planets.Mars,
|
||||
source: varga.source,
|
||||
};
|
||||
}
|
||||
|
||||
async function postPython(path: string, body: unknown) {
|
||||
const response = await fetch(`${apiBase}${path}`, {
|
||||
method: "POST",
|
||||
@@ -64,15 +90,28 @@ export async function POST(request: Request) {
|
||||
}
|
||||
const selfChart = await postPython("/api/chart", birthPayload(body.selfProfile));
|
||||
const partnerChart = await postPython("/api/chart", birthPayload(body.partnerProfile));
|
||||
const selfD9 = await postPython("/api/varga_full", {
|
||||
...birthPayload(body.selfProfile),
|
||||
planets: selfChart.planets,
|
||||
ascendant: selfChart.ascendant,
|
||||
divisions: ["D9"],
|
||||
});
|
||||
const partnerD9 = await postPython("/api/varga_full", {
|
||||
...birthPayload(body.partnerProfile),
|
||||
planets: partnerChart.planets,
|
||||
ascendant: partnerChart.ascendant,
|
||||
divisions: ["D9"],
|
||||
});
|
||||
const synastry = await postPython("/api/synastry", {
|
||||
male_moon: moonLongitude(selfChart),
|
||||
female_moon: moonLongitude(partnerChart),
|
||||
});
|
||||
return NextResponse.json({
|
||||
status: "ok",
|
||||
method: "ashtakoot_from_computed_moon",
|
||||
selfChart: { moon: moonLongitude(selfChart) },
|
||||
partnerChart: { moon: moonLongitude(partnerChart) },
|
||||
method: "ashtakoot_plus_moon_nakshatra_d9",
|
||||
evidenceLayers: ["ashtakoot", "moon_nakshatra", "d9_navamsa"],
|
||||
selfChart: { moon: moonSummary(selfChart), d9: d9Summary(selfD9) },
|
||||
partnerChart: { moon: moonSummary(partnerChart), d9: d9Summary(partnerD9) },
|
||||
synastry,
|
||||
});
|
||||
} catch (error) {
|
||||
|
||||
@@ -1256,15 +1256,16 @@ export default function Home() {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ selfProfile: profile, partnerProfile: record.profile }),
|
||||
});
|
||||
const payload = await response.json().catch(() => null) as { status?: string; synastry?: { total_score?: number; max_score?: number; assessment?: string } } | null;
|
||||
const payload = await response.json().catch(() => null) as { status?: string; evidenceLayers?: string[]; synastry?: { total_score?: number; max_score?: number; assessment?: string } } | null;
|
||||
if (response.ok && payload?.status === "ok") {
|
||||
const score = payload.synastry?.total_score;
|
||||
const max = payload.synastry?.max_score;
|
||||
const assessment = payload.synastry?.assessment;
|
||||
const layers = (payload.evidenceLayers || []).join(" / ") || "Ashtakoot / Moon / D9";
|
||||
chooseSuggestedQuestion([
|
||||
baseQuestion,
|
||||
"",
|
||||
`已计算基础合盘证据:Ashtakoot ${score ?? "?"}/${max ?? "?"},初步评级:${assessment || "待解释"}。请基于这个证据包继续分析。`,
|
||||
`已计算基础合盘证据:${layers};Ashtakoot ${score ?? "?"}/${max ?? "?"},初步评级:${assessment || "待解释"}。请基于这个证据包继续分析。`,
|
||||
].join("\n"), "marriage");
|
||||
} else {
|
||||
chooseSuggestedQuestion(baseQuestion, "marriage");
|
||||
|
||||
@@ -163,9 +163,13 @@ def test_synastry_route_orchestrates_python_chart_and_ashtakoot() -> None:
|
||||
'const apiBase = process.env.JYOTISH_API_BASE ?? "http://127.0.0.1:5200"',
|
||||
'postPython("/api/chart", birthPayload(body.selfProfile))',
|
||||
'postPython("/api/chart", birthPayload(body.partnerProfile))',
|
||||
'postPython("/api/varga_full"',
|
||||
'postPython("/api/synastry"',
|
||||
"moonLongitude(selfChart)",
|
||||
"ashtakoot_from_computed_moon",
|
||||
"moonSummary(selfChart)",
|
||||
"d9Summary(selfD9)",
|
||||
"ashtakoot_plus_moon_nakshatra_d9",
|
||||
'evidenceLayers: ["ashtakoot", "moon_nakshatra", "d9_navamsa"]',
|
||||
'status: "blocked"',
|
||||
):
|
||||
assert token in route
|
||||
|
||||
Reference in New Issue
Block a user