* remove event type requires confirmation * allow sms sending also for team (frontend) * allow text to attendee for team (backend) * add rate limiting for SMS (WIP) * add functionality to lock and unlock SMS sending (+admin UI view) * rename to smsLockState * add ability to lock users and teams * don't send sms if locked * add missing imports * fix rate limit namespace * add translation * fix type error * remove prop from UsersTable * add smsLockState to buildUser * code clean up * create seperate sms rate limit function * fix type error * add missing userId and teamId to sendSMS * code improvements * add User Team type * fix marking as reviewed * check monthly sms limit only for user * don't lock orgs * fix type error * fix avatars * fix type error * fix type error * fix type error --------- Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
72 lines
1.4 KiB
TypeScript
72 lines
1.4 KiB
TypeScript
import { prisma } from "@calcom/prisma";
|
|
import { SMSLockState } from "@calcom/prisma/client";
|
|
|
|
import type { TrpcSessionUser } from "../../../trpc";
|
|
|
|
type GetOptions = {
|
|
ctx: {
|
|
user: NonNullable<TrpcSessionUser>;
|
|
};
|
|
};
|
|
|
|
const getSMSLockStateTeamsUsers = async ({ ctx }: GetOptions) => {
|
|
const userSelect = {
|
|
id: true,
|
|
smsLockState: true,
|
|
email: true,
|
|
username: true,
|
|
name: true,
|
|
avatarUrl: true,
|
|
};
|
|
|
|
const teamSelect = {
|
|
id: true,
|
|
smsLockState: true,
|
|
slug: true,
|
|
name: true,
|
|
logoUrl: true,
|
|
};
|
|
|
|
const lockedUsers = await prisma.user.findMany({
|
|
where: {
|
|
smsLockState: SMSLockState.LOCKED,
|
|
},
|
|
select: userSelect,
|
|
});
|
|
const reviewNeededUsers = await prisma.user.findMany({
|
|
where: {
|
|
smsLockState: SMSLockState.REVIEW_NEEDED,
|
|
},
|
|
select: userSelect,
|
|
});
|
|
|
|
const lockedTeams = await prisma.team.findMany({
|
|
where: {
|
|
smsLockState: SMSLockState.LOCKED,
|
|
},
|
|
select: teamSelect,
|
|
});
|
|
|
|
const reviewNeededTeams = await prisma.team.findMany({
|
|
where: {
|
|
smsLockState: SMSLockState.REVIEW_NEEDED,
|
|
},
|
|
select: teamSelect,
|
|
});
|
|
|
|
const resultObj = {
|
|
users: {
|
|
locked: lockedUsers,
|
|
reviewNeeded: reviewNeededUsers,
|
|
},
|
|
teams: {
|
|
locked: lockedTeams,
|
|
reviewNeeded: reviewNeededTeams,
|
|
},
|
|
};
|
|
|
|
return resultObj;
|
|
};
|
|
|
|
export default getSMSLockStateTeamsUsers;
|