deep research addressement

This commit is contained in:
2026-06-01 08:40:10 -04:00
parent c159f07322
commit ba73daa66c
205 changed files with 157390 additions and 951 deletions

View File

@@ -0,0 +1,24 @@
import { sqliteTable, text, real, integer, index } from "drizzle-orm/sqlite-core";
import { subscriptions } from "./subscription";
/**
* Tracks Attom Data Solutions API usage for cost analytics and billing.
* Each row records one API call (or batch of calls for multi-property scans).
* Cost is tracked in dollars at ~$0.05$0.10 per record lookup.
*/
export const attomApiUsage = sqliteTable("attom_api_usage", {
id: text("id").primaryKey().$defaultFn(() => crypto.randomUUID()),
subscriptionId: text("subscription_id").notNull().references(() => subscriptions.id, { onDelete: "cascade" }),
userId: text("user_id").notNull(),
endpoint: text("endpoint").notNull(),
cost: real("cost").notNull(), // USD cost of this API call
propertyWatchlistItemId: text("property_watchlist_item_id"),
statusCode: integer("status_code"),
errorMessage: text("error_message"),
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
}, (table) => ({
subscriptionIdIdx: index("attom_api_usage_subscription_id_idx").on(table.subscriptionId),
userIdIdx: index("attom_api_usage_user_id_idx").on(table.userId),
createdAtIdx: index("attom_api_usage_created_at_idx").on(table.createdAt),
subscriptionCreatedAtIdx: index("attom_api_usage_sub_created_idx").on(table.subscriptionId, table.createdAt),
}));