@@ -98,24 +98,38 @@ export async function authRoutes(app: FastifyInstance) {
9898 email = primary ?. email || emails [ 0 ] ?. email ;
9999 }
100100
101- const user = await app . prisma . user . upsert ( {
102- where : { provider_providerId : { provider : 'github' , providerId : String ( githubUser . id ) } } ,
103- update : {
104- email : email || `${ githubUser . login } @github.local` ,
105- displayName : githubUser . name || githubUser . login ,
106- avatarUrl : githubUser . avatar_url ,
107- } ,
108- create : {
109- email : email || `${ githubUser . login } @github.local` ,
110- username : githubUser . login ,
111- displayName : githubUser . name || githubUser . login ,
112- bio : githubUser . bio ,
113- company : githubUser . company ,
114- avatarUrl : githubUser . avatar_url ,
115- provider : 'github' ,
116- providerId : String ( githubUser . id ) ,
117- } ,
118- } ) ;
101+ let user = await app . prisma . user . findUnique ( {
102+ where : {
103+ email : email || `${ githubUser . login } @github.local` ,
104+ } ,
105+ } ) ;
106+
107+ if ( user ) {
108+ user = await app . prisma . user . update ( {
109+ where : {
110+ email : email || `${ githubUser . login } @github.local` ,
111+ } ,
112+ data : {
113+ provider : 'github' ,
114+ providerId : String ( githubUser . id ) ,
115+ displayName : githubUser . name || githubUser . login ,
116+ avatarUrl : githubUser . avatar_url ,
117+ } ,
118+ } ) ;
119+ } else {
120+ user = await app . prisma . user . create ( {
121+ data : {
122+ email : email || `${ githubUser . login } @github.local` ,
123+ username : githubUser . login ,
124+ displayName : githubUser . name || githubUser . login ,
125+ bio : githubUser . bio ,
126+ company : githubUser . company ,
127+ avatarUrl : githubUser . avatar_url ,
128+ provider : 'github' ,
129+ providerId : String ( githubUser . id ) ,
130+ } ,
131+ } ) ;
132+ }
119133
120134 try {
121135 const encryptedToken = encrypt ( tokenData . access_token ) ;
@@ -215,20 +229,42 @@ export async function authRoutes(app: FastifyInstance) {
215229 const userRes = await fetch ( GOOGLE_USER_URL , { headers : { Authorization : `Bearer ${ tokenData . access_token } ` } } ) ;
216230 const googleUser = ( await userRes . json ( ) ) as any ;
217231
218- const baseUsername = googleUser . email . split ( '@' ) [ 0 ] . replace ( / [ ^ a - z A - Z 0 - 9 _ - ] / g, '' ) ;
219-
220- const user = await app . prisma . user . upsert ( {
221- where : { provider_providerId : { provider : 'google' , providerId : googleUser . id } } ,
222- update : { email : googleUser . email , displayName : googleUser . name || baseUsername , avatarUrl : googleUser . picture } ,
223- create : {
224- email : googleUser . email ,
225- username : `${ baseUsername } _${ Date . now ( ) . toString ( 36 ) } ` ,
226- displayName : googleUser . name || baseUsername ,
227- avatarUrl : googleUser . picture ,
228- provider : 'google' ,
229- providerId : googleUser . id ,
230- } ,
231- } ) ;
232+ const baseUsername = googleUser . email
233+ . split ( '@' ) [ 0 ]
234+ . replace ( / [ ^ a - z A - Z 0 - 9 _ - ] / g, '' ) ;
235+
236+ const existingUser = await app . prisma . user . findUnique ( {
237+ where : {
238+ email : googleUser . email ,
239+ } ,
240+ } ) ;
241+
242+ let user ;
243+
244+ if ( existingUser ) {
245+ user = await app . prisma . user . update ( {
246+ where : {
247+ email : googleUser . email ,
248+ } ,
249+ data : {
250+ provider : 'google' ,
251+ providerId : googleUser . id ,
252+ displayName : googleUser . name || baseUsername ,
253+ avatarUrl : googleUser . picture ,
254+ } ,
255+ } ) ;
256+ } else {
257+ user = await app . prisma . user . create ( {
258+ data : {
259+ email : googleUser . email ,
260+ username : `${ baseUsername } _${ Date . now ( ) . toString ( 36 ) } ` ,
261+ displayName : googleUser . name || baseUsername ,
262+ avatarUrl : googleUser . picture ,
263+ provider : 'google' ,
264+ providerId : googleUser . id ,
265+ } ,
266+ } ) ;
267+ }
232268
233269 const token = app . jwt . sign ( { id : user . id , username : user . username } , { expiresIn : '30d' } ) ;
234270
0 commit comments