Added missing api file

This commit is contained in:
Khalim Conn-Kowlessar 2024-04-16 02:32:06 +01:00
parent 423cfa6e5c
commit f38a762aca

View 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,
});
}