github.com/condensat/bank-core@v0.1.0/database/query/oauth.go (about) 1 // Copyright 2020 Condensat Tech. All rights reserved. 2 // Use of this source code is governed by a MIT 3 // license that can be found in the LICENSE file. 4 5 package query 6 7 import ( 8 "errors" 9 10 "github.com/condensat/bank-core/database" 11 "github.com/condensat/bank-core/database/model" 12 13 "github.com/jinzhu/gorm" 14 ) 15 16 var ( 17 ErrInvalidProvider = errors.New("Invalid Provider") 18 ErrInvalidProviderID = errors.New("Invalid ProviderID") 19 ErrInvalidOAuthID = errors.New("Invalid OAuthID") 20 ErrInvalidOAuthData = errors.New("Invalid OAuth Data") 21 ) 22 23 // FindOrCreateOAuth 24 func FindOrCreateOAuth(db database.Context, oauth model.OAuth) (model.OAuth, error) { 25 if len(oauth.Provider) == 0 { 26 return model.OAuth{}, ErrInvalidProvider 27 } 28 if len(oauth.ProviderID) == 0 { 29 return model.OAuth{}, ErrInvalidProviderID 30 } 31 if oauth.UserID == 0 { 32 return model.OAuth{}, ErrInvalidUserID 33 } 34 35 switch gdb := db.DB().(type) { 36 case *gorm.DB: 37 38 var result model.OAuth 39 err := gdb. 40 Where(model.OAuth{ 41 Provider: oauth.Provider, 42 ProviderID: oauth.ProviderID, 43 }). 44 Assign(oauth). 45 FirstOrCreate(&result).Error 46 47 return result, err 48 49 default: 50 return model.OAuth{}, database.ErrInvalidDatabase 51 } 52 } 53 54 // CreateOrUpdateOAuthData 55 func CreateOrUpdateOAuthData(db database.Context, oauthData model.OAuthData) (model.OAuthData, error) { 56 if oauthData.OAuthID == 0 { 57 return model.OAuthData{}, ErrInvalidOAuthID 58 } 59 if len(oauthData.Data) == 0 { 60 return model.OAuthData{}, ErrInvalidOAuthData 61 } 62 63 switch gdb := db.DB().(type) { 64 case *gorm.DB: 65 66 var result model.OAuthData 67 err := gdb. 68 Where(model.OAuthData{ 69 OAuthID: oauthData.OAuthID, 70 }). 71 Assign(oauthData). 72 FirstOrCreate(&result).Error 73 74 return result, err 75 76 default: 77 return model.OAuthData{}, database.ErrInvalidDatabase 78 } 79 }