feat(cloud): pause/reactivate members (#184)

* feat: add paused member status

* feat: add paused badge to member table

* chore: add translations

* feat: unpause all members on pro activation
This commit is contained in:
Henry
2025-09-18 22:09:42 +01:00
committed by GitHub
parent 6738fddc5f
commit cea5cf84c8
20 changed files with 2699 additions and 9 deletions

View File

@@ -220,6 +220,19 @@ export const initAuth = (db: dbClient) => {
console.log(
`Pro subscription ${stripeSubscription.id} activated with unlimited seats`,
);
const workspace = await workspaceRepo.getByPublicId(
db,
subscription.referenceId,
);
if (workspace?.id) {
await memberRepo.unpauseAllMembers(db, workspace.id);
console.log(
`Unpausing all members for workspace ${workspace.id}`,
);
}
}
},
},

View File

@@ -0,0 +1 @@
ALTER TYPE "public"."member_status" ADD VALUE 'paused';

File diff suppressed because it is too large Load Diff

View File

@@ -99,6 +99,13 @@
"when": 1757535838766,
"tag": "20250910202358_AddCascadeSetNullToReferenceIdOnSubsriptions",
"breakpoints": true
},
{
"idx": 14,
"version": "7",
"when": 1758226671081,
"tag": "20250918201751_AddPausedMemberStatus",
"breakpoints": true
}
]
}

View File

@@ -95,3 +95,15 @@ export const softDelete = async (
return result;
};
export const unpauseAllMembers = async (db: dbClient, workspaceId: number) => {
await db
.update(workspaceMembers)
.set({ status: "active" })
.where(
and(
eq(workspaceMembers.workspaceId, workspaceId),
eq(workspaceMembers.status, "paused"),
),
);
};

View File

@@ -19,7 +19,12 @@ export const memberRoles = ["admin", "member", "guest"] as const;
export type MemberRole = (typeof memberRoles)[number];
export const memberRoleEnum = pgEnum("role", memberRoles);
export const memberStatuses = ["invited", "active", "removed"] as const;
export const memberStatuses = [
"invited",
"active",
"removed",
"paused",
] as const;
export type MemberStatus = (typeof memberStatuses)[number];
export const memberStatusEnum = pgEnum("member_status", memberStatuses);