Migrate connected account model (#2944)

* migrate-connectedAccount-model

* update accountOwerId

* prevent user from connecting multiple times with the same account

* Delete .yarn/releases/yarn-1.22.21.cjs

* Delete .yarnrc

* modified according to comments

* updates
This commit is contained in:
bosiraphael
2023-12-12 11:09:20 +01:00
committed by GitHub
parent 3f422f9640
commit 95002f5f9a
8 changed files with 113 additions and 96 deletions

View File

@ -28,21 +28,22 @@ export class GoogleGmailAuthController {
@Req() req: GoogleGmailRequest,
@Res() res: Response,
) {
const { user: gmailUser } = req;
const { user } = req;
const { accessToken, refreshToken, transientToken } = gmailUser;
const { email, accessToken, refreshToken, transientToken } = user;
const { workspaceMemberId, workspaceId } =
await this.tokenService.verifyTransientToken(transientToken);
this.googleGmailService.saveConnectedAccount({
email,
workspaceMemberId: workspaceMemberId,
workspaceId: workspaceId,
type: 'gmail',
provider: 'gmail',
accessToken,
refreshToken,
});
return res.redirect('http://localhost:3001');
return res.redirect('http://localhost:3001/settings/accounts');
}
}

View File

@ -1,9 +1,14 @@
import { ArgsType, Field } from '@nestjs/graphql';
import { IsNotEmpty, IsString } from 'class-validator';
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
@ArgsType()
export class SaveConnectedAccountInput {
@Field(() => String)
@IsNotEmpty()
@IsEmail()
email: string;
@Field(() => String)
@IsNotEmpty()
@IsString()
@ -17,7 +22,7 @@ export class SaveConnectedAccountInput {
@Field(() => String)
@IsNotEmpty()
@IsString()
type: string;
provider: string;
@Field(() => String)
@IsNotEmpty()

View File

@ -14,8 +14,14 @@ export class GoogleGmailService {
async saveConnectedAccount(
saveConnectedAccountInput: SaveConnectedAccountInput,
) {
const { workspaceId, type, accessToken, refreshToken } =
saveConnectedAccountInput;
const {
email,
workspaceId,
provider,
accessToken,
refreshToken,
workspaceMemberId,
} = saveConnectedAccountInput;
const dataSourceMetadata =
await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceIdOrFail(
@ -26,8 +32,20 @@ export class GoogleGmailService {
dataSourceMetadata,
);
const connectedAccount = await workspaceDataSource?.query(
`SELECT * FROM ${dataSourceMetadata.schema}."connectedAccount" WHERE "email" = $1 AND "provider" = $2 AND "accountOwnerId" = $3`,
[email, provider, workspaceMemberId],
);
if (connectedAccount.length > 0) {
console.log('This account is already connected to your workspace.');
return;
}
await workspaceDataSource?.query(
`INSERT INTO ${dataSourceMetadata.schema}."connectedAccount" ("type", "accessToken", "refreshToken") VALUES ('${type}', '${accessToken}', '${refreshToken}')`,
`INSERT INTO ${dataSourceMetadata.schema}."connectedAccount" ("email", "provider", "accessToken", "refreshToken", "accountOwnerId") VALUES ($1, $2, $3, $4, $5)`,
[email, provider, accessToken, refreshToken, workspaceMemberId],
);
return;