boredgame/src/lib/server/api/oauth/oauth.service.ts
2024-12-01 15:34:04 -08:00

27 lines
936 B
TypeScript

import type { OAuthProviders, OAuthUser } from '$lib/server/api/common/types/oauth';
import { inject, injectable } from '@needle-di/core';
import { FederatedIdentityRepository } from '../users/federated_identity.repository';
import { UsersService } from '../users/users.service';
@injectable()
export class OAuthService {
constructor(
private federatedIdentityRepository = inject(FederatedIdentityRepository),
private usersService = inject(UsersService),
) {}
async handleOAuthUser(oAuthUser: OAuthUser, oauthProvider: OAuthProviders) {
const federatedUser = await this.federatedIdentityRepository.findOneByFederatedUserIdAndProvider(oAuthUser.sub, oauthProvider);
if (federatedUser) {
return federatedUser.user_id;
}
const user = await this.usersService.createOAuthUser(oAuthUser, oauthProvider);
if (!user) {
throw new Error('Failed to create user');
}
return user.id;
}
}