diff options
Diffstat (limited to 'internal/db/repos.go')
-rw-r--r-- | internal/db/repos.go | 26 |
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}} |