refactor(infra): colocate stripe lake table

This commit is contained in:
opencode-agent[bot] 2026-06-02 20:00:03 +00:00
parent e6691facd7
commit f07724c224
2 changed files with 86 additions and 82 deletions

View file

@ -103,6 +103,92 @@ export const stripeWebhook = new stripe.WebhookEndpoint("StripeWebhookEndpoint",
],
})
export const stripeEvent = lake
? (() => {
const billingNamespace = new aws.s3tables.Namespace("LakeBillingNamespace", {
namespace: "billing",
tableBucketArn: lake.tableBucket.arn,
})
const stripeTable = new aws.s3tables.Table(
"LakeBillingStripeTable",
{
name: "stripe",
namespace: billingNamespace.namespace,
tableBucketArn: billingNamespace.tableBucketArn,
format: "ICEBERG",
metadata: {
iceberg: {
schema: {
fields: [
{ name: "event_timestamp", type: "string", required: false },
{ name: "event_date", type: "string", required: false },
{ name: "event_id", type: "string", required: false },
{ name: "event_type", type: "string", required: false },
{ name: "api_version", type: "string", required: false },
{ name: "livemode", type: "boolean", required: false },
{ name: "pending_webhooks", type: "int", required: false },
{ name: "request_id", type: "string", required: false },
{ name: "idempotency_key", type: "string", required: false },
{ name: "object_id", type: "string", required: false },
{ name: "object_type", type: "string", required: false },
{ name: "object_created_timestamp", type: "string", required: false },
{ name: "customer_id", type: "string", required: false },
{ name: "customer_email", type: "string", required: false },
{ name: "customer_name", type: "string", required: false },
{ name: "customer_phone", type: "string", required: false },
{ name: "workspace_id", type: "string", required: false },
{ name: "user_id", type: "string", required: false },
{ name: "user_email", type: "string", required: false },
{ name: "subscription_id", type: "string", required: false },
{ name: "invoice_id", type: "string", required: false },
{ name: "charge_id", type: "string", required: false },
{ name: "payment_intent_id", type: "string", required: false },
{ name: "payment_method_id", type: "string", required: false },
{ name: "checkout_session_id", type: "string", required: false },
{ name: "refund_id", type: "string", required: false },
{ name: "product_id", type: "string", required: false },
{ name: "price_id", type: "string", required: false },
{ name: "quantity", type: "long", required: false },
{ name: "status", type: "string", required: false },
{ name: "billing_reason", type: "string", required: false },
{ name: "collection_method", type: "string", required: false },
{ name: "cancel_at_period_end", type: "boolean", required: false },
{ name: "canceled_at_timestamp", type: "string", required: false },
{ name: "cancel_at_timestamp", type: "string", required: false },
{ name: "cancellation_reason", type: "string", required: false },
{ name: "currency", type: "string", required: false },
{ name: "amount", type: "long", required: false },
{ name: "amount_paid", type: "long", required: false },
{ name: "amount_due", type: "long", required: false },
{ name: "amount_refunded", type: "long", required: false },
{ name: "refunded", type: "boolean", required: false },
{ name: "refund_reason", type: "string", required: false },
{ name: "current_period_start_timestamp", type: "string", required: false },
{ name: "current_period_end_timestamp", type: "string", required: false },
{ name: "metadata", type: "string", required: false },
{ name: "previous_attributes", type: "string", required: false },
],
},
},
},
},
{ deleteBeforeReplace: $app.stage !== "production" },
)
return new sst.Linkable("StripeEvent", {
properties: {
region: lake.lakeRegion,
catalog: lake.lakeCatalog,
database: billingNamespace.namespace,
table: stripeTable.name,
tableBucket: lake.tableBucket.name,
workgroup: lake.lakeAthenaWorkgroup.name,
},
})
})()
: undefined
const zenLiteProduct = new stripe.Product("ZenLite", {
name: "OpenCode Go",
})

View file

@ -87,77 +87,6 @@ const inferenceEventTable = new aws.s3tables.Table(
{ deleteBeforeReplace: $app.stage !== "production" },
)
const billingNamespace = new aws.s3tables.Namespace("LakeBillingNamespace", {
namespace: "billing",
tableBucketArn: tableBucket.arn,
})
const stripeTable = new aws.s3tables.Table(
"LakeBillingStripeTable",
{
name: "stripe",
namespace: billingNamespace.namespace,
tableBucketArn: billingNamespace.tableBucketArn,
format: "ICEBERG",
metadata: {
iceberg: {
schema: {
fields: [
{ name: "event_timestamp", type: "string", required: false },
{ name: "event_date", type: "string", required: false },
{ name: "event_id", type: "string", required: false },
{ name: "event_type", type: "string", required: false },
{ name: "api_version", type: "string", required: false },
{ name: "livemode", type: "boolean", required: false },
{ name: "pending_webhooks", type: "int", required: false },
{ name: "request_id", type: "string", required: false },
{ name: "idempotency_key", type: "string", required: false },
{ name: "object_id", type: "string", required: false },
{ name: "object_type", type: "string", required: false },
{ name: "object_created_timestamp", type: "string", required: false },
{ name: "customer_id", type: "string", required: false },
{ name: "customer_email", type: "string", required: false },
{ name: "customer_name", type: "string", required: false },
{ name: "customer_phone", type: "string", required: false },
{ name: "workspace_id", type: "string", required: false },
{ name: "user_id", type: "string", required: false },
{ name: "user_email", type: "string", required: false },
{ name: "subscription_id", type: "string", required: false },
{ name: "invoice_id", type: "string", required: false },
{ name: "charge_id", type: "string", required: false },
{ name: "payment_intent_id", type: "string", required: false },
{ name: "payment_method_id", type: "string", required: false },
{ name: "checkout_session_id", type: "string", required: false },
{ name: "refund_id", type: "string", required: false },
{ name: "product_id", type: "string", required: false },
{ name: "price_id", type: "string", required: false },
{ name: "quantity", type: "long", required: false },
{ name: "status", type: "string", required: false },
{ name: "billing_reason", type: "string", required: false },
{ name: "collection_method", type: "string", required: false },
{ name: "cancel_at_period_end", type: "boolean", required: false },
{ name: "canceled_at_timestamp", type: "string", required: false },
{ name: "cancel_at_timestamp", type: "string", required: false },
{ name: "cancellation_reason", type: "string", required: false },
{ name: "currency", type: "string", required: false },
{ name: "amount", type: "long", required: false },
{ name: "amount_paid", type: "long", required: false },
{ name: "amount_due", type: "long", required: false },
{ name: "amount_refunded", type: "long", required: false },
{ name: "refunded", type: "boolean", required: false },
{ name: "refund_reason", type: "string", required: false },
{ name: "current_period_start_timestamp", type: "string", required: false },
{ name: "current_period_end_timestamp", type: "string", required: false },
{ name: "metadata", type: "string", required: false },
{ name: "previous_attributes", type: "string", required: false },
],
},
},
},
},
{ deleteBeforeReplace: $app.stage !== "production" },
)
export const inferenceEvent = new sst.Linkable("InferenceEvent", {
properties: {
region: lakeRegion,
@ -169,17 +98,6 @@ export const inferenceEvent = new sst.Linkable("InferenceEvent", {
},
})
export const stripeEvent = new sst.Linkable("StripeEvent", {
properties: {
region: lakeRegion,
catalog: lakeCatalog,
database: billingNamespace.namespace,
table: stripeTable.name,
tableBucket: tableBucket.name,
workgroup: lakeAthenaWorkgroup.name,
},
})
////////////////
// DATABASE
////////////////