mirror of
https://github.com/Hestia-Homes/assessment-model.git
synced 2026-06-08 11:37:25 +00:00
Added missing api file
This commit is contained in:
parent
423cfa6e5c
commit
f38a762aca
1 changed files with 144 additions and 0 deletions
144
src/app/api/portfolio/summary/[portfolioId]/route.ts
Normal file
144
src/app/api/portfolio/summary/[portfolioId]/route.ts
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
import { portfolio } from "@/app/db/schema/portfolio";
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { db } from "@/app/db/db";
|
||||
import { z } from "zod";
|
||||
import { formatNumber } from "@/app/utils";
|
||||
import { DataItem, ChartData } from "@/app/portfolio/[slug]/utils";
|
||||
import { eq } from "drizzle-orm";
|
||||
|
||||
export async function GET(
|
||||
request: NextRequest,
|
||||
{ params }: { params: { portfolioId: string } }
|
||||
) {
|
||||
const portfolioId = params.portfolioId;
|
||||
|
||||
const data = await db
|
||||
.select({
|
||||
name: portfolio.name,
|
||||
cost: portfolio.cost,
|
||||
epcBreakdownPostRetrofit: portfolio.epcBreakdownPostRetrofit,
|
||||
nUnitsToRetrofit: portfolio.nUnitsToRetrofit,
|
||||
co2PerUnitPostRetrofit: portfolio.co2PerUnitPostRetrofit,
|
||||
energyBillPerUnitPostRetrofit: portfolio.energyBillPerUnitPostRetrofit,
|
||||
energyConsumptionPerUnitPostRetrofit:
|
||||
portfolio.energyConsumptionPerUnitPostRetrofit,
|
||||
valuationImprovementPerUnit: portfolio.valuationImprovementPerUnit,
|
||||
costPerUnit: portfolio.costPerUnit,
|
||||
costPerCo2Saved: portfolio.costPerCo2Saved,
|
||||
costPerSapPoint: portfolio.costPerSapPoint,
|
||||
valuationReturnOnInvestment: portfolio.valuationReturnOnInvestment,
|
||||
})
|
||||
.from(portfolio)
|
||||
.where(eq(portfolio.id, BigInt(portfolioId)));
|
||||
|
||||
if (data.length === 0) {
|
||||
throw new Error("Portfolio not found");
|
||||
}
|
||||
|
||||
if (data.length > 1) {
|
||||
throw new Error("More than one portfolio found");
|
||||
}
|
||||
|
||||
const portfolioName = data[0].name;
|
||||
|
||||
// Format the data we need for the overview
|
||||
const output: DataItem[] = [
|
||||
{
|
||||
title: "EPCs",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: JSON.parse(
|
||||
data[0].epcBreakdownPostRetrofit || "[]"
|
||||
) as ChartData[],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "# Units",
|
||||
scenarios: [{ scenarioName: portfolioName, data: "" }],
|
||||
},
|
||||
{
|
||||
title: "# Units to retrofit",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: String(data[0].nUnitsToRetrofit) || "",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Co2/unit",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: data[0].co2PerUnitPostRetrofit || "",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Energy bills/unit",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: data[0].energyBillPerUnitPostRetrofit || "",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Energy consumption (kWh)/unit",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: data[0].energyConsumptionPerUnitPostRetrofit || "",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Cost (£)",
|
||||
scenarios: [
|
||||
{ scenarioName: portfolioName, data: formatNumber(data[0].cost || 0) },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Cost (£) /unit",
|
||||
scenarios: [
|
||||
{ scenarioName: portfolioName, data: data[0].costPerUnit || "" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "£ per CO2 reduction",
|
||||
scenarios: [
|
||||
{ scenarioName: portfolioName, data: data[0].costPerCo2Saved || "" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "£ per SAP point",
|
||||
scenarios: [
|
||||
{ scenarioName: portfolioName, data: data[0].costPerSapPoint || "" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Valuation improvement per unit",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: data[0].valuationImprovementPerUnit || "",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Valuation return on investment",
|
||||
scenarios: [
|
||||
{
|
||||
scenarioName: portfolioName,
|
||||
data: data[0].valuationReturnOnInvestment || "",
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
return new NextResponse(JSON.stringify(output), {
|
||||
status: 200,
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue