Skip to content

Commit

Permalink
Remove subquery to fix uniqely reference users table Add users table …
Browse files Browse the repository at this point in the history
…name

This fixes multiple times reference of same table in a query
and which was creating conflict

Signed-off-by: Shiv Verma <shverma@redhat.com>
  • Loading branch information
pratap0007 committed Jan 11, 2024
1 parent 86ff7f2 commit 27adc0e
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions api/pkg/auth/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,14 @@ func createChecksum(token string) string {
(Keeping email as the primary key in users table)
We perform search query in users table on the basis of email:
If Email is not present(existing user or new user)
query the accounts table on the basis of username and provider
- If the above case matches -> update the email in users table and other details respectively in accounts table
- If the above case returns empty record(new user)
- create a new user in the database
If Email is already present
fetch the user_id from users table and query the accounts table with `where` clause of `user_id` and `provider`
- if the record doesn't exists(user trying to login with new provider)
then create a new record in accounts table with new provider and the user_id already associated with the email
Expand All @@ -113,8 +116,8 @@ func (r *request) insertData(gitUser goth.User, code, provider string) error {
var acc model.Account
var user model.User

userQuery := r.db.Model(&model.User{}).
Where("email = ?", gitUser.Email)
userQuery := r.db.Table("users as u").
Where("u.email = ?", gitUser.Email)

// Check if user exist
err := userQuery.First(&user).Error
Expand Down Expand Up @@ -153,8 +156,8 @@ func (r *request) insertData(gitUser goth.User, code, provider string) error {
}
} else { // when the email of user already exists
// Update the users table with the auth code
if err := userQuery.Update("code", code).Error; err != nil {
r.log.Error(err)
if err := r.db.Model(&model.User{}).
Where("email = ?", gitUser.Email).Update("code", code).Error; err != nil {
return err
}

Expand Down

0 comments on commit 27adc0e

Please sign in to comment.