Files
Benny JooandGitHub e91bf53d80 refactor: Remove circular deps between @calcom/lib and @calcom/features [2] (#24438)
* move SystemField to features

* migrate workflow service

* merge two tests for team repository

* update imports and migrate team repository

* migrate delegation credential repository

* migrate credential repository

* migrate entityPermissionUtils

* migrate hashedLink service and repository

* migrate membership service

* update imports

* remove file

* migrate buildEventUrlFromBooking

* migrate getAllUserBookings to features

* update imports

* update organizationMock

* migrate slots

* migrate date-ranges to schedules dir

* migrate getAggregatedAvailability

* fix

* refactor

* migrate useCreateEventType hook to features

* migrate assignValueToUser

* migrate validateUsername to auth features

* migrate system field back to lib

* migrate getLabelValueMapFromResponses back to lib

* update imports

* use relative path

* fix type checks

* fix

* fix

* fix tests

* update gh codeowners

* fix

* fix
2025-10-17 06:48:08 -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 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,
};
}
}