Skip to content

Commit

Permalink
feat: When new user accept invitation, registered it to services
Browse files Browse the repository at this point in the history
  • Loading branch information
chavda-bhavik committed Oct 21, 2024
1 parent 38e7529 commit 37c210a
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -1,31 +1,68 @@
import { Injectable } from '@nestjs/common';
import { EmailService } from '@impler/services';
import { AuthService } from 'app/auth/services/auth.service';
import { EmailService, PaymentAPIService } from '@impler/services';
import { EMAIL_SUBJECT, IJwtPayload, SCREENS, UserRolesEnum } from '@impler/shared';
import { EnvironmentRepository, ProjectInvitationRepository, ProjectRepository } from '@impler/dal';
import {
ProjectEntity,
ProjectRepository,
EnvironmentRepository,
ProjectInvitationEntity,
ProjectInvitationRepository,
} from '@impler/dal';
import { LEAD_SIGNUP_USING } from '@shared/constants';
import { LeadService } from '@shared/services/lead.service';
import { captureException } from '@shared/helpers/common.helper';

@Injectable()
export class AcceptInvitation {
constructor(
private leadService: LeadService,
private authService: AuthService,
private environmentRepository: EnvironmentRepository,
private projectInvitationRepository: ProjectInvitationRepository,
private emailService: EmailService,
private projectRepository: ProjectRepository,
private emailService: EmailService
private paymentAPIService: PaymentAPIService,
private environmentRepository: EnvironmentRepository,
private projectInvitationRepository: ProjectInvitationRepository
) {}

async exec({ invitationId, user }: { invitationId: string; user: IJwtPayload }) {
const invitation = await this.projectInvitationRepository.findOne({ _id: invitationId });
const environment = await this.environmentRepository.findOne({
_projectId: invitation._projectId,
});
const userProjects = await this.environmentRepository.count({
'apiKeys._userId': user._id,
});
if (userProjects < 1) await this.registerUser(user);

const project = await this.projectRepository.findOne({ _id: environment._projectId });

await this.sendEmails(invitation, project);

await this.environmentRepository.addApiKey(environment._id, user._id, invitation.role);

await this.projectInvitationRepository.delete({ _id: invitationId });

const accessToken = this.authService.getSignedToken(
{
_id: user._id,
firstName: user.firstName,
lastName: user.lastName,
email: user.email,
role: invitation.role as UserRolesEnum,
isEmailVerified: true,
profilePicture: user.profilePicture,
accessToken: environment.key,
},
invitation._projectId
);

return {
accessToken,
screen: SCREENS.HOME,
};
}
async sendEmails(invitation: ProjectInvitationEntity, project: ProjectEntity) {
const emailContentsSender = this.emailService.getEmailContent({
type: 'ACCEPT_PROJECT_INVITATION_RECIEVER_EMAIL',
data: {
Expand Down Expand Up @@ -58,24 +95,26 @@ export class AcceptInvitation {
from: process.env.EMAIL_FROM,
senderName: process.env.EMAIL_FROM_NAME,
});

const accessToken = this.authService.getSignedToken(
{
_id: user._id,
firstName: user.firstName,
lastName: user.lastName,
}
async registerUser(user: IJwtPayload) {
try {
const userData = {
name: user.firstName + ' ' + user.lastName,
email: user.email,
role: invitation.role as UserRolesEnum,
isEmailVerified: true,
profilePicture: user.profilePicture,
accessToken: environment.key,
},
invitation._projectId
);

return {
accessToken,
screen: SCREENS.HOME,
};
externalId: user.email,
};
await this.paymentAPIService.createUser(userData);
await this.leadService.createLead({
'First Name': user.firstName,
'Last Name': user.lastName,
'Lead Email': user.email,
'Lead Source': 'Invitation',
'Mentioned Role': user.role,
'Signup Method': LEAD_SIGNUP_USING.EMAIL,
'Company Size': user.companySize,
});
} catch (error) {
captureException(error);
}
}
}
14 changes: 8 additions & 6 deletions apps/api/src/app/team/usecase/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { Invite } from './invite/invite.usecase';
import { SentInvitations } from './sent-invitation/sent-invitation.usecase';
import { GetInvitation } from './get-invitation/get-invitation.usecase';
import { AcceptInvitation } from './accept-invitation/accept-invitation.usecase';
import { GenerateUniqueApiKey } from 'app/environment/usecases';
import { GetInvitation } from './get-invitation/get-invitation.usecase';
import { SentInvitations } from './sent-invitation/sent-invitation.usecase';
import { TeamMemberMeta } from './team-member-meta/team-member-meta.usecase';
import { ListTeamMembers } from './list-team-members/list-team-members.usecase';
import { UpdateTeamMember } from './update-team-member-role/update-team-member.usecase';
import { RemoveTeamMember } from './delete-team-member/delete-team-member.usecase';
import { RevokeInvitation } from './revoke-invitation/revoke-invitation.usecase';
import { AcceptInvitation } from './accept-invitation/accept-invitation.usecase';
import { RemoveTeamMember } from './delete-team-member/delete-team-member.usecase';
import { DeclineInvitation } from './decline-invitation/decline-invitation.usecase';
import { TeamMemberMeta } from './team-member-meta/team-member-meta.usecase';
import { UpdateTeamMember } from './update-team-member-role/update-team-member.usecase';
import { PaymentAPIService } from '@impler/services';
import { LeadService } from '@shared/services/lead.service';

export const USE_CASES = [
Invite,
Expand All @@ -23,6 +24,7 @@ export const USE_CASES = [
RevokeInvitation,
DeclineInvitation,
TeamMemberMeta,
LeadService,
PaymentAPIService,
//
];
Expand Down
1 change: 1 addition & 0 deletions apps/web/config/constants.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,7 @@ export const HOW_HEARD_ABOUT_US = [
{ value: 'Bubble.io', label: 'Bubble.io' },
{ value: 'Colleague', label: 'Colleague' },
{ value: 'Linkdin', label: 'Linkdin' },
{ value: 'Invitation', label: 'Invitation' },
];

export const PLACEHOLDERS = {
Expand Down

0 comments on commit 37c210a

Please sign in to comment.