Geting users by email, fix for Postgres (#150)

This commit is contained in:
Marko Gaćeša 2023-01-04 19:16:09 +01:00 committed by GitHub
parent 9f7d6cc857
commit ff934c840f
5 changed files with 14 additions and 14 deletions

View File

@ -17,6 +17,4 @@ principal_id SERIAL PRIMARY KEY
,principal_sa_parent_id INTEGER
,UNIQUE(principal_uid_unique)
,UNIQUE(principal_email)
,UNIQUE(principal_salt)
);

View File

@ -0,0 +1,2 @@
CREATE UNIQUE INDEX index_principals_lower_email
ON principals(LOWER(principal_email));

View File

@ -2,8 +2,8 @@ CREATE TABLE principals (
principal_id INTEGER PRIMARY KEY AUTOINCREMENT
,principal_uid TEXT
,principal_uid_unique TEXT
,principal_email TEXT COLLATE NOCASE
,principal_type TEXT COLLATE NOCASE
,principal_email TEXT
,principal_type TEXT
,principal_display_name TEXT
,principal_admin BOOLEAN
,principal_blocked BOOLEAN
@ -13,10 +13,8 @@ principal_id INTEGER PRIMARY KEY AUTOINCREMENT
,principal_user_password TEXT
,principal_sa_parent_type TEXT COLLATE NOCASE
,principal_sa_parent_id INTEGER
,principal_sa_parent_type TEXT
,principal_sa_parent_id INTEGER
,UNIQUE(principal_uid_unique)
,UNIQUE(principal_email COLLATE NOCASE)
,UNIQUE(principal_salt)
);

View File

@ -0,0 +1,2 @@
CREATE UNIQUE INDEX index_principals_lower_email
ON principals(LOWER(principal_email));

View File

@ -7,6 +7,7 @@ package database
import (
"context"
"fmt"
"strings"
"github.com/harness/gitness/internal/store"
"github.com/harness/gitness/internal/store/database/dbtx"
@ -77,8 +78,11 @@ func (s *UserStore) FindUID(ctx context.Context, uid string) (*types.User, error
func (s *UserStore) FindEmail(ctx context.Context, email string) (*types.User, error) {
db := dbtx.GetAccessor(ctx, s.db)
const sqlQuery = userBase + `
WHERE principal_type = 'user' AND LOWER(principal_email) = $1`
dst := new(user)
if err := db.GetContext(ctx, dst, userSelectEmail, email); err != nil {
if err := db.GetContext(ctx, dst, sqlQuery, strings.ToLower(email)); err != nil {
return nil, processSQLErrorf(err, "Select by email query failed")
}
@ -170,7 +174,7 @@ func (s *UserStore) List(ctx context.Context, opts *types.UserFilter) ([]*types.
case enum.UserAttrUpdated:
stmt = stmt.OrderBy("principal_updated " + opts.Order.String())
case enum.UserAttrEmail:
stmt = stmt.OrderBy("principal_email " + opts.Order.String())
stmt = stmt.OrderBy("LOWER(principal_email) " + opts.Order.String())
case enum.UserAttrUID:
stmt = stmt.OrderBy("principal_uid " + opts.Order.String())
case enum.UserAttrAdmin:
@ -268,10 +272,6 @@ const userSelectUIDUnique = userBase + `
WHERE principal_type = 'user' AND principal_uid_unique = $1
`
const userSelectEmail = userBase + `
WHERE principal_type = 'user' AND principal_email = $1
`
const userDelete = `
DELETE FROM principals
WHERE principal_type = 'user' AND principal_id = $1