wip: black
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Billing } from "@opencode-ai/console-core/billing.js"
|
||||
import { query, action, useParams, createAsync, useAction } from "@solidjs/router"
|
||||
import { For, Show } from "solid-js"
|
||||
import { For, Match, Show, Switch } from "solid-js"
|
||||
import { withActor } from "~/context/auth.withActor"
|
||||
import { formatDateUTC, formatDateForTable } from "../../common"
|
||||
import styles from "./payment-section.module.css"
|
||||
@@ -77,7 +77,8 @@ export function PaymentSection() {
|
||||
<For each={payments()!}>
|
||||
{(payment) => {
|
||||
const date = new Date(payment.timeCreated)
|
||||
const isCredit = !payment.paymentID
|
||||
const amount =
|
||||
payment.enrichment?.type === "subscription" && payment.enrichment.couponID ? 0 : payment.amount
|
||||
return (
|
||||
<tr>
|
||||
<td data-slot="payment-date" title={formatDateUTC(date)}>
|
||||
@@ -85,13 +86,14 @@ export function PaymentSection() {
|
||||
</td>
|
||||
<td data-slot="payment-id">{payment.id}</td>
|
||||
<td data-slot="payment-amount" data-refunded={!!payment.timeRefunded}>
|
||||
${((payment.amount ?? 0) / 100000000).toFixed(2)}
|
||||
{isCredit ? " (credit)" : ""}
|
||||
${((amount ?? 0) / 100000000).toFixed(2)}
|
||||
<Switch>
|
||||
<Match when={payment.enrichment?.type === "credit"}> (credit)</Match>
|
||||
<Match when={payment.enrichment?.type === "subscription"}> (subscription)</Match>
|
||||
</Switch>
|
||||
</td>
|
||||
<td data-slot="payment-receipt">
|
||||
{isCredit ? (
|
||||
<span>-</span>
|
||||
) : (
|
||||
{payment.paymentID ? (
|
||||
<button
|
||||
onClick={async () => {
|
||||
const receiptUrl = await downloadReceiptAction(params.id!, payment.paymentID!)
|
||||
@@ -103,6 +105,8 @@ export function PaymentSection() {
|
||||
>
|
||||
View
|
||||
</button>
|
||||
) : (
|
||||
<span>-</span>
|
||||
)}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
1
packages/console/core/migrations/0049_noisy_domino.sql
Normal file
1
packages/console/core/migrations/0049_noisy_domino.sql
Normal file
@@ -0,0 +1 @@
|
||||
ALTER TABLE `billing` ADD `subscription_coupon_id` varchar(28);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `payment` ADD `enrichment` json;
|
||||
1288
packages/console/core/migrations/meta/0049_snapshot.json
Normal file
1288
packages/console/core/migrations/meta/0049_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
1295
packages/console/core/migrations/meta/0050_snapshot.json
Normal file
1295
packages/console/core/migrations/meta/0050_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -344,6 +344,20 @@
|
||||
"when": 1767917785224,
|
||||
"tag": "0048_mean_frank_castle",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 49,
|
||||
"version": "5",
|
||||
"when": 1767922954153,
|
||||
"tag": "0049_noisy_domino",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 50,
|
||||
"version": "5",
|
||||
"when": 1767931290031,
|
||||
"tag": "0050_bumpy_mephistopheles",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,9 @@ if (amountInCents !== 20000) {
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const subscriptionData = await Billing.stripe().subscriptions.retrieve(subscription.id, { expand: ["discounts"] })
|
||||
const couponID = subscriptionData.discounts[0]?.coupon?.id
|
||||
|
||||
// Check if subscription is already tied to another workspace
|
||||
const existingSubscription = await Database.use((tx) =>
|
||||
tx
|
||||
@@ -122,6 +125,7 @@ await Database.transaction(async (tx) => {
|
||||
.set({
|
||||
customerID,
|
||||
subscriptionID,
|
||||
subscriptionCouponID: couponID,
|
||||
paymentMethodID,
|
||||
paymentMethodLast4,
|
||||
paymentMethodType,
|
||||
@@ -143,6 +147,10 @@ await Database.transaction(async (tx) => {
|
||||
customerID,
|
||||
invoiceID,
|
||||
paymentID,
|
||||
enrichment: {
|
||||
type: "subscription",
|
||||
couponID,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -171,6 +171,9 @@ export namespace Billing {
|
||||
workspaceID,
|
||||
id: Identifier.create("payment"),
|
||||
amount: amountInMicroCents,
|
||||
enrichment: {
|
||||
type: "credit",
|
||||
},
|
||||
})
|
||||
})
|
||||
return amountInMicroCents
|
||||
|
||||
@@ -22,6 +22,7 @@ export const BillingTable = mysqlTable(
|
||||
timeReloadError: utc("time_reload_error"),
|
||||
timeReloadLockedTill: utc("time_reload_locked_till"),
|
||||
subscriptionID: varchar("subscription_id", { length: 28 }),
|
||||
subscriptionCouponID: varchar("subscription_coupon_id", { length: 28 }),
|
||||
},
|
||||
(table) => [
|
||||
...workspaceIndexes(table),
|
||||
@@ -54,6 +55,15 @@ export const PaymentTable = mysqlTable(
|
||||
paymentID: varchar("payment_id", { length: 255 }),
|
||||
amount: bigint("amount", { mode: "number" }).notNull(),
|
||||
timeRefunded: utc("time_refunded"),
|
||||
enrichment: json("enrichment").$type<
|
||||
| {
|
||||
type: "subscription"
|
||||
couponID?: string
|
||||
}
|
||||
| {
|
||||
type: "credit"
|
||||
}
|
||||
>(),
|
||||
},
|
||||
(table) => [...workspaceIndexes(table)],
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user