From fcd5f384ac8b662e2d09a6cdf82a82ebbe5bfea9 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:09:02 +0000 Subject: [PATCH 01/15] Apply patch [skip ci] --- TODO.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index b9a09fe..91b2ccb 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,7 @@ This document outlines the remaining tasks, incomplete features, and future development plans for the application. ## High Priority -- **Implement Payment Processing**: The current rent payment system in `routes/tenant/rent/pay/index.tsx` is a placeholder. It needs to be fully implemented with a payment provider like Stripe to handle real transactions securely. +- **Implement Lease Creation for Landlord Dashboard**: Add a "Create New Lease" button to the landlord dashboard that allows landlords to create leases with basic price information (rent, security deposit). Leases should have two states: 'new' (initial state) and 'signed' (after tenant accepts invite). The tenant field should be optional until a tenant accepts an invitation. ## Backend & API - **Add Well-Known Endpoint**: Implement a `/.well-known/acme-challenge/:token` endpoint in `main.ts` to support services like Let's Encrypt for SSL certificate validation in production. @@ -15,6 +15,7 @@ This document outlines the remaining tasks, incomplete features, and future deve - Tenant invitation and management (`islands/LandlordInviteTenant.tsx`) - Messaging with tenants (`islands/LandlordMessageThreads.tsx`) - Financial tracking and reporting + - Lease creation and management (current task) - **Complete Tenant Dashboard**: Finalize all features under the `routes/tenant/` directory. This includes: - Viewing lease documents - Tracking rent payments and financial obligations @@ -32,3 +33,4 @@ This document outlines the remaining tasks, incomplete features, and future deve - **Calendar Functionality**: Expand the calendar features in `routes/calendar/` and improve the `islands/FinancialCalendar.tsx` component to be more interactive and informative. - **Document Management**: Build out a robust document upload, storage, and sharing system for leases, notices, and other rental-related documents. - **Reminders and Notifications**: Implement a system for sending automated reminders for rent payments, lease renewals, and other important events. + From 2f354e814c2c69cf90f09d1d54f9eb8a6a3732ae Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:13:34 +0000 Subject: [PATCH 02/15] Apply patch [skip ci] --- routes/api/create/lease.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/routes/api/create/lease.ts b/routes/api/create/lease.ts index 1a3d004..619933c 100644 --- a/routes/api/create/lease.ts +++ b/routes/api/create/lease.ts @@ -1,6 +1,7 @@ // routes/api/create/lease.ts import { define } from "../../../utils.ts"; -import { createLease, getProperty } from "../../../services/propertyService.ts"; +import { createLease } from "../../../services/leaseService.ts"; +import { getProperty } from "../../../services/propertyService.ts"; import { SessionCookie } from "../../auth/callback.ts"; export const handler = define.handlers({ @@ -9,7 +10,7 @@ export const handler = define.handlers({ const stateData: SessionCookie = ctx.state.data; const form = await ctx.req.formData(); const sender = form.get("sender"); - const tenant_id = stateData.user_id; + const tenant_id = form.get("tenant_id")?.toString(); const propertyId = form.get("property_id")?.toString() || ""; const title = form.get("title")?.toString() || ""; const rent = Number(form.get("rent")); @@ -19,18 +20,20 @@ export const handler = define.handlers({ const end_date = form.get("end_date") ? Date.parse(form.get("end_date")?.toString() + "T00:00:00") : null; + const security_deposit = Number(form.get("security_deposit")) || 0; const property = await getProperty(propertyId); if (property.length == 1 && start_date && end_date) { const owner_id = property[0].owner_id as string; await createLease( - propertyId, - tenant_id, - owner_id, title, - rent, + propertyId, + owner_id, start_date, end_date, + rent, + security_deposit, + tenant_id, ); } @@ -50,3 +53,4 @@ export const handler = define.handlers({ } }, }); + From 69df09d753a0bb85831021a45f2548ac2ebb70c3 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:14:41 +0000 Subject: [PATCH 03/15] Apply patch [skip ci] --- routes/api/create/lease.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/routes/api/create/lease.ts b/routes/api/create/lease.ts index 619933c..d49a43d 100644 --- a/routes/api/create/lease.ts +++ b/routes/api/create/lease.ts @@ -53,4 +53,3 @@ export const handler = define.handlers({ } }, }); - From d237d36f9738b862347a75e1a5d183a90f5819be Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:15:50 +0000 Subject: [PATCH 04/15] Apply patch [skip ci] --- routes/api/create/lease.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/routes/api/create/lease.ts b/routes/api/create/lease.ts index d49a43d..dd4ccff 100644 --- a/routes/api/create/lease.ts +++ b/routes/api/create/lease.ts @@ -7,7 +7,7 @@ import { SessionCookie } from "../../auth/callback.ts"; export const handler = define.handlers({ async POST(ctx) { try { - const stateData: SessionCookie = ctx.state.data; + const _stateData: SessionCookie = ctx.state.data; const form = await ctx.req.formData(); const sender = form.get("sender"); const tenant_id = form.get("tenant_id")?.toString(); @@ -53,3 +53,4 @@ export const handler = define.handlers({ } }, }); + From 6685923277ac827328e05d7b2e732d02b21e221d Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:20:51 +0000 Subject: [PATCH 05/15] Apply patch [skip ci] --- services/leaseService.ts | 61 +--------------------------------------- 1 file changed, 1 insertion(+), 60 deletions(-) diff --git a/services/leaseService.ts b/services/leaseService.ts index e35d174..820a5ea 100644 --- a/services/leaseService.ts +++ b/services/leaseService.ts @@ -1,63 +1,4 @@ -// services/leaseService.ts -// Handle lease management, creation, updates, and tenant relationships - -import { and, eq } from "drizzle-orm"; -import { db } from "../db/db.ts"; -import { leases } from "../db/schema.ts"; -import { Lease } from "../db/interfaces.ts"; -import { - getE2ELeaseById, - getE2ELeasesByOwner, - getE2ELeasesByTenant, - isE2EEnabled, -} from "./e2eFixtures.ts"; - -// export interface Lease { -// id: string; -// title: string | null; -// property_id: string; -// property_address: string; -// tenant_id: string | null; -// owner_id: string; -// start_date: number; -// end_date: number; -// rent: number | null; -// security_deposit: number | null; -// lease_status: string | null; // 'draft', 'active', 'expired', 'terminated' -// lease_document_url: string | null; -// payment_schedule_id: string | null; -// late_fee_rules: string | null; // JSON string of late fee rules -// auto_renewal: boolean | null; -// encrypted_data: string | null; -// created_on: number; -// updated_on: number; -// } - -// Create new lease -export async function createLease( - title: string, - property_id: string, - owner_id: string, - start_date: number, - end_date: number, - rent: number, - security_deposit: number = 0, - tenant_id?: string, - payment_schedule_id?: string, -) { - const now = Date.now(); - return await db.insert(leases) - .values({ - id: crypto.randomUUID(), - title, - property_id, - tenant_id: tenant_id || null, - owner_id, - start_date, - end_date, - rent, - security_deposit, - lease_status: "draft", + lease_status: "new", lease_document_url: null, payment_schedule_id: payment_schedule_id || null, late_fee_rules: null, From d33c0ead99f25ce795952a00ab83cf3bef8523ac Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:28:21 +0000 Subject: [PATCH 06/15] Apply patch [skip ci] --- services/leaseService.ts | 61 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/services/leaseService.ts b/services/leaseService.ts index 820a5ea..e35d174 100644 --- a/services/leaseService.ts +++ b/services/leaseService.ts @@ -1,4 +1,63 @@ - lease_status: "new", +// services/leaseService.ts +// Handle lease management, creation, updates, and tenant relationships + +import { and, eq } from "drizzle-orm"; +import { db } from "../db/db.ts"; +import { leases } from "../db/schema.ts"; +import { Lease } from "../db/interfaces.ts"; +import { + getE2ELeaseById, + getE2ELeasesByOwner, + getE2ELeasesByTenant, + isE2EEnabled, +} from "./e2eFixtures.ts"; + +// export interface Lease { +// id: string; +// title: string | null; +// property_id: string; +// property_address: string; +// tenant_id: string | null; +// owner_id: string; +// start_date: number; +// end_date: number; +// rent: number | null; +// security_deposit: number | null; +// lease_status: string | null; // 'draft', 'active', 'expired', 'terminated' +// lease_document_url: string | null; +// payment_schedule_id: string | null; +// late_fee_rules: string | null; // JSON string of late fee rules +// auto_renewal: boolean | null; +// encrypted_data: string | null; +// created_on: number; +// updated_on: number; +// } + +// Create new lease +export async function createLease( + title: string, + property_id: string, + owner_id: string, + start_date: number, + end_date: number, + rent: number, + security_deposit: number = 0, + tenant_id?: string, + payment_schedule_id?: string, +) { + const now = Date.now(); + return await db.insert(leases) + .values({ + id: crypto.randomUUID(), + title, + property_id, + tenant_id: tenant_id || null, + owner_id, + start_date, + end_date, + rent, + security_deposit, + lease_status: "draft", lease_document_url: null, payment_schedule_id: payment_schedule_id || null, late_fee_rules: null, From 480d6c0ebad6bc9981af1cc2dd9675fe1632fafa Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:28:52 +0000 Subject: [PATCH 07/15] Apply patch [skip ci] --- services/leaseService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/leaseService.ts b/services/leaseService.ts index e35d174..11d6f3c 100644 --- a/services/leaseService.ts +++ b/services/leaseService.ts @@ -57,7 +57,7 @@ export async function createLease( end_date, rent, security_deposit, - lease_status: "draft", + lease_status: "new", lease_document_url: null, payment_schedule_id: payment_schedule_id || null, late_fee_rules: null, @@ -247,3 +247,4 @@ export async function getLeaseStatsByOwner(owner_id: string) { without_tenant: allLeases.filter((l) => l.tenant_id === null).length, }; } + From 7bb4f05267bb590d9b91a56a8942a6aaf608458b Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:29:23 +0000 Subject: [PATCH 08/15] Apply patch [skip ci] --- services/leaseService.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/services/leaseService.ts b/services/leaseService.ts index 11d6f3c..2ddd6ed 100644 --- a/services/leaseService.ts +++ b/services/leaseService.ts @@ -247,4 +247,3 @@ export async function getLeaseStatsByOwner(owner_id: string) { without_tenant: allLeases.filter((l) => l.tenant_id === null).length, }; } - From c7d960d364a6cc349b0ced4bb396097a307958d7 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:30:38 +0000 Subject: [PATCH 09/15] Apply patch [skip ci] --- islands/dialogs/AddLeaseDialog.tsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/islands/dialogs/AddLeaseDialog.tsx b/islands/dialogs/AddLeaseDialog.tsx index c248bd6..63d6f69 100644 --- a/islands/dialogs/AddLeaseDialog.tsx +++ b/islands/dialogs/AddLeaseDialog.tsx @@ -29,7 +29,6 @@ export default function AddLeaseDialog( .toISOString().split("T")[0], rent: propertyCost !== undefined ? String(propertyCost) : "", security_deposit: "", - lease_status: "", }); return ( @@ -102,14 +101,6 @@ export default function AddLeaseDialog( onInput={(e) => setForm({ ...form, security_deposit: e.currentTarget.value })} /> - - setForm({ ...form, lease_status: e.currentTarget.value })} - />
+ +
+ + + ); + })() + : null; + + return [popAddLease, popupAddLeaseDialog || propertySelectionDialog] as const; } + From 34c04a4ef4148d3b3e2255b7bcc2196f12a1b26d Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:32:58 +0000 Subject: [PATCH 11/15] Apply patch [skip ci] --- islands/dialogs/PopAddLeaseDialog.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/islands/dialogs/PopAddLeaseDialog.tsx b/islands/dialogs/PopAddLeaseDialog.tsx index b2c7e17..437f9a5 100644 --- a/islands/dialogs/PopAddLeaseDialog.tsx +++ b/islands/dialogs/PopAddLeaseDialog.tsx @@ -10,6 +10,7 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { resolve: (value: boolean) => void; } | null >(null); + const [selectedPropertyId, setSelectedPropertyId] = useState(""); function getPropertyInfo(propertyId: string) { const property = properties.find((p) => p.id === propertyId); @@ -56,8 +57,6 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { // Render property selection dialog if no propertyId provided const propertySelectionDialog = popup && !popup.propertyId ? (() => { - const [selectedPropertyId, setSelectedPropertyId] = useState(""); - return (
@@ -105,3 +104,4 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { return [popAddLease, popupAddLeaseDialog || propertySelectionDialog] as const; } + From e1c3a826724a5acdcf62da63da42dca3cbe59a37 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:38:37 +0000 Subject: [PATCH 12/15] Apply patch [skip ci] --- islands/dialogs/PopAddLeaseDialog.tsx | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/islands/dialogs/PopAddLeaseDialog.tsx b/islands/dialogs/PopAddLeaseDialog.tsx index 437f9a5..5decad7 100644 --- a/islands/dialogs/PopAddLeaseDialog.tsx +++ b/islands/dialogs/PopAddLeaseDialog.tsx @@ -11,6 +11,7 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { } | null >(null); const [selectedPropertyId, setSelectedPropertyId] = useState(""); + const [showPropertySelection, setShowPropertySelection] = useState(false); function getPropertyInfo(propertyId: string) { const property = properties.find((p) => p.id === propertyId); @@ -26,17 +27,22 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { // Show the popup and return a Promise for the answer const popAddLease = ( propertyId?: string, - popupKey: number, + popupKey?: number, ): Promise => { return new Promise((resolve) => { - setPopup({ propertyId, popupKey, resolve }); + if (propertyId) { + setPopup({ propertyId, popupKey: popupKey || 0, resolve }); + } else { + setShowPropertySelection(true); + setPopup({ propertyId: null, popupKey: popupKey || 0, resolve }); + } }); }; // Render the popup if needed - const popupAddLeaseDialog = popup + const popupAddLeaseDialog = popup && popup.propertyId ? (() => { - const { title, address, price } = getPropertyInfo(popup.propertyId || ""); + const { title, address, price } = getPropertyInfo(popup.propertyId); return ( { popup.resolve(false); setPopup(null); + setShowPropertySelection(false); + setSelectedPropertyId(""); }} /> ); @@ -55,7 +63,7 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { : null; // Render property selection dialog if no propertyId provided - const propertySelectionDialog = popup && !popup.propertyId + const propertySelectionDialog = showPropertySelection ? (() => { return (
@@ -78,8 +86,10 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { type="button" class="px-4 py-2 rounded border" onClick={() => { - popup.resolve(false); + if (popup) popup.resolve(false); setPopup(null); + setShowPropertySelection(false); + setSelectedPropertyId(""); }} > Cancel @@ -89,7 +99,8 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { class="px-4 py-2 rounded bg-blue-600 text-white" disabled={!selectedPropertyId} onClick={() => { - setPopup({ ...popup, propertyId: selectedPropertyId }); + setPopup({ ...popup!, propertyId: selectedPropertyId }); + setShowPropertySelection(false); }} > Continue @@ -103,5 +114,3 @@ export function PopAddLeaseDialog(leases: Lease[], properties: Property[]) { return [popAddLease, popupAddLeaseDialog || propertySelectionDialog] as const; } - - From fd8fffd1670018fb645c7a5b9bc98c46b508b91e Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:47:05 +0000 Subject: [PATCH 13/15] Apply patch [skip ci] --- islands/dialogs/AddLeaseDialog.tsx | 1 - routes/api/create/lease.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/islands/dialogs/AddLeaseDialog.tsx b/islands/dialogs/AddLeaseDialog.tsx index 63d6f69..914e5d0 100644 --- a/islands/dialogs/AddLeaseDialog.tsx +++ b/islands/dialogs/AddLeaseDialog.tsx @@ -120,4 +120,3 @@ export default function AddLeaseDialog(
); } - diff --git a/routes/api/create/lease.ts b/routes/api/create/lease.ts index dd4ccff..df221ec 100644 --- a/routes/api/create/lease.ts +++ b/routes/api/create/lease.ts @@ -53,4 +53,3 @@ export const handler = define.handlers({ } }, }); - From f3ad5dd6c4c8dba579db2c9608e56a80b24863a2 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 01:54:23 +0000 Subject: [PATCH 14/15] Apply patch [skip ci] --- TODO.md | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index 91b2ccb..088a1be 100644 --- a/TODO.md +++ b/TODO.md @@ -1,36 +1,58 @@ # Project TODO List -This document outlines the remaining tasks, incomplete features, and future development plans for the application. +This document outlines the remaining tasks, incomplete features, and future +development plans for the application. ## High Priority -- **Implement Lease Creation for Landlord Dashboard**: Add a "Create New Lease" button to the landlord dashboard that allows landlords to create leases with basic price information (rent, security deposit). Leases should have two states: 'new' (initial state) and 'signed' (after tenant accepts invite). The tenant field should be optional until a tenant accepts an invitation. + +- **Implement Lease Creation for Landlord Dashboard**: Add a "Create New Lease" + button to the landlord dashboard that allows landlords to create leases with + basic price information (rent, security deposit). Leases should have two + states: 'new' (initial state) and 'signed' (after tenant accepts invite). The + tenant field should be optional until a tenant accepts an invitation. ## Backend & API -- **Add Well-Known Endpoint**: Implement a `/.well-known/acme-challenge/:token` endpoint in `main.ts` to support services like Let's Encrypt for SSL certificate validation in production. -- **Enforce Database Constraints**: Ensure the `owner_id` field in the `AccessTokenResponse` interface is unique for each entry, as noted in `utils/database.ts`. This is crucial for maintaining data integrity. + +- **Add Well-Known Endpoint**: Implement a `/.well-known/acme-challenge/:token` + endpoint in `main.ts` to support services like Let's Encrypt for SSL + certificate validation in production. +- **Enforce Database Constraints**: Ensure the `owner_id` field in the + `AccessTokenResponse` interface is unique for each entry, as noted in + `utils/database.ts`. This is crucial for maintaining data integrity. ## Feature Development -- **Complete Landlord Dashboard**: Flesh out all features under the `routes/landlord/` directory. This includes: + +- **Complete Landlord Dashboard**: Flesh out all features under the + `routes/landlord/` directory. This includes: - Property management - Tenant invitation and management (`islands/LandlordInviteTenant.tsx`) - Messaging with tenants (`islands/LandlordMessageThreads.tsx`) - Financial tracking and reporting - Lease creation and management (current task) -- **Complete Tenant Dashboard**: Finalize all features under the `routes/tenant/` directory. This includes: +- **Complete Tenant Dashboard**: Finalize all features under the + `routes/tenant/` directory. This includes: - Viewing lease documents - Tracking rent payments and financial obligations - Messaging with landlords (`islands/TenantMessageThreads.tsx`) - Managing settings (`islands/TenantSettings.tsx`) -- **Enhance User Onboarding**: Improve the onboarding flow for both new landlords and tenants in `routes/onboarding/`. -- **Develop User Profile Management**: Complete the user profile editing and management features in `routes/user-profile/`. +- **Enhance User Onboarding**: Improve the onboarding flow for both new + landlords and tenants in `routes/onboarding/`. +- **Develop User Profile Management**: Complete the user profile editing and + management features in `routes/user-profile/`. ## Future Features & Refinements -- **AI/ML Feature Integration**: The advanced features found in the `islands/` directory need further development and integration into the user experience. This includes: + +- **AI/ML Feature Integration**: The advanced features found in the `islands/` + directory need further development and integration into the user experience. + This includes: - `BrainStudy.tsx` - `Quizzing.tsx` - `ImageGenerater.tsx` - `VoiceRecorder.tsx` -- **Calendar Functionality**: Expand the calendar features in `routes/calendar/` and improve the `islands/FinancialCalendar.tsx` component to be more interactive and informative. -- **Document Management**: Build out a robust document upload, storage, and sharing system for leases, notices, and other rental-related documents. -- **Reminders and Notifications**: Implement a system for sending automated reminders for rent payments, lease renewals, and other important events. - +- **Calendar Functionality**: Expand the calendar features in `routes/calendar/` + and improve the `islands/FinancialCalendar.tsx` component to be more + interactive and informative. +- **Document Management**: Build out a robust document upload, storage, and + sharing system for leases, notices, and other rental-related documents. +- **Reminders and Notifications**: Implement a system for sending automated + reminders for rent payments, lease renewals, and other important events. From 146dca155cf332c97dbc98b8de30a9df9215f2a2 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 22 Jan 2026 02:04:08 +0000 Subject: [PATCH 15/15] Apply patch [skip ci] --- main.ts | 2 -- routes/api/payments/create_intent.ts | 1 - routes/api/receipt/[id].ts | 5 +-- routes/api/retrieve/payment_transactions.ts | 17 ---------- routes/landlord/payments/index.tsx | 1 - routes/landlord/tenants/invite.tsx | 37 --------------------- routes/tenant/rent/confirmation/index.tsx | 5 +-- routes/tenant/rent/pay/index.tsx | 1 - services/paymentService.ts | 1 - utils/database.ts | 1 - 10 files changed, 4 insertions(+), 67 deletions(-) diff --git a/main.ts b/main.ts index ab8c7c3..1b9ea66 100755 --- a/main.ts +++ b/main.ts @@ -201,5 +201,3 @@ if (isAppReady) { // if (import.meta.main) { // await app.listen(); // } - - diff --git a/routes/api/payments/create_intent.ts b/routes/api/payments/create_intent.ts index a0a4315..8d99b89 100644 --- a/routes/api/payments/create_intent.ts +++ b/routes/api/payments/create_intent.ts @@ -90,4 +90,3 @@ export const handler = define.handlers({ } }, }); - diff --git a/routes/api/receipt/[id].ts b/routes/api/receipt/[id].ts index 18b025e..9316308 100644 --- a/routes/api/receipt/[id].ts +++ b/routes/api/receipt/[id].ts @@ -38,7 +38,9 @@ export const handler = define.handlers({
Lease ID
${leaseId}
Amount
$${amount.toLocaleString()}
Method
${method}
-
Date
${new Date(date).toLocaleString()}
+
Date
${ + new Date(date).toLocaleString() + }
`; @@ -49,4 +51,3 @@ export const handler = define.handlers({ }); }, }); - diff --git a/routes/api/retrieve/payment_transactions.ts b/routes/api/retrieve/payment_transactions.ts index bd6ff5d..a04e1b7 100644 --- a/routes/api/retrieve/payment_transactions.ts +++ b/routes/api/retrieve/payment_transactions.ts @@ -43,20 +43,3 @@ export const handler = define.handlers({ } }, }); - - - - - - - - - - - - - - - - - diff --git a/routes/landlord/payments/index.tsx b/routes/landlord/payments/index.tsx index 6f0dd53..b973a2f 100644 --- a/routes/landlord/payments/index.tsx +++ b/routes/landlord/payments/index.tsx @@ -282,4 +282,3 @@ export default define.page(function LandlordPayments({ data }) {
); }); - diff --git a/routes/landlord/tenants/invite.tsx b/routes/landlord/tenants/invite.tsx index 0df6389..b43eebc 100644 --- a/routes/landlord/tenants/invite.tsx +++ b/routes/landlord/tenants/invite.tsx @@ -150,40 +150,3 @@ export default define.page(function InviteTenantPage({ data }) { ); }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/routes/tenant/rent/confirmation/index.tsx b/routes/tenant/rent/confirmation/index.tsx index ef0090f..316cb00 100644 --- a/routes/tenant/rent/confirmation/index.tsx +++ b/routes/tenant/rent/confirmation/index.tsx @@ -21,9 +21,7 @@ export default define.page(function RentConfirmation({ data }) {

Payment Successful

- {amount && ( -

Amount: ${amount}

- )} + {amount &&

Amount: ${amount}

}

A receipt is available from your payment history.

@@ -55,4 +53,3 @@ export default define.page(function RentConfirmation({ data }) { ); }); - diff --git a/routes/tenant/rent/pay/index.tsx b/routes/tenant/rent/pay/index.tsx index 93ba0b7..01a9afc 100644 --- a/routes/tenant/rent/pay/index.tsx +++ b/routes/tenant/rent/pay/index.tsx @@ -347,4 +347,3 @@ export default define.page( ); }, ); - diff --git a/services/paymentService.ts b/services/paymentService.ts index 5d19831..bd5df7e 100644 --- a/services/paymentService.ts +++ b/services/paymentService.ts @@ -387,4 +387,3 @@ export async function cancelAutoPayment( .where(eq(leases.id, lease_id)) .returning(); } - diff --git a/utils/database.ts b/utils/database.ts index b957f61..0764722 100644 --- a/utils/database.ts +++ b/utils/database.ts @@ -592,4 +592,3 @@ export async function upsertAccessToken(tokenResponse: AccessTokenResponse) { tokenResponse, ); } -