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  }