73 lines
1.8 KiB
TypeScript
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;
|
|
}
|
|
}
|