First Commit
Deploy App / deploy (push) Failing after 1m1s

This commit is contained in:
Damian Kellenberger
2026-07-08 00:13:32 +02:00
commit 1e8f1772d9
49 changed files with 3821 additions and 0 deletions
@@ -0,0 +1,99 @@
import { NextResponse } from "next/server";
import { prisma } from "@/lib/db";
import { scenarioInclude } from "@/lib/scenario-service";
type Params = { params: Promise<{ planId: string }> };
export async function POST(request: Request, { params }: Params) {
const { planId } = await params;
const body = await request.json().catch(() => ({}));
const plan = await prisma.plan.findUnique({
where: { id: planId },
include: {
scenarios: {
orderBy: { sortOrder: "desc" },
take: 1,
include: scenarioInclude,
},
},
});
if (!plan) {
return NextResponse.json({ error: "Plan nicht gefunden" }, { status: 404 });
}
const source = body.copyFromScenarioId
? await prisma.scenario.findUnique({
where: { id: body.copyFromScenarioId },
include: scenarioInclude,
})
: plan.scenarios[0];
const nextOrder = (plan.scenarios[0]?.sortOrder ?? 0) + 1;
const scenario = await prisma.scenario.create({
data: {
planId,
name: body.name ?? `Szenario ${nextOrder + 1}`,
isBaseline: false,
sortOrder: nextOrder,
},
});
if (source && source.phases.length > 0) {
for (const phase of source.phases) {
const newPhase = await prisma.lifePhase.create({
data: {
scenarioId: scenario.id,
name: phase.name,
sortOrder: phase.sortOrder,
durationYears: phase.durationYears,
isRetirementPhase: phase.isRetirementPhase,
incomeMode: phase.incomeMode,
householdIncome: phase.householdIncome,
person1Income: phase.person1Income,
person2Income: phase.person2Income,
householdExpenses: phase.householdExpenses,
inflationRate: phase.inflationRate,
expectedPensionIncome: phase.expectedPensionIncome,
expectedPensionCapital: phase.expectedPensionCapital,
pensionCapitalTaxRate: phase.pensionCapitalTaxRate,
securities: {
create: phase.securities.map((s) => ({
name: s.name,
ownerTag: s.ownerTag,
startBalance: s.startBalance,
expectedReturnRate: s.expectedReturnRate,
annualSavingsAllocation: s.annualSavingsAllocation,
sortOrder: s.sortOrder,
})),
},
properties: {
create: phase.properties.map((p) => ({
name: p.name,
currentValue: p.currentValue,
mortgageBalance: p.mortgageBalance,
valueGrowthRate: p.valueGrowthRate,
annualAmortization: p.annualAmortization,
saleTaxRatePercent: p.saleTaxRatePercent,
sortOrder: p.sortOrder,
})),
},
oneTimeEvents: {
create: phase.oneTimeEvents.map((e) => ({
name: e.name,
yearOffset: e.yearOffset,
amount: e.amount,
type: e.type,
taxRatePercent: e.taxRatePercent,
})),
},
},
});
void newPhase;
}
}
return NextResponse.json(scenario, { status: 201 });
}