mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
27 lines
936 B
TypeScript
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;
|
|
}
|
|
}
|