feat: remove member from hosts on removal (#9722)

* feat: When a member is removed we should remove it from the hosts

* Add migration for fixing old records affected
This commit is contained in:
Alex van Andel
2023-06-22 21:33:03 +02:00
committed by GitHub
parent 4f0e843ac6
commit d8bc9acbbc
3 changed files with 34 additions and 9 deletions
@@ -27,7 +27,7 @@ import {
showToast,
Tooltip,
} from "@calcom/ui";
import { ExternalLink, MoreHorizontal, Edit2, Lock, Trash } from "@calcom/ui/components/icon";
import { ExternalLink, MoreHorizontal, Edit2, Lock, UserX } from "@calcom/ui/components/icon";
import MemberChangeRoleModal from "./MemberChangeRoleModal";
import TeamAvailabilityModal from "./TeamAvailabilityModal";
@@ -212,8 +212,8 @@ export default function MemberListItem(props: Props) {
type="button"
onClick={() => setShowDeleteModal(true)}
color="destructive"
StartIcon={Trash}>
{t("delete")}
StartIcon={UserX}>
{t("remove")}
</DropdownItem>
</DropdownMenuItem>
</DropdownMenuContent>
@@ -246,8 +246,8 @@ export default function MemberListItem(props: Props) {
type="button"
color="destructive"
onClick={() => setShowDeleteModal(true)}
StartIcon={Trash}>
{t("delete")}
StartIcon={UserX}>
{t("remove")}
</DropdownItem>
</DropdownMenuItem>
</>
@@ -0,0 +1,16 @@
DELETE FROM "Host"
WHERE "Host"."userId" IN (
SELECT "Host"."userId" FROM "Host"
LEFT JOIN "Membership" ON "Membership"."userId" = "Host"."userId"
INNER JOIN "EventType" ON "EventType"."id" = "Host"."eventTypeId"
WHERE "EventType"."teamId" IS NOT NULL
AND "Membership"."userId" IS NULL
)
AND "Host"."eventTypeId" IN (
SELECT "Host"."eventTypeId" FROM "Host"
LEFT JOIN "Membership" ON "Membership"."userId" = "Host"."userId"
INNER JOIN "EventType" ON "EventType"."id" = "Host"."eventTypeId"
WHERE "EventType"."teamId" IS NOT NULL
AND "Membership"."userId" IS NULL
);
@@ -4,7 +4,6 @@ import { updateQuantitySubscriptionFromStripe } from "@calcom/features/ee/teams/
import { IS_TEAM_BILLING_ENABLED } from "@calcom/lib/constants";
import { isTeamAdmin, isTeamOwner } from "@calcom/lib/server/queries/teams";
import { closeComDeleteTeamMembership } from "@calcom/lib/sync/SyncServiceManager";
import { prisma } from "@calcom/prisma";
import type { TrpcSessionUser } from "@calcom/trpc/server/trpc";
import { TRPCError } from "@trpc/server";
@@ -32,7 +31,7 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) =
message: "You can not remove yourself from a team you own.",
});
const membership = await prisma.membership.delete({
const membership = await ctx.prisma.membership.delete({
where: {
userId_teamId: { userId: input.memberId, teamId: input.teamId },
},
@@ -41,9 +40,19 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) =
},
});
// remove user as host from team events associated with this membership
await ctx.prisma.host.deleteMany({
where: {
userId: input.memberId,
eventType: {
teamId: input.teamId,
},
},
});
if (input.isOrg) {
// Deleting membership from all child teams
await prisma.membership.deleteMany({
await ctx.prisma.membership.deleteMany({
where: {
team: {
parentId: input.teamId,
@@ -52,7 +61,7 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) =
},
});
await prisma.user.update({
await ctx.prisma.user.update({
where: { id: membership.userId },
data: { organizationId: null },
});