// routes/landlord/portfolio/index.tsx import { define } from "../../../utils.ts"; import { page } from "fresh"; import { getPropertiesByOwner } from "../../../services/propertyService.ts"; import { getLeasesByOwner } from "../../../services/leaseService.ts"; import { getPaymentTransactionsByOwner } from "../../../services/paymentService.ts"; import { Lease, PaymentTransaction, Property } from "../../../db/interfaces.ts"; function formatCurrency(value: number): string { return `$${value.toLocaleString()}`; } export const handler = define.handlers({ async GET(ctx) { const { user_id } = ctx.state.data; try { const properties = await getPropertiesByOwner(user_id); const leases = await getLeasesByOwner(user_id); const transactions = await getPaymentTransactionsByOwner(user_id); return page({ properties, leases, transactions, }); } catch (error) { console.error("Error loading portfolio:", error); return page({ error: "Failed to load portfolio", }); } }, }); export default define.page(function LandlordPortfolio({ data }) { const { properties, leases, transactions, error } = data as { properties: Property[]; leases: Lease[]; transactions: PaymentTransaction[]; error?: string; }; const propertyLeaseMap = new Map( leases .filter((lease) => lease.property_id) .map((lease) => [lease.property_id as string, lease]), ); const propertyRevenueMap = new Map(); for (const transaction of transactions || []) { const lease = leases.find((item) => item.id === transaction.lease_id); if (!lease?.property_id) continue; const previous = propertyRevenueMap.get(lease.property_id) || 0; propertyRevenueMap.set( lease.property_id, previous + (transaction.amount || 0), ); } return (

Multi-Property Portfolio

Monitor performance across all active properties

{error && (
{error}
)}
{(properties || []).map((property) => { const lease = propertyLeaseMap.get(property.id); const revenue = propertyRevenueMap.get(property.id) || 0; return (

{property.title || property.address_1 || "Property"}

{property.address_1} {property.city ? `, ${property.city}` : ""} {property.state ? `, ${property.state}` : ""}

{property.rental_status || "draft"}

Monthly Rent

{formatCurrency(property.monthly_rent || 0)}

Lease Status

{lease?.lease_status || "draft"}

Tenant

{lease?.tenant_id ? "Assigned" : "Vacant"}

Payments Collected

{formatCurrency(revenue)}

); })}
); });