chore: generate

This commit is contained in:
opencode-agent[bot] 2026-05-19 15:52:51 +00:00
parent b32f071502
commit e4eb98b991
24 changed files with 215 additions and 568 deletions

View file

@ -35,10 +35,9 @@ export const queryGoReferralUsagePreview = query(async (workspaceID: string, ref
export const applyGoReferralReward = action(async (workspaceID: string, referralID: string) => {
"use server"
return json(
await withActor(() => Referral.applyReward({ referralID }), workspaceID),
{ revalidate: [queryGoReferral.key, queryGoReferralUsagePreview.key, queryLiteSubscription.key] },
)
return json(await withActor(() => Referral.applyReward({ referralID }), workspaceID), {
revalidate: [queryGoReferral.key, queryGoReferralUsagePreview.key, queryLiteSubscription.key],
})
}, "go.referral.reward.apply")
function currentUsagePreview(usage: { resetInSec: number; usagePercent: number }) {
@ -245,7 +244,11 @@ export function GoReferralSection(props: { workspaceID: string; summary: GoRefer
</table>
</div>
</Show>
<Modal open={!!selected()} onClose={() => setSelected(undefined)} title={i18n.t("workspace.referral.apply.confirmTitle")}>
<Modal
open={!!selected()}
onClose={() => setSelected(undefined)}
title={i18n.t("workspace.referral.apply.confirmTitle")}
>
<div data-component="go-credit-confirm">
<p>
{i18n.t("workspace.referral.apply.confirmBody", {
@ -306,7 +309,8 @@ function GoReferralUsagePreviewRow(props: { label: string; usage: GoReferralUsag
<div data-slot="usage-preview-after" style={{ width: `${props.usage.afterPercent}%` }} />
</div>
<span data-slot="usage-preview-reset">
{i18n.t("workspace.lite.subscription.resetsIn")} {formatResetTime(props.usage.resetInSec, i18n, liteResetTimeKeys)}
{i18n.t("workspace.lite.subscription.resetsIn")}{" "}
{formatResetTime(props.usage.resetInSec, i18n, liteResetTimeKeys)}
</span>
</div>
)

View file

@ -697,7 +697,8 @@ export const dict = {
"workspace.referral.apply.preview": "Visualizar",
"workspace.referral.apply.action": "Aplicar",
"workspace.referral.apply.confirmTitle": "Aplicar recompensa Go",
"workspace.referral.apply.confirmBody": "Aplique {{amount}} para reduzir os contadores atuais de uso do Go deste workspace.",
"workspace.referral.apply.confirmBody":
"Aplique {{amount}} para reduzir os contadores atuais de uso do Go deste workspace.",
"workspace.referral.apply.confirmAction": "Aplicar",
"download.title": "OpenCode | Baixar",

View file

@ -693,7 +693,8 @@ export const dict = {
"workspace.referral.apply.preview": "Forhåndsvis",
"workspace.referral.apply.action": "Brug",
"workspace.referral.apply.confirmTitle": "Brug Go-belønning",
"workspace.referral.apply.confirmBody": "Brug {{amount}} til at reducere dette workspaces nuværende Go-forbrugstællere.",
"workspace.referral.apply.confirmBody":
"Brug {{amount}} til at reducere dette workspaces nuværende Go-forbrugstællere.",
"workspace.referral.apply.confirmAction": "Brug",
"download.title": "OpenCode | Download",

View file

@ -696,7 +696,8 @@ export const dict = {
"workspace.referral.apply.preview": "Vorschau",
"workspace.referral.apply.action": "Einlösen",
"workspace.referral.apply.confirmTitle": "Go-Belohnung einlösen",
"workspace.referral.apply.confirmBody": "Löse {{amount}} ein, um die aktuellen Go-Nutzungszähler dieses Workspace zu reduzieren.",
"workspace.referral.apply.confirmBody":
"Löse {{amount}} ein, um die aktuellen Go-Nutzungszähler dieses Workspace zu reduzieren.",
"workspace.referral.apply.confirmAction": "Einlösen",
"download.title": "OpenCode | Download",

View file

@ -697,7 +697,8 @@ export const dict = {
"workspace.referral.apply.preview": "Vista previa",
"workspace.referral.apply.action": "Aplicar",
"workspace.referral.apply.confirmTitle": "Aplicar recompensa de Go",
"workspace.referral.apply.confirmBody": "Aplica {{amount}} para reducir los contadores actuales de uso de Go de este workspace.",
"workspace.referral.apply.confirmBody":
"Aplica {{amount}} para reducir los contadores actuales de uso de Go de este workspace.",
"workspace.referral.apply.confirmAction": "Aplicar",
"download.title": "OpenCode | Descargar",

View file

@ -703,7 +703,8 @@ export const dict = {
"workspace.referral.apply.preview": "Aperçu",
"workspace.referral.apply.action": "Utiliser",
"workspace.referral.apply.confirmTitle": "Utiliser la récompense Go",
"workspace.referral.apply.confirmBody": "Utilisez {{amount}} pour réduire les compteurs d'utilisation Go actuels de ce workspace.",
"workspace.referral.apply.confirmBody":
"Utilisez {{amount}} pour réduire les compteurs d'utilisation Go actuels de ce workspace.",
"workspace.referral.apply.confirmAction": "Utiliser",
"download.title": "OpenCode | Téléchargement",

View file

@ -695,7 +695,8 @@ export const dict = {
"workspace.referral.apply.preview": "Anteprima",
"workspace.referral.apply.action": "Utilizza",
"workspace.referral.apply.confirmTitle": "Utilizza premio Go",
"workspace.referral.apply.confirmBody": "Utilizza {{amount}} per ridurre i contatori di utilizzo Go attuali di questo workspace.",
"workspace.referral.apply.confirmBody":
"Utilizza {{amount}} per ridurre i contatori di utilizzo Go attuali di questo workspace.",
"workspace.referral.apply.confirmAction": "Utilizza",
"download.title": "OpenCode | Download",

View file

@ -671,7 +671,8 @@ export const dict = {
"workspace.referral.copyLink": "リンクをコピー",
"workspace.referral.copied": "コピーしました",
"workspace.referral.overview.title": "友達を Go に招待",
"workspace.referral.overview.subtitle": "友達がサブスクライブすると $5 分の Go クレジットを獲得。友達にも $5 が付与されます。",
"workspace.referral.overview.subtitle":
"友達がサブスクライブすると $5 分の Go クレジットを獲得。友達にも $5 が付与されます。",
"workspace.referral.stats.invites": "招待",
"workspace.referral.stats.earned": "獲得",
"workspace.referral.stats.applied": "適用済み",
@ -695,7 +696,8 @@ export const dict = {
"workspace.referral.apply.preview": "プレビュー",
"workspace.referral.apply.action": "適用",
"workspace.referral.apply.confirmTitle": "Go 特典を適用",
"workspace.referral.apply.confirmBody": "{{amount}} を適用して、このワークスペースの現在の Go 使用カウンターを減らします。",
"workspace.referral.apply.confirmBody":
"{{amount}} を適用して、このワークスペースの現在の Go 使用カウンターを減らします。",
"workspace.referral.apply.confirmAction": "適用",
"download.title": "OpenCode | ダウンロード",

View file

@ -694,7 +694,8 @@ export const dict = {
"workspace.referral.apply.preview": "Forhåndsvis",
"workspace.referral.apply.action": "Bruk",
"workspace.referral.apply.confirmTitle": "Bruk Go-belønning",
"workspace.referral.apply.confirmBody": "Bruk {{amount}} for å redusere dette workspacets nåværende Go-forbrukstellere.",
"workspace.referral.apply.confirmBody":
"Bruk {{amount}} for å redusere dette workspacets nåværende Go-forbrukstellere.",
"workspace.referral.apply.confirmAction": "Bruk",
"download.title": "OpenCode | Last ned",

View file

@ -695,7 +695,8 @@ export const dict = {
"workspace.referral.apply.preview": "Podgląd",
"workspace.referral.apply.action": "Wykorzystaj",
"workspace.referral.apply.confirmTitle": "Wykorzystaj nagrodę Go",
"workspace.referral.apply.confirmBody": "Wykorzystaj {{amount}}, aby zmniejszyć aktualne liczniki użycia Go w tym workspace.",
"workspace.referral.apply.confirmBody":
"Wykorzystaj {{amount}}, aby zmniejszyć aktualne liczniki użycia Go w tym workspace.",
"workspace.referral.apply.confirmAction": "Wykorzystaj",
"download.title": "OpenCode | Pobierz",

View file

@ -701,7 +701,8 @@ export const dict = {
"workspace.referral.apply.preview": "Предпросмотр",
"workspace.referral.apply.action": "Применить",
"workspace.referral.apply.confirmTitle": "Применить награду Go",
"workspace.referral.apply.confirmBody": "Используйте {{amount}}, чтобы уменьшить текущие счётчики использования Go этого workspace.",
"workspace.referral.apply.confirmBody":
"Используйте {{amount}}, чтобы уменьшить текущие счётчики использования Go этого workspace.",
"workspace.referral.apply.confirmAction": "Применить",
"download.title": "OpenCode | Скачать",

View file

@ -697,7 +697,8 @@ export const dict = {
"workspace.referral.apply.preview": "Önizleme",
"workspace.referral.apply.action": "Kullan",
"workspace.referral.apply.confirmTitle": "Go ödülünü kullan",
"workspace.referral.apply.confirmBody": "Bu workspace'in mevcut Go kullanım sayaçlarını azaltmak için {{amount}} kullan.",
"workspace.referral.apply.confirmBody":
"Bu workspace'in mevcut Go kullanım sayaçlarını azaltmak için {{amount}} kullan.",
"workspace.referral.apply.confirmAction": "Kullan",
"download.title": "OpenCode | İndir",

View file

@ -700,7 +700,6 @@
text-decoration: underline;
}
}
}
}

View file

@ -211,7 +211,6 @@
align-items: center;
gap: 4px;
}
}
.paymentMethodModal {

View file

@ -140,7 +140,8 @@ function LiteUsageItem(props: { label: string; usage: { usagePercent: number; re
<div data-slot="progress-bar" style={{ width: `${props.usage.usagePercent}%` }} />
</div>
<span data-slot="reset-time">
{i18n.t("workspace.lite.subscription.resetsIn")} {formatResetTime(props.usage.resetInSec, i18n, liteResetTimeKeys)}
{i18n.t("workspace.lite.subscription.resetsIn")}{" "}
{formatResetTime(props.usage.resetInSec, i18n, liteResetTimeKeys)}
</span>
</div>
)

View file

@ -2,9 +2,7 @@
"version": "6",
"dialect": "mysql",
"id": "91a9afa8-a5b1-4fa4-b71d-b3ae866744c9",
"prevIds": [
"c742e0f2-5d89-4216-b843-059d00680f13"
],
"prevIds": ["c742e0f2-5d89-4216-b843-059d00680f13"],
"ddl": [
{
"name": "account",
@ -2671,194 +2669,133 @@
"table": "workspace"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "account",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "auth",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "benchmark",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "billing",
"entityType": "pks"
},
{
"columns": [
"email",
"type"
],
"columns": ["email", "type"],
"name": "PRIMARY",
"table": "coupon",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "lite",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "payment",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "subscription",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "usage",
"entityType": "pks"
},
{
"columns": [
"ip",
"interval"
],
"columns": ["ip", "interval"],
"name": "PRIMARY",
"table": "ip_rate_limit",
"entityType": "pks"
},
{
"columns": [
"ip"
],
"columns": ["ip"],
"name": "PRIMARY",
"table": "ip",
"entityType": "pks"
},
{
"columns": [
"key",
"interval"
],
"columns": ["key", "interval"],
"name": "PRIMARY",
"table": "key_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tpm_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tps_rate_limit",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "key",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "model",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "provider",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "referral_code",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "referral_reward",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "referral",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "user",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "workspace",
"entityType": "pks"

View file

@ -2,10 +2,7 @@
"version": "6",
"dialect": "mysql",
"id": "e93db4f6-6e8b-43f4-b883-59d2fd6ede53",
"prevIds": [
"1f04bd59-35b0-493b-9d55-cfa08207ba8e",
"91a9afa8-a5b1-4fa4-b71d-b3ae866744c9"
],
"prevIds": ["1f04bd59-35b0-493b-9d55-cfa08207ba8e", "91a9afa8-a5b1-4fa4-b71d-b3ae866744c9"],
"ddl": [
{
"name": "account",
@ -2574,191 +2571,133 @@
"table": "workspace"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "account",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "auth",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "benchmark",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "billing",
"entityType": "pks"
},
{
"columns": [
"email",
"type"
],
"columns": ["email", "type"],
"name": "PRIMARY",
"table": "coupon",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "lite",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "payment",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "subscription",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "usage",
"entityType": "pks"
},
{
"columns": [
"ip",
"interval"
],
"columns": ["ip", "interval"],
"name": "PRIMARY",
"table": "ip_rate_limit",
"entityType": "pks"
},
{
"columns": [
"ip"
],
"columns": ["ip"],
"name": "PRIMARY",
"table": "ip",
"entityType": "pks"
},
{
"columns": [
"key",
"interval"
],
"columns": ["key", "interval"],
"name": "PRIMARY",
"table": "key_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "model_sticky_provider",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tpm_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tps_rate_limit",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "key",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "model",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "provider",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "user",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "referral_reward",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "referral",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "workspace",
"entityType": "pks"
@ -3121,4 +3060,4 @@
}
],
"renames": []
}
}

View file

@ -2,9 +2,7 @@
"version": "6",
"dialect": "mysql",
"id": "77de1eaf-69f6-433f-b244-cda75319450a",
"prevIds": [
"e93db4f6-6e8b-43f4-b883-59d2fd6ede53"
],
"prevIds": ["e93db4f6-6e8b-43f4-b883-59d2fd6ede53"],
"ddl": [
{
"name": "account",
@ -2559,192 +2557,133 @@
"table": "workspace"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "account",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "auth",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "benchmark",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "billing",
"entityType": "pks"
},
{
"columns": [
"email",
"type"
],
"columns": ["email", "type"],
"name": "PRIMARY",
"table": "coupon",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "lite",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "payment",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "subscription",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "usage",
"entityType": "pks"
},
{
"columns": [
"ip",
"interval"
],
"columns": ["ip", "interval"],
"name": "PRIMARY",
"table": "ip_rate_limit",
"entityType": "pks"
},
{
"columns": [
"ip"
],
"columns": ["ip"],
"name": "PRIMARY",
"table": "ip",
"entityType": "pks"
},
{
"columns": [
"key",
"interval"
],
"columns": ["key", "interval"],
"name": "PRIMARY",
"table": "key_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "model_sticky_provider",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tpm_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tps_rate_limit",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "key",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "model",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "provider",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"referral_id"
],
"columns": ["workspace_id", "referral_id"],
"name": "PRIMARY",
"table": "referral_reward",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "user",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "referral",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "workspace",
"entityType": "pks"
@ -3087,4 +3026,4 @@
}
],
"renames": []
}
}

View file

@ -2,9 +2,7 @@
"version": "6",
"dialect": "mysql",
"id": "9809797a-e6f6-418c-8532-196553b315b8",
"prevIds": [
"77de1eaf-69f6-433f-b244-cda75319450a"
],
"prevIds": ["77de1eaf-69f6-433f-b244-cda75319450a"],
"ddl": [
{
"name": "account",
@ -2559,193 +2557,133 @@
"table": "workspace"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "account",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "auth",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "benchmark",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "billing",
"entityType": "pks"
},
{
"columns": [
"email",
"type"
],
"columns": ["email", "type"],
"name": "PRIMARY",
"table": "coupon",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "lite",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "payment",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "subscription",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "usage",
"entityType": "pks"
},
{
"columns": [
"ip",
"interval"
],
"columns": ["ip", "interval"],
"name": "PRIMARY",
"table": "ip_rate_limit",
"entityType": "pks"
},
{
"columns": [
"ip"
],
"columns": ["ip"],
"name": "PRIMARY",
"table": "ip",
"entityType": "pks"
},
{
"columns": [
"key",
"interval"
],
"columns": ["key", "interval"],
"name": "PRIMARY",
"table": "key_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "model_sticky_provider",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tpm_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tps_rate_limit",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "key",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "model",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "provider",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"referral_id"
],
"columns": ["workspace_id", "referral_id"],
"name": "PRIMARY",
"table": "referral_reward",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "referral",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "user",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "workspace",
"entityType": "pks"
@ -3072,4 +3010,4 @@
}
],
"renames": []
}
}

View file

@ -2,9 +2,7 @@
"version": "6",
"dialect": "mysql",
"id": "e49321c9-2b03-4e2c-b2f0-76fbb88088ea",
"prevIds": [
"9809797a-e6f6-418c-8532-196553b315b8"
],
"prevIds": ["9809797a-e6f6-418c-8532-196553b315b8"],
"ddl": [
{
"name": "account",
@ -2559,193 +2557,133 @@
"table": "workspace"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "account",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "auth",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "benchmark",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "billing",
"entityType": "pks"
},
{
"columns": [
"email",
"type"
],
"columns": ["email", "type"],
"name": "PRIMARY",
"table": "coupon",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "lite",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "payment",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "subscription",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "usage",
"entityType": "pks"
},
{
"columns": [
"ip",
"interval"
],
"columns": ["ip", "interval"],
"name": "PRIMARY",
"table": "ip_rate_limit",
"entityType": "pks"
},
{
"columns": [
"ip"
],
"columns": ["ip"],
"name": "PRIMARY",
"table": "ip",
"entityType": "pks"
},
{
"columns": [
"key",
"interval"
],
"columns": ["key", "interval"],
"name": "PRIMARY",
"table": "key_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "model_sticky_provider",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tpm_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tps_rate_limit",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "key",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "model",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "provider",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"referral_id"
],
"columns": ["workspace_id", "referral_id"],
"name": "PRIMARY",
"table": "referral_reward",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "referral",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "user",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "workspace",
"entityType": "pks"
@ -3072,4 +3010,4 @@
}
],
"renames": []
}
}

View file

@ -2,9 +2,7 @@
"version": "6",
"dialect": "mysql",
"id": "9a7123cb-5c2c-47f6-b22f-8fd6a02dcb03",
"prevIds": [
"e49321c9-2b03-4e2c-b2f0-76fbb88088ea"
],
"prevIds": ["e49321c9-2b03-4e2c-b2f0-76fbb88088ea"],
"ddl": [
{
"name": "account",
@ -2559,193 +2557,133 @@
"table": "workspace"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "account",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "auth",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "benchmark",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "billing",
"entityType": "pks"
},
{
"columns": [
"email",
"type"
],
"columns": ["email", "type"],
"name": "PRIMARY",
"table": "coupon",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "lite",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "payment",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "subscription",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "usage",
"entityType": "pks"
},
{
"columns": [
"ip",
"interval"
],
"columns": ["ip", "interval"],
"name": "PRIMARY",
"table": "ip_rate_limit",
"entityType": "pks"
},
{
"columns": [
"ip"
],
"columns": ["ip"],
"name": "PRIMARY",
"table": "ip",
"entityType": "pks"
},
{
"columns": [
"key",
"interval"
],
"columns": ["key", "interval"],
"name": "PRIMARY",
"table": "key_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "model_sticky_provider",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tpm_rate_limit",
"entityType": "pks"
},
{
"columns": [
"id",
"interval"
],
"columns": ["id", "interval"],
"name": "PRIMARY",
"table": "model_tps_rate_limit",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "key",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "model",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "provider",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"referral_id"
],
"columns": ["workspace_id", "referral_id"],
"name": "PRIMARY",
"table": "referral_reward",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "referral",
"entityType": "pks"
},
{
"columns": [
"workspace_id",
"id"
],
"columns": ["workspace_id", "id"],
"name": "PRIMARY",
"table": "user",
"entityType": "pks"
},
{
"columns": [
"id"
],
"columns": ["id"],
"name": "PRIMARY",
"table": "workspace",
"entityType": "pks"
@ -3072,4 +3010,4 @@
}
],
"renames": []
}
}

View file

@ -19,7 +19,10 @@ export namespace Referral {
export const CODE_LENGTH = 10
export function normalizeCode(code?: string | null) {
return code?.toUpperCase().replace(/[^A-Z0-9]/g, "").slice(0, CODE_LENGTH)
return code
?.toUpperCase()
.replace(/[^A-Z0-9]/g, "")
.slice(0, CODE_LENGTH)
}
function generateCode() {
@ -41,7 +44,11 @@ export namespace Referral {
.update(WorkspaceTable)
.set({ referralCode: generateCode() })
.where(
and(eq(WorkspaceTable.id, workspaceID), isNull(WorkspaceTable.referralCode), isNull(WorkspaceTable.timeDeleted)),
and(
eq(WorkspaceTable.id, workspaceID),
isNull(WorkspaceTable.referralCode),
isNull(WorkspaceTable.timeDeleted),
),
)
const created = await tx
@ -74,7 +81,10 @@ export namespace Referral {
})
.from(ReferralRewardTable)
.innerJoin(ReferralTable, eq(ReferralTable.id, ReferralRewardTable.referralID))
.innerJoin(AuthTable, and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")))
.innerJoin(
AuthTable,
and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")),
)
.where(
and(
eq(ReferralRewardTable.workspaceID, workspaceID),
@ -86,12 +96,18 @@ export namespace Referral {
tx
.select({ id: ReferralTable.id, inviteeEmail: AuthTable.subject, timeCreated: ReferralTable.timeCreated })
.from(ReferralTable)
.innerJoin(AuthTable, and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")))
.innerJoin(
AuthTable,
and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")),
)
.where(and(eq(ReferralTable.workspaceID, workspaceID), isNull(ReferralTable.timeDeleted))),
tx
.select({ id: ReferralTable.id, inviteeEmail: AuthTable.subject, timeCreated: ReferralTable.timeCreated })
.from(ReferralTable)
.innerJoin(AuthTable, and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")))
.innerJoin(
AuthTable,
and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")),
)
.where(and(eq(ReferralTable.inviteeAccountID, accountID), isNull(ReferralTable.timeDeleted))),
tx
.select({ referralID: ReferralRewardTable.referralID })
@ -158,9 +174,7 @@ export namespace Referral {
hasActiveGo: !!rows.lite,
rewardAmount: microCentsToCents(REWARD_AMOUNT),
totalEarned: rewards.reduce((total, reward) => total + reward.amount, 0),
totalApplied: rewards
.filter((reward) => reward.timeApplied)
.reduce((total, reward) => total + reward.amount, 0),
totalApplied: rewards.filter((reward) => reward.timeApplied).reduce((total, reward) => total + reward.amount, 0),
rewards: allRewards,
}
})
@ -277,10 +291,7 @@ export namespace Referral {
}
})
export async function createFromAccount(input: {
accountID: string
referralCode?: string
}) {
export async function createFromAccount(input: { accountID: string; referralCode?: string }) {
const referralCode = normalizeCode(input.referralCode)
if (!referralCode) return
@ -313,14 +324,11 @@ export namespace Referral {
if (selfReferral) throw new Error("Self-referral is not allowed")
const referralID = Identifier.create("referral")
await tx
.insert(ReferralTable)
.ignore()
.values({
workspaceID: code.workspaceID,
id: referralID,
inviteeAccountID: input.accountID,
})
await tx.insert(ReferralTable).ignore().values({
workspaceID: code.workspaceID,
id: referralID,
inviteeAccountID: input.accountID,
})
const referral = await tx
.select({ id: ReferralTable.id, workspaceID: ReferralTable.workspaceID })
@ -332,16 +340,17 @@ export namespace Referral {
})
}
export async function completeFromLiteSubscription(input: {
workspaceID: string
userID: string
}) {
export async function completeFromLiteSubscription(input: { workspaceID: string; userID: string }) {
return Database.transaction(async (tx) => {
const invitee = await tx
.select({ accountID: UserTable.accountID })
.from(UserTable)
.where(
and(eq(UserTable.workspaceID, input.workspaceID), eq(UserTable.id, input.userID), isNull(UserTable.timeDeleted)),
and(
eq(UserTable.workspaceID, input.workspaceID),
eq(UserTable.id, input.userID),
isNull(UserTable.timeDeleted),
),
)
.then((rows) => rows[0])
if (!invitee?.accountID) throw new Error("Referral invitee account missing")

View file

@ -9,10 +9,7 @@ export const ReferralTable = mysqlTable(
...timestamps,
inviteeAccountID: ulid("invitee_account_id").notNull(),
},
(table) => [
...workspaceIndexes(table),
uniqueIndex("referral_invitee_account_id").on(table.inviteeAccountID),
],
(table) => [...workspaceIndexes(table), uniqueIndex("referral_invitee_account_id").on(table.inviteeAccountID)],
)
export const ReferralRewardTable = mysqlTable(

View file

@ -10,10 +10,7 @@ export const WorkspaceTable = mysqlTable(
name: varchar("name", { length: 255 }).notNull(),
...timestamps,
},
(table) => [
uniqueIndex("slug").on(table.slug),
uniqueIndex("referral_code").on(table.referralCode),
],
(table) => [uniqueIndex("slug").on(table.slug), uniqueIndex("referral_code").on(table.referralCode)],
)
export function workspaceIndexes(table: any) {