diff options
Diffstat (limited to 'internal/db/users.go')
-rw-r--r-- | internal/db/users.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/internal/db/users.go b/internal/db/users.go index 65326a95..80b124ea 100644 --- a/internal/db/users.go +++ b/internal/db/users.go @@ -70,6 +70,9 @@ type UsersStore interface { // GetByUsername returns the user with given username. It returns // ErrUserNotExist when not found. GetByUsername(ctx context.Context, username string) (*User, error) + // GetByKeyID returns the owner of given public key ID. It returns + // ErrUserNotExist when not found. + GetByKeyID(ctx context.Context, keyID int64) (*User, error) // HasForkedRepository returns true if the user has forked given repository. HasForkedRepository(ctx context.Context, userID, repoID int64) bool // IsUsernameUsed returns true if the given username has been used other than @@ -484,6 +487,22 @@ func (db *users) GetByUsername(ctx context.Context, username string) (*User, err return user, nil } +func (db *users) GetByKeyID(ctx context.Context, keyID int64) (*User, error) { + user := new(User) + err := db.WithContext(ctx). + Joins(dbutil.Quote("JOIN public_key ON public_key.owner_id = %s.id", "user")). + Where("public_key.id = ?", keyID). + First(user). + Error + if err != nil { + if err == gorm.ErrRecordNotFound { + return nil, ErrUserNotExist{args: errutil.Args{"keyID": keyID}} + } + return nil, err + } + return user, nil +} + func (db *users) HasForkedRepository(ctx context.Context, userID, repoID int64) bool { var count int64 db.WithContext(ctx).Model(new(Repository)).Where("owner_id = ? AND fork_id = ?", userID, repoID).Count(&count) |