aboutsummaryrefslogtreecommitdiff
path: root/internal/db/repos.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/repos.go')
-rw-r--r--internal/db/repos.go26
1 files changed, 15 insertions, 11 deletions
diff --git a/internal/db/repos.go b/internal/db/repos.go
index ecdbc0a5..8b4c5bce 100644
--- a/internal/db/repos.go
+++ b/internal/db/repos.go
@@ -5,6 +5,7 @@
package db
import (
+ "context"
"fmt"
"strings"
"time"
@@ -18,14 +19,14 @@ import (
//
// NOTE: All methods are sorted in alphabetical order.
type ReposStore interface {
- // GetByName returns the repository with given owner and name.
- // It returns ErrRepoNotExist when not found.
- GetByName(ownerID int64, name string) (*Repository, error)
+ // GetByName returns the repository with given owner and name. It returns
+ // ErrRepoNotExist when not found.
+ GetByName(ctx context.Context, ownerID int64, name string) (*Repository, error)
}
var Repos ReposStore
-// NOTE: This is a GORM create hook.
+// BeforeCreate implements the GORM create hook.
func (r *Repository) BeforeCreate(tx *gorm.DB) error {
if r.CreatedUnix == 0 {
r.CreatedUnix = tx.NowFunc().Unix()
@@ -33,13 +34,13 @@ func (r *Repository) BeforeCreate(tx *gorm.DB) error {
return nil
}
-// NOTE: This is a GORM update hook.
+// BeforeUpdate implements the GORM update hook.
func (r *Repository) BeforeUpdate(tx *gorm.DB) error {
r.UpdatedUnix = tx.NowFunc().Unix()
return nil
}
-// NOTE: This is a GORM query hook.
+// AfterFind implements the GORM query hook.
func (r *Repository) AfterFind(_ *gorm.DB) error {
r.Created = time.Unix(r.CreatedUnix, 0).Local()
r.Updated = time.Unix(r.UpdatedUnix, 0).Local()
@@ -81,13 +82,13 @@ type createRepoOpts struct {
// create creates a new repository record in the database. Fields of "repo" will be updated
// in place upon insertion. It returns ErrNameNotAllowed when the repository name is not allowed,
// or ErrRepoAlreadyExist when a repository with same name already exists for the owner.
-func (db *repos) create(ownerID int64, opts createRepoOpts) (*Repository, error) {
+func (db *repos) create(ctx context.Context, ownerID int64, opts createRepoOpts) (*Repository, error) {
err := isRepoNameAllowed(opts.Name)
if err != nil {
return nil, err
}
- _, err = db.GetByName(ownerID, opts.Name)
+ _, err = db.GetByName(ctx, ownerID, opts.Name)
if err == nil {
return nil, ErrRepoAlreadyExist{args: errutil.Args{"ownerID": ownerID, "name": opts.Name}}
} else if !IsErrRepoNotExist(err) {
@@ -108,7 +109,7 @@ func (db *repos) create(ownerID int64, opts createRepoOpts) (*Repository, error)
IsFork: opts.Fork,
ForkID: opts.ForkID,
}
- return repo, db.DB.Create(repo).Error
+ return repo, db.WithContext(ctx).Create(repo).Error
}
var _ errutil.NotFound = (*ErrRepoNotExist)(nil)
@@ -130,9 +131,12 @@ func (ErrRepoNotExist) NotFound() bool {
return true
}
-func (db *repos) GetByName(ownerID int64, name string) (*Repository, error) {
+func (db *repos) GetByName(ctx context.Context, ownerID int64, name string) (*Repository, error) {
repo := new(Repository)
- err := db.Where("owner_id = ? AND lower_name = ?", ownerID, strings.ToLower(name)).First(repo).Error
+ err := db.WithContext(ctx).
+ Where("owner_id = ? AND lower_name = ?", ownerID, strings.ToLower(name)).
+ First(repo).
+ Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, ErrRepoNotExist{args: map[string]interface{}{"ownerID": ownerID, "name": name}}