Files
Joe Au-YeungGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
f6d3b11582 refactor: Membership.findByUserIdAndTeamId to instance method (#26628)
* Make  and instance method

* Refactor files

* fix: update MembershipRepository mocks to use vi.hoisted() for proper hoisting

Co-Authored-By: [email protected] <[email protected]>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-09 22:37:42 -03:00

41 lines
1.1 KiB
TypeScript

import { MembershipRepository } from "@calcom/features/membership/repositories/MembershipRepository";
import { MembershipRole } from "@calcom/prisma/enums";
export type MembershipCheckResult = {
isMember: boolean;
isAdmin: boolean;
isOwner: boolean;
role?: MembershipRole;
};
export class MembershipService {
constructor(private readonly membershipRepository: MembershipRepository = new MembershipRepository()) {}
/**
* Checks the membership status of a user within a specific team.
*/
async checkMembership(teamId: number, userId: number): Promise<MembershipCheckResult> {
const membership = await this.membershipRepository.findUniqueByUserIdAndTeamId({ teamId, userId });
if (!membership || !membership.accepted) {
return {
isMember: false,
isAdmin: false,
isOwner: false,
role: undefined,
};
}
const { role } = membership;
const isOwner = role === MembershipRole.OWNER;
const isAdmin = isOwner || role === MembershipRole.ADMIN;
return {
isMember: true,
isAdmin,
isOwner,
role,
};
}
}