Files
hoppscotch/packages/hoppscotch-backend/src/user/user.service.ts
2023-01-09 19:02:14 +05:30

73 lines
1.8 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
import * as O from 'fp-ts/Option';
import { User } from './user.model';
@Injectable()
export class UserService {
constructor(private prisma: PrismaService) {}
async findUserByEmail(email: string) {
try {
const user: User = await this.prisma.user.findUniqueOrThrow({
where: {
email: email,
},
});
return O.some(user);
} catch (error) {
return O.none;
}
}
async createUser(email: string) {
const createdUser = await this.prisma.user.create({
data: {
email: email,
accounts: {
create: {
provider: 'magic',
providerAccountId: email,
},
},
},
});
return createdUser;
}
async createUserSSO(accessToken, refreshToken, profile) {
const createdUser = await this.prisma.user.create({
data: {
name: profile.displayName,
email: profile.emails[0].value,
image: profile.photos[0].value,
accounts: {
create: {
provider: profile.provider,
providerAccountId: profile.id,
providerRefreshToken: refreshToken,
providerAccessToken: accessToken,
},
},
},
});
return createdUser;
}
async createProviderAccount(user, accessToken, refreshToken, profile) {
const createdProvider = await this.prisma.account.create({
data: {
userId: user.id,
provider: profile.provider,
providerAccountId: profile.id,
providerRefreshToken: refreshToken ? refreshToken : null,
providerAccessToken: accessToken ? accessToken : null,
},
});
return createdProvider;
}
}