50 lines
986 B
TypeScript
50 lines
986 B
TypeScript
import { db } from "@/lib/db"
|
|||
|
|
import { activity_log } from "@/lib/db/schema"
|
||
|
|
|
||
|
|
export type ActivityType =
|
||
|
|
| "rent_paid"
|
||
|
|
| "rent_overdue"
|
||
|
|
| "tenant_added"
|
||
|
|
| "tenant_removed"
|
||
|
|
| "maintenance_opened"
|
||
|
|
| "maintenance_resolved"
|
||
|
|
| "lease_created"
|
||
|
|
| "lease_expiring"
|
||
|
|
| "expense_added"
|
||
|
|
| "property_added"
|
||
|
|
| "inspection_completed"
|
||
|
|
| "vendor_added"
|
||
|
|
| "ai_action"
|
||
|
|
|
||
|
|
export async function logActivity({
|
||
|
|
userId,
|
||
|
|
type,
|
||
|
|
title,
|
||
|
|
description,
|
||
|
|
entityType,
|
||
|
|
entityId,
|
||
|
|
metadata,
|
||
|
|
}: {
|
||
|
|
userId: string
|
||
|
|
type: ActivityType
|
||
|
|
title: string
|
||
|
|
description?: string
|
||
|
|
entityType?: string
|
||
|
|
entityId?: string
|
||
|
|
metadata?: Record<string, unknown>
|
||
|
|
}) {
|
||
|
|
try {
|
||
|
|
await db.insert(activity_log).values({
|
||
|
|
user_id: userId,
|
||
|
|
type,
|
||
|
|
title,
|
||
|
|
description: description ?? null,
|
||
|
|
entity_type: entityType ?? null,
|
||
|
|
entity_id: entityId ?? null,
|
||
|
|
metadata: metadata ?? {},
|
||
|
|
})
|
||
|
|
} catch {
|
||
|
|
// Activity logging should never break the main flow
|
||
|
|
}
|
||
|
|
}
|