Files
calendar/packages/lib/server/service/membershipService.ts
T
Syed Ali ShahbazandGitHub 66b52bb19f feat: Enhance private link expiration with usage and date limits (#22304)
* init

* fix type

* fix a re-render infinite loop because of missing readOnly (╯°□°)╯︵ ┻━┻)

* further fixes

* improvement

* fix expiry datetime check

* remove unnecessary prismaMock def

* revert

* fix test

* add test ids

* remove unit tests in favor of e2e

* e2e test update

* fix e2e

* fix e2e

* remove unnecessary change

* abstract into injectable object

* further improvements

* fix label not selecting radio

* fix type

* code improvement

* DI implementation

* fix type

* fix quick copy

* code improvement and a few fixes

* further improvements and NITS

* further into DI

* select

* improve link list sorting

* prep for easier conflict resolution

* add back translations

* using useCopy instead

* improvement

* add index to update salt and have different hash generation

* fix private link description

* fix increment regression in expiry logic

* fixes

* address feedback

* use extractHostTimezone in event type listing

* remove unused function

* remove translationBundler

* -_-

* address feedback

* further changes

* address more feedback

* NIT

* address improvement suggestions

* use extractHostTimezone

* remove console log

* pre update

* code improvement

* further fixes

* cleanup

* -_-
2025-07-24 19:54:44 +01:00

42 lines
1.0 KiB
TypeScript

import { MembershipRole } from "@calcom/prisma/enums";
import { MembershipRepository } from "../repository/membership";
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,
};
}
}