mirror of
https://github.com/Hestia-Homes/assessment-model.git
synced 2026-06-08 11:37:25 +00:00
fixing login issue and converting types of ids
This commit is contained in:
parent
3e2905a6dd
commit
4a34ecd0bc
11 changed files with 860 additions and 25 deletions
|
|
@ -3,8 +3,8 @@ import { NextRequest, NextResponse } from "next/server";
|
|||
import { z } from "zod";
|
||||
|
||||
const PresignedUrlBodySchema = z.object({
|
||||
userId: z.number(),
|
||||
portfolioId: z.number(),
|
||||
userId: z.string(),
|
||||
portfolioId: z.string(),
|
||||
fileKey: z.string(),
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -37,11 +37,9 @@ const ListItem = React.forwardRef<
|
|||
ListItem.displayName = "ListItem";
|
||||
|
||||
export default function AddNewDropDown({
|
||||
portfolioId,
|
||||
isUploadCsvOpen,
|
||||
setIsUploadCsvOpen,
|
||||
}: {
|
||||
portfolioId: number;
|
||||
isUploadCsvOpen: boolean;
|
||||
setIsUploadCsvOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
||||
}) {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import UploadCsvModal from "@/app/portfolio/[slug]/components/UploadCsvModal";
|
|||
import { useState } from "react";
|
||||
|
||||
interface ToolbarProps {
|
||||
portfolioId: number;
|
||||
portfolioId: string;
|
||||
}
|
||||
|
||||
const navigationMenuTriggerStyle = cva(
|
||||
|
|
@ -50,7 +50,6 @@ export function Toolbar({ portfolioId }: ToolbarProps) {
|
|||
</NavigationMenuItem>
|
||||
|
||||
<AddNewDropDown
|
||||
portfolioId={portfolioId}
|
||||
isUploadCsvOpen={modalIsOpen}
|
||||
setIsUploadCsvOpen={setModalIsOpen}
|
||||
/>
|
||||
|
|
|
|||
3
src/app/db/migrations/0023_mute_avengers.sql
Normal file
3
src/app/db/migrations/0023_mute_avengers.sql
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
ALTER TABLE "property" ALTER COLUMN "portfolio_id" SET DATA TYPE bigint;--> statement-breakpoint
|
||||
ALTER TABLE "property_details_epc" ALTER COLUMN "property_id" SET DATA TYPE bigint;--> statement-breakpoint
|
||||
ALTER TABLE "property_details_epc" ALTER COLUMN "portfolio_id" SET DATA TYPE bigint;
|
||||
830
src/app/db/migrations/meta/0023_snapshot.json
Normal file
830
src/app/db/migrations/meta/0023_snapshot.json
Normal file
|
|
@ -0,0 +1,830 @@
|
|||
{
|
||||
"version": "5",
|
||||
"dialect": "pg",
|
||||
"id": "f0a25da5-b02d-4255-9107-ac8c252e7eb9",
|
||||
"prevId": "65f0ce76-b171-4bca-b56d-15ddbbda437c",
|
||||
"tables": {
|
||||
"portfolio": {
|
||||
"name": "portfolio",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"name": {
|
||||
"name": "name",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"budget": {
|
||||
"name": "budget",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"status": {
|
||||
"name": "status",
|
||||
"type": "status",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"goal": {
|
||||
"name": "goal",
|
||||
"type": "goal",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"cost": {
|
||||
"name": "cost",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"number_of_properties": {
|
||||
"name": "number_of_properties",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"co2_equivalent_savings": {
|
||||
"name": "co2_equivalent_savings",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"energy_savings": {
|
||||
"name": "energy_savings",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"energy_cost_savings": {
|
||||
"name": "energy_cost_savings",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"property_valuation_increase": {
|
||||
"name": "property_valuation_increase",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"rental_yield_increase": {
|
||||
"name": "rental_yield_increase",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"total_work_hours": {
|
||||
"name": "total_work_hours",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"created_at": {
|
||||
"name": "created_at",
|
||||
"type": "timestamp (6) with time zone",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
},
|
||||
"updated_at": {
|
||||
"name": "updated_at",
|
||||
"type": "timestamp (6) with time zone",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {}
|
||||
},
|
||||
"portfolioUsers": {
|
||||
"name": "portfolioUsers",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"user_id": {
|
||||
"name": "user_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"portfolio_id": {
|
||||
"name": "portfolio_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"role": {
|
||||
"name": "role",
|
||||
"type": "role",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"created_at": {
|
||||
"name": "created_at",
|
||||
"type": "timestamp (6) with time zone",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
},
|
||||
"updated_at": {
|
||||
"name": "updated_at",
|
||||
"type": "timestamp (6) with time zone",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"portfolioUsers_user_id_user_id_fk": {
|
||||
"name": "portfolioUsers_user_id_user_id_fk",
|
||||
"tableFrom": "portfolioUsers",
|
||||
"tableTo": "user",
|
||||
"columnsFrom": [
|
||||
"user_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
},
|
||||
"portfolioUsers_portfolio_id_portfolio_id_fk": {
|
||||
"name": "portfolioUsers_portfolio_id_portfolio_id_fk",
|
||||
"tableFrom": "portfolioUsers",
|
||||
"tableTo": "portfolio",
|
||||
"columnsFrom": [
|
||||
"portfolio_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {}
|
||||
},
|
||||
"property": {
|
||||
"name": "property",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"portfolio_id": {
|
||||
"name": "portfolio_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"creation_status": {
|
||||
"name": "creation_status",
|
||||
"type": "creation_status",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"uprn": {
|
||||
"name": "uprn",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"building_reference_number": {
|
||||
"name": "building_reference_number",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"status": {
|
||||
"name": "status",
|
||||
"type": "status",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"address": {
|
||||
"name": "address",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"postcode": {
|
||||
"name": "postcode",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"has_pre_condition_report": {
|
||||
"name": "has_pre_condition_report",
|
||||
"type": "boolean",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"has_recommendations": {
|
||||
"name": "has_recommendations",
|
||||
"type": "boolean",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"created_at": {
|
||||
"name": "created_at",
|
||||
"type": "timestamp",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
},
|
||||
"updated_at": {
|
||||
"name": "updated_at",
|
||||
"type": "timestamp",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
},
|
||||
"property_type": {
|
||||
"name": "property_type",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"built_form": {
|
||||
"name": "built_form",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"local_authority": {
|
||||
"name": "local_authority",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"constituency": {
|
||||
"name": "constituency",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"number_of_rooms": {
|
||||
"name": "number_of_rooms",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"year_built": {
|
||||
"name": "year_built",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"tenure": {
|
||||
"name": "tenure",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"current_epc_rating": {
|
||||
"name": "current_epc_rating",
|
||||
"type": "epc",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"current_sap_points": {
|
||||
"name": "current_sap_points",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"property_portfolio_id_portfolio_id_fk": {
|
||||
"name": "property_portfolio_id_portfolio_id_fk",
|
||||
"tableFrom": "property",
|
||||
"tableTo": "portfolio",
|
||||
"columnsFrom": [
|
||||
"portfolio_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {}
|
||||
},
|
||||
"property_details_epc": {
|
||||
"name": "property_details_epc",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"property_id": {
|
||||
"name": "property_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"portfolio_id": {
|
||||
"name": "portfolio_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"full_address": {
|
||||
"name": "full_address",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"total_floor_area": {
|
||||
"name": "total_floor_area",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"walls": {
|
||||
"name": "walls",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"walls_rating": {
|
||||
"name": "walls_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"roof": {
|
||||
"name": "roof",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"roof_rating": {
|
||||
"name": "roof_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"floor": {
|
||||
"name": "floor",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"floor_rating": {
|
||||
"name": "floor_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"windows": {
|
||||
"name": "windows",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"windows_rating": {
|
||||
"name": "windows_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"heating": {
|
||||
"name": "heating",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"heating_rating": {
|
||||
"name": "heating_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"heating_controls": {
|
||||
"name": "heating_controls",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"heating_controls_rating": {
|
||||
"name": "heating_controls_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"hot_water": {
|
||||
"name": "hot_water",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"hot_water_rating": {
|
||||
"name": "hot_water_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"lighting": {
|
||||
"name": "lighting",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"lighting_rating": {
|
||||
"name": "lighting_rating",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"mainfuel": {
|
||||
"name": "mainfuel",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"ventilation": {
|
||||
"name": "ventilation",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"solar_pv": {
|
||||
"name": "solar_pv",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"solar_hot_water": {
|
||||
"name": "solar_hot_water",
|
||||
"type": "boolean",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"wind_turbine": {
|
||||
"name": "wind_turbine",
|
||||
"type": "smallint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"floor_height": {
|
||||
"name": "floor_height",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"number_heated_rooms": {
|
||||
"name": "number_heated_rooms",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"heat_loss_corridor": {
|
||||
"name": "heat_loss_corridor",
|
||||
"type": "boolean",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"unheated_corridor_length": {
|
||||
"name": "unheated_corridor_length",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"number_of_open_fireplaces": {
|
||||
"name": "number_of_open_fireplaces",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"number_of_extensions": {
|
||||
"name": "number_of_extensions",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"number_of_storeys": {
|
||||
"name": "number_of_storeys",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"mains_gas": {
|
||||
"name": "mains_gas",
|
||||
"type": "boolean",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"energy_tariff": {
|
||||
"name": "energy_tariff",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"primary_energy_consumption": {
|
||||
"name": "primary_energy_consumption",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"co2_emissions": {
|
||||
"name": "co2_emissions",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"property_details_epc_property_id_property_id_fk": {
|
||||
"name": "property_details_epc_property_id_property_id_fk",
|
||||
"tableFrom": "property_details_epc",
|
||||
"tableTo": "property",
|
||||
"columnsFrom": [
|
||||
"property_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
},
|
||||
"property_details_epc_portfolio_id_portfolio_id_fk": {
|
||||
"name": "property_details_epc_portfolio_id_portfolio_id_fk",
|
||||
"tableFrom": "property_details_epc",
|
||||
"tableTo": "portfolio",
|
||||
"columnsFrom": [
|
||||
"portfolio_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {}
|
||||
},
|
||||
"property_details_meter": {
|
||||
"name": "property_details_meter",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"uprn": {
|
||||
"name": "uprn",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"energy_supplier": {
|
||||
"name": "energy_supplier",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"gas_supplier": {
|
||||
"name": "gas_supplier",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"meter_reading_total": {
|
||||
"name": "meter_reading_total",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"meter_reading_electricity": {
|
||||
"name": "meter_reading_electricity",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"meter_reading_gas": {
|
||||
"name": "meter_reading_gas",
|
||||
"type": "real",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {}
|
||||
},
|
||||
"property_targets": {
|
||||
"name": "property_targets",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"property_id": {
|
||||
"name": "property_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"portfolio_id": {
|
||||
"name": "portfolio_id",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"created_at": {
|
||||
"name": "created_at",
|
||||
"type": "timestamp",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
},
|
||||
"epc": {
|
||||
"name": "epc",
|
||||
"type": "epc",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"heat_demand": {
|
||||
"name": "heat_demand",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"property_targets_property_id_property_id_fk": {
|
||||
"name": "property_targets_property_id_property_id_fk",
|
||||
"tableFrom": "property_targets",
|
||||
"tableTo": "property",
|
||||
"columnsFrom": [
|
||||
"property_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
},
|
||||
"property_targets_portfolio_id_portfolio_id_fk": {
|
||||
"name": "property_targets_portfolio_id_portfolio_id_fk",
|
||||
"tableFrom": "property_targets",
|
||||
"tableTo": "portfolio",
|
||||
"columnsFrom": [
|
||||
"portfolio_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {}
|
||||
},
|
||||
"user": {
|
||||
"name": "user",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "bigserial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"firstName": {
|
||||
"name": "firstName",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"email": {
|
||||
"name": "email",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"oauth_id": {
|
||||
"name": "oauth_id",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"oauth_provider": {
|
||||
"name": "oauth_provider",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"created_at": {
|
||||
"name": "created_at",
|
||||
"type": "timestamp (6) with time zone",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
},
|
||||
"updated_at": {
|
||||
"name": "updated_at",
|
||||
"type": "timestamp (6) with time zone",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"default": "now()"
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"goal": {
|
||||
"name": "goal",
|
||||
"values": {
|
||||
"Valuation Improvement": "Valuation Improvement",
|
||||
"Increasing EPC": "Increasing EPC",
|
||||
"Reducing CO2 emissions": "Reducing CO2 emissions",
|
||||
"Energy Savings": "Energy Savings",
|
||||
"None": "None"
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
"name": "role",
|
||||
"values": {
|
||||
"creator": "creator",
|
||||
"admin": "admin",
|
||||
"read": "read",
|
||||
"write": "write"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"name": "status",
|
||||
"values": {
|
||||
"scoping": "scoping",
|
||||
"assessment": "assessment",
|
||||
"tendering": "tendering",
|
||||
"project underway": "project underway",
|
||||
"completion; status: on track": "completion; status: on track",
|
||||
"completion; status: delayed": "completion; status: delayed",
|
||||
"completion; status: at risk": "completion; status: at risk",
|
||||
"completion; status: completed": "completion; status: completed",
|
||||
"needs review": "needs review"
|
||||
}
|
||||
},
|
||||
"epc": {
|
||||
"name": "epc",
|
||||
"values": {
|
||||
"A": "A",
|
||||
"B": "B",
|
||||
"C": "C",
|
||||
"D": "D",
|
||||
"E": "E",
|
||||
"F": "F",
|
||||
"G": "G"
|
||||
}
|
||||
},
|
||||
"creation_status": {
|
||||
"name": "creation_status",
|
||||
"values": {
|
||||
"LOADING": "LOADING",
|
||||
"READY": "READY",
|
||||
"ERROR": "ERROR"
|
||||
}
|
||||
}
|
||||
},
|
||||
"schemas": {},
|
||||
"_meta": {
|
||||
"schemas": {},
|
||||
"tables": {},
|
||||
"columns": {}
|
||||
}
|
||||
}
|
||||
|
|
@ -162,6 +162,13 @@
|
|||
"when": 1690906901377,
|
||||
"tag": "0022_smiling_callisto",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"version": "5",
|
||||
"when": 1690970372309,
|
||||
"tag": "0023_mute_avengers",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -79,7 +79,7 @@ export const propertyStatusEnum = pgEnum("status", PortfolioStatus);
|
|||
|
||||
export const property = pgTable("property", {
|
||||
id: bigserial("id", { mode: "bigint" }).primaryKey(),
|
||||
portfolioId: integer("portfolio_id")
|
||||
portfolioId: bigint("portfolio_id", { mode: "bigint" })
|
||||
.notNull()
|
||||
.references(() => portfolio.id),
|
||||
creationStatus: propertyCreationStatusEnum("creation_status").notNull(),
|
||||
|
|
@ -117,10 +117,10 @@ export const FeatureRatingNumeric: [number, ...number[]] = [5, 4, 3, 2, 1];
|
|||
|
||||
export const propertyDetailsEpc = pgTable("property_details_epc", {
|
||||
id: bigserial("id", { mode: "bigint" }).primaryKey(),
|
||||
propertyId: integer("property_id")
|
||||
propertyId: bigint("property_id", { mode: "bigint" })
|
||||
.notNull()
|
||||
.references(() => property.id),
|
||||
portfolioId: integer("portfolio_id")
|
||||
portfolioId: bigint("portfolio_id", { mode: "bigint" })
|
||||
.notNull()
|
||||
.references(() => portfolio.id),
|
||||
fullAddress: text("full_address"),
|
||||
|
|
@ -197,7 +197,7 @@ export type Property = InferModel<typeof property, "select">;
|
|||
export interface PropertyWithTarget {
|
||||
status: string | null;
|
||||
id: bigint;
|
||||
portfolioId: number;
|
||||
portfolioId: bigint;
|
||||
creationStatus: string;
|
||||
address: string | null;
|
||||
postcode: string | null;
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ import { useMutation } from "@tanstack/react-query";
|
|||
import { useSession } from "next-auth/react";
|
||||
import { useMemo } from "react";
|
||||
|
||||
function generateS3Key(userId: number, portfolioId: number, filename: string) {
|
||||
function generateS3Key(userId: string, portfolioId: string, filename: string) {
|
||||
const timestamp = new Date().toISOString().replace(/[:.-]/g, "");
|
||||
const key = `${userId}/${portfolioId}/${filename}-${timestamp}.csv`;
|
||||
return key;
|
||||
}
|
||||
|
||||
interface UseCreatePlanProps {
|
||||
portfolioId: number;
|
||||
portfolioId: string;
|
||||
housingType: string;
|
||||
goal: string;
|
||||
goalValue: string;
|
||||
|
|
@ -35,7 +35,8 @@ const useCreatePlan = ({
|
|||
const router = useRouter();
|
||||
const session = useSession();
|
||||
|
||||
const userId = session.data?.user.dbId;
|
||||
// Since userId is a big int it gets coerced into a string
|
||||
const userId = String(session.data?.user.dbId);
|
||||
|
||||
// Every time the component is re-rendered, a new file key will be generated. To prevent this,
|
||||
// we use useMemo to only generate a new file key when the userId or portfolioId changes.
|
||||
|
|
@ -106,12 +107,10 @@ async function generatePresignedUrl({
|
|||
portfolioId,
|
||||
fileKey,
|
||||
}: {
|
||||
userId: number;
|
||||
portfolioId: number;
|
||||
userId: string;
|
||||
portfolioId: string;
|
||||
fileKey: string;
|
||||
}) {
|
||||
console.log("fileKey: ", fileKey);
|
||||
|
||||
const body = JSON.stringify({
|
||||
userId: userId,
|
||||
portfolioId: portfolioId,
|
||||
|
|
@ -168,7 +167,7 @@ export const SubmitPlan = ({
|
|||
housingType: string;
|
||||
goalValue: string;
|
||||
file: File;
|
||||
portfolioId: number;
|
||||
portfolioId: string;
|
||||
}) => {
|
||||
const { handlePlanBuild, isGeneratingUrlLoading, isUploadLoading } =
|
||||
useCreatePlan({ portfolioId, housingType, goal, goalValue, file });
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ export default function UploadCsvModal({
|
|||
}: {
|
||||
isOpen?: boolean;
|
||||
setIsOpen: (isOpen: boolean) => void;
|
||||
portfolioId: number;
|
||||
portfolioId: string;
|
||||
}) {
|
||||
const [budget, setBudget] = useState<undefined | number>(undefined);
|
||||
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ export default async function Page({
|
|||
params,
|
||||
searchParams,
|
||||
}: {
|
||||
params: { slug: number };
|
||||
params: { slug: string };
|
||||
searchParams: { [key: string]: string | string[] | undefined | number };
|
||||
}) {
|
||||
// This page is served from the server so we can make calls to the database
|
||||
|
|
@ -190,8 +190,7 @@ export default async function Page({
|
|||
// This is temp until we retrieve this data from the frontend
|
||||
// TODO: Update the objects to contains objective + any other required information
|
||||
|
||||
// We explcitly cast the slug to a number since it will be a string
|
||||
const portfolioId = Number(params.slug);
|
||||
const portfolioId = params.slug;
|
||||
const {
|
||||
name: portfolioName,
|
||||
budget,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { property } from "@/app/db/schema/property";
|
|||
import type { Portfolio } from "@/app/db/schema/portfolio";
|
||||
import type { PropertyWithTarget } from "@/app/db/schema/property";
|
||||
|
||||
export async function getPortfolio(portfolioId: number): Promise<Portfolio> {
|
||||
export async function getPortfolio(portfolioId: string): Promise<Portfolio> {
|
||||
const data = await db
|
||||
.select()
|
||||
.from(portfolio)
|
||||
|
|
@ -23,7 +23,7 @@ export async function getPortfolio(portfolioId: number): Promise<Portfolio> {
|
|||
}
|
||||
|
||||
export async function getProperties(
|
||||
portfolioId: number,
|
||||
portfolioId: string,
|
||||
limit: number = 1000,
|
||||
offset: number = 0
|
||||
): Promise<PropertyWithTarget[]> {
|
||||
|
|
@ -38,7 +38,7 @@ export async function getProperties(
|
|||
status: true,
|
||||
creationStatus: true,
|
||||
},
|
||||
where: eq(property.portfolioId, portfolioId),
|
||||
where: eq(property.portfolioId, BigInt(portfolioId)),
|
||||
with: {
|
||||
target: {
|
||||
columns: {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue