feat(cloud): pause members when subscription is cancelled

This commit is contained in:
Henry
2026-05-21 22:52:14 +01:00
parent 971348a397
commit 8d8cfa3bae
8 changed files with 167 additions and 42 deletions

View File

@@ -4,6 +4,7 @@ import type { Readable } from "node:stream";
import { createNextApiContext } from "@kan/api/trpc";
import { withApiLogging } from "@kan/api/utils/apiLogging";
import { cancelWorkspaceAccess } from "@kan/api/utils/workspace";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { createLogger } from "@kan/logger";
@@ -126,7 +127,7 @@ export default withApiLogging(
const [, allSubs] = await Promise.all([
subscriptionRepo.updateById(db, sub.id, {
plan: "free",
status: "inactive",
status: "canceled",
}),
sub.referenceId
? subscriptionRepo.getByReferenceId(db, sub.referenceId)
@@ -137,7 +138,7 @@ export default withApiLogging(
(s) => s.id !== sub.id,
);
if (!hasActiveSub) {
await workspaceRepo.update(db, sub.referenceId, { plan: "free" });
await cancelWorkspaceAccess(db, sub.referenceId);
}
}
}

View File

@@ -81,8 +81,6 @@ export function InviteMemberForm({
}
}, [activeInviteLink]);
const isAtSeatLimit = seatLimit !== null && memberCount >= seatLimit;
const inviteMember = api.member.invite.useMutation({
onSuccess: async () => {
closeModal();

View File

@@ -89,6 +89,9 @@ export default function MembersPage() {
const activeMembers = data?.members.length ?? 0;
const seatLimit = getSeatLimit(subscriptions);
const memberCount =
data?.members.filter((m) => m.status === "active" || m.status === "invited")
.length ?? 0;
const totalSeats =
teamSubscription?.seats ??
proSubscription?.seats ??
@@ -407,7 +410,7 @@ export default function MembersPage() {
<InviteMemberForm
subscriptions={subscriptions}
unlimitedSeats={unlimitedSeats}
memberCount={activeMembers}
memberCount={memberCount}
seatLimit={seatLimit}
/>
</Modal>