diff --git a/frontend/src/lib/types/api.ts b/frontend/src/lib/types/api.ts index 2790581..0bb968f 100644 --- a/frontend/src/lib/types/api.ts +++ b/frontend/src/lib/types/api.ts @@ -310,6 +310,7 @@ export interface OrgDetails { created_at: number; role: "owner" | "member"; logo_url: string | null; + link_count: number; }; members: OrgMember[]; pending_invitations: OrgInvitation[]; diff --git a/frontend/src/routes/dashboard/org/+page.svelte b/frontend/src/routes/dashboard/org/+page.svelte index bf8aa6f..39988bb 100644 --- a/frontend/src/routes/dashboard/org/+page.svelte +++ b/frontend/src/routes/dashboard/org/+page.svelte @@ -356,16 +356,14 @@ let canDelete = $state(false); async function checkCanDelete() { - if (!orgDetails) return; try { const orgsRes = await orgsApi.listMyOrgs(); const ownedOrgs = orgsRes.orgs.filter((o) => o.role === "owner"); userOrgs = ownedOrgs.filter((o) => o.id !== orgDetails!.org.id); canDelete = ownedOrgs.length > 1; - // Get link count from usage API - const usage = await orgsApi.getUsage(); - linkCount = usage.usage?.links_created_this_month || 0; + // Get link count from org details (actual links in this org, not billing account level) + linkCount = orgDetails?.org.link_count || 0; } catch { canDelete = false; } @@ -378,6 +376,14 @@ setTimeout(() => (actionError = ""), 3000); return; } + + // If org has no links, delete directly without showing modal + if (linkCount === 0) { + deleteAction = "delete"; + await handleDeleteOrg(); + return; + } + showDeleteModal = true; deleteError = ""; deleteAction = "delete"; diff --git a/scripts/start-local-environment.sh b/scripts/start-local-environment.sh index a827402..e35bf34 100755 --- a/scripts/start-local-environment.sh +++ b/scripts/start-local-environment.sh @@ -150,14 +150,8 @@ fi echo "🔨 Building worker..." worker-build --release --quiet -# Create R2 bucket for logos (if it doesn't exist) -echo "🪣 Setting up R2 assets bucket..." -if ! wrangler r2 bucket list | grep -q "rushomon-assets"; then - echo "Creating R2 bucket: rushomon-assets" - wrangler r2 bucket create rushomon-assets -else - echo "R2 bucket 'rushomon-assets' already exists" -fi +# Note: R2 bucket is created automatically by wrangler dev --local +# Remote bucket creation is skipped for local development # Apply migrations (passing environment if specified) echo "🔨 Applying migrations..." diff --git a/src/api/orgs/crud.rs b/src/api/orgs/crud.rs index c17ff14..8bf2408 100644 --- a/src/api/orgs/crud.rs +++ b/src/api/orgs/crud.rs @@ -148,6 +148,7 @@ async fn inner_get_org(req: Request, ctx: RouteContext<()>) -> Result) -> Result