All files / src/googleOAuth2/repositories googleOAuth2TokensRepository.ts

85.71% Statements 18/21
80% Branches 4/5
100% Functions 2/2
84.21% Lines 16/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 678x 8x 8x 8x     8x   2x           2x 1x 1x           1x                     1x                           6x             6x 5x     1x           1x    
import { injectable } from "inversify";
import GoogleOAuth2Tokens from "../models/googleOAuth2Tokens.model";
import RepositoryError from "../../core/errors/repositoryError";
import GoogleOAuth2IdentifiersFactory from "../factories/googleOAuth2IdentifiersFactory";
 
@injectable()
export default class GoogleOAuth2TokensRepository {
    public async createOrUpdateAsync(userEmail: string, accessToken: string, refreshToken?: string) {
        const existingEntity = await GoogleOAuth2Tokens.findOne({
            where: {
                user_email: userEmail
            }
        });
 
        if (existingEntity === null) {
            try {
                await GoogleOAuth2Tokens.create({
                    user_email: userEmail,
                    access_token: accessToken,
                    refresh_token: refreshToken,
                });
 
                return;
            } catch(ex) {
                // Wrap all thrown db errors and strip of possible sensitive information
                Iif (ex instanceof Error) {
                    throw new RepositoryError(ex);
                }
    
                throw ex;
            }
        }
 
        await GoogleOAuth2Tokens.update({
                access_token: accessToken,
 
                ...(refreshToken !== undefined) && {
                    refresh_token: refreshToken
                },
            }, {
                where: {
                    user_email: userEmail
                }
            });
    }
 
    public async getOrNullAsync(userEmail: string) {
        const entity = await GoogleOAuth2Tokens
            .findOne({
                where: {
                    user_email: userEmail
                }
            });
 
        if (entity === null) {
            return null;
        }
 
        const identifiers = GoogleOAuth2IdentifiersFactory.create({
            userEmail: entity.user_email,
            accessToken: entity.access_token,
            refreshToken: entity.refresh_token
        });
        
        return identifiers;
    }
}