From f19dc700ef1e4cb1991638d1abcfd2b5f692d266 Mon Sep 17 00:00:00 2001 From: ankitsridhar16 Date: Thu, 22 Jun 2023 11:27:27 +0530 Subject: [PATCH] refactor: add service method to take invitee email and team ID as string to fetch invitation --- .../team-invitation.service.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/hoppscotch-backend/src/team-invitation/team-invitation.service.ts b/packages/hoppscotch-backend/src/team-invitation/team-invitation.service.ts index 9227fa93d..98610bde1 100644 --- a/packages/hoppscotch-backend/src/team-invitation/team-invitation.service.ts +++ b/packages/hoppscotch-backend/src/team-invitation/team-invitation.service.ts @@ -3,6 +3,7 @@ import * as T from 'fp-ts/Task'; import * as O from 'fp-ts/Option'; import * as TO from 'fp-ts/TaskOption'; import * as TE from 'fp-ts/TaskEither'; +import * as E from 'fp-ts/Either'; import { pipe, flow, constVoid } from 'fp-ts/function'; import { PrismaService } from 'src/prisma/prisma.service'; import { Team, TeamMemberRole } from 'src/team/team.model'; @@ -10,6 +11,7 @@ import { Email } from 'src/types/Email'; import { User } from 'src/user/user.model'; import { TeamService } from 'src/team/team.service'; import { + INVALID_EMAIL, TEAM_INVITE_ALREADY_MEMBER, TEAM_INVITE_EMAIL_DO_NOT_MATCH, TEAM_INVITE_MEMBER_HAS_INVITE, @@ -19,6 +21,7 @@ import { TeamInvitation } from './team-invitation.model'; import { MailerService } from 'src/mailer/mailer.service'; import { UserService } from 'src/user/user.service'; import { PubSubService } from 'src/pubsub/pubsub.service'; +import { validateEmail } from '../utils'; @Injectable() export class TeamInvitationService { @@ -63,6 +66,32 @@ export class TeamInvitationService { ); } + /** + * Get the team invite for an invitee with email and teamID. + * @param inviteeEmail invitee email + * @param teamID team id + * @returns an Either of team invitation for the invitee or error + */ + async getTeamInviteByEmailAndTeamID(inviteeEmail: string, teamID: string) { + const isEmailValid = validateEmail(inviteeEmail); + if (!isEmailValid) return E.left(INVALID_EMAIL); + + try { + const teamInvite = await this.prisma.teamInvitation.findUniqueOrThrow({ + where: { + teamID_inviteeEmail: { + inviteeEmail: inviteeEmail, + teamID: teamID, + }, + }, + }); + + return E.right(teamInvite); + } catch (e) { + return E.left(TEAM_INVITE_NO_INVITE_FOUND); + } + } + createInvitation( creator: User, team: Team,