Skip to content

Commit

Permalink
Merge pull request #197 from tq0fqeu/master
Browse files Browse the repository at this point in the history
feat: add the context parameter for middleware.Do
  • Loading branch information
jiangz222 authored Sep 3, 2021
2 parents b4a038c + 2b6b3ea commit 25bdc11
Show file tree
Hide file tree
Showing 13 changed files with 342 additions and 215 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,11 @@ Or
Name string `bson:"name"`
Age int `bson:"age"`
}
func (u *User) BeforeInsert() error {
func (u *User) BeforeInsert(ctx context.Context) error {
fmt.Println("before insert called")
return nil
}
func (u *User) AfterInsert() error {
func (u *User) AfterInsert(ctx context.Context) error {
fmt.Println("after insert called")
return nil
}
Expand Down Expand Up @@ -321,7 +321,7 @@ Or
- Implement following method:

```go
func Do(doc interface{}, opType operator.OpType, opts ...interface{}) error{
func Do(ctx context.Context, doc interface{}, opType operator.OpType, opts ...interface{}) error{
// do anything
}
```
Expand Down
6 changes: 3 additions & 3 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,11 @@ go get github.com/qiniu/qmgo
Name string `bson:"name"`
Age int `bson:"age"`
}
func (u *User) BeforeInsert() error {
func (u *User) BeforeInsert(ctx context.Context) error {
fmt.Println("before insert called")
return nil
}
func (u *User) AfterInsert() error {
func (u *User) AfterInsert(ctx context.Context) error {
fmt.Println("after insert called")
return nil
}
Expand Down Expand Up @@ -321,7 +321,7 @@ go get github.com/qiniu/qmgo

- 实现以下方法
```go
func Do(doc interface{}, opType operator.OpType, opts ...interface{}) error{
func Do(ctx context.Context, doc interface{}, opType operator.OpType, opts ...interface{}) error{
// do anything
}
```
Expand Down
53 changes: 27 additions & 26 deletions collection.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func (c *Collection) InsertOne(ctx context.Context, doc interface{}, opts ...opt
h = opts[0].InsertHook
}
}
if err = middleware.Do(doc, operator.BeforeInsert, h); err != nil {
if err = middleware.Do(ctx, doc, operator.BeforeInsert, h); err != nil {
return
}
res, err := c.collection.InsertOne(ctx, doc, insertOneOpts)
Expand All @@ -71,7 +71,7 @@ func (c *Collection) InsertOne(ctx context.Context, doc interface{}, opts ...opt
if err != nil {
return
}
if err = middleware.Do(doc, operator.AfterInsert, h); err != nil {
if err = middleware.Do(ctx, doc, operator.AfterInsert, h); err != nil {
return
}
return
Expand All @@ -91,7 +91,7 @@ func (c *Collection) InsertMany(ctx context.Context, docs interface{}, opts ...o
h = opts[0].InsertHook
}
}
if err = middleware.Do(docs, operator.BeforeInsert, h); err != nil {
if err = middleware.Do(ctx, docs, operator.BeforeInsert, h); err != nil {
return
}
sDocs := interfaceToSliceInterface(docs)
Expand All @@ -106,7 +106,7 @@ func (c *Collection) InsertMany(ctx context.Context, docs interface{}, opts ...o
if err != nil {
return
}
if err = middleware.Do(docs, operator.AfterInsert, h); err != nil {
if err = middleware.Do(ctx, docs, operator.AfterInsert, h); err != nil {
return
}
return
Expand All @@ -121,7 +121,7 @@ func interfaceToSliceInterface(docs interface{}) []interface{} {
if s.Len() == 0 {
return nil
}
sDocs := []interface{}{}
var sDocs []interface{}
for i := 0; i < s.Len(); i++ {
sDocs = append(sDocs, s.Index(i).Interface())
}
Expand All @@ -132,8 +132,8 @@ func interfaceToSliceInterface(docs interface{}) []interface{} {
// The replacement parameter must be a document that will be used to replace the selected document. It cannot be nil
// and cannot contain any update operators
// Reference: https://docs.mongodb.com/manual/reference/operator/update/
// If replacement has "_id" field and the document is exist, please initial it with existing id(even with Qmgo default field feature).
// Otherwise "the (immutable) field '_id' altered" error happens.
// If replacement has "_id" field and the document is existed, please initial it with existing id(even with Qmgo default field feature).
// Otherwise, "the (immutable) field '_id' altered" error happens.
func (c *Collection) Upsert(ctx context.Context, filter interface{}, replacement interface{}, opts ...opts.UpsertOptions) (result *UpdateResult, err error) {
h := replacement
officialOpts := options.Replace().SetUpsert(true)
Expand All @@ -147,7 +147,7 @@ func (c *Collection) Upsert(ctx context.Context, filter interface{}, replacement
h = opts[0].UpsertHook
}
}
if err = middleware.Do(replacement, operator.BeforeUpsert, h); err != nil {
if err = middleware.Do(ctx, replacement, operator.BeforeUpsert, h); err != nil {
return
}

Expand All @@ -159,7 +159,7 @@ func (c *Collection) Upsert(ctx context.Context, filter interface{}, replacement
if err != nil {
return
}
if err = middleware.Do(replacement, operator.AfterUpsert, h); err != nil {
if err = middleware.Do(ctx, replacement, operator.AfterUpsert, h); err != nil {
return
}
return
Expand All @@ -182,7 +182,7 @@ func (c *Collection) UpsertId(ctx context.Context, id interface{}, replacement i
h = opts[0].UpsertHook
}
}
if err = middleware.Do(replacement, operator.BeforeUpsert, h); err != nil {
if err = middleware.Do(ctx, replacement, operator.BeforeUpsert, h); err != nil {
return
}
res, err := c.collection.ReplaceOne(ctx, bson.M{"_id": id}, replacement, officialOpts)
Expand All @@ -192,7 +192,7 @@ func (c *Collection) UpsertId(ctx context.Context, id interface{}, replacement i
if err != nil {
return
}
if err = middleware.Do(replacement, operator.AfterUpsert, h); err != nil {
if err = middleware.Do(ctx, replacement, operator.AfterUpsert, h); err != nil {
return
}
return
Expand All @@ -208,7 +208,7 @@ func (c *Collection) UpdateOne(ctx context.Context, filter interface{}, update i
updateOpts = opts[0].UpdateOptions
}
if opts[0].UpdateHook != nil {
if err = middleware.Do(opts[0].UpdateHook, operator.BeforeUpdate); err != nil {
if err = middleware.Do(ctx, opts[0].UpdateHook, operator.BeforeUpdate); err != nil {
return
}
}
Expand All @@ -222,7 +222,7 @@ func (c *Collection) UpdateOne(ctx context.Context, filter interface{}, update i
return err
}
if len(opts) > 0 && opts[0].UpdateHook != nil {
if err = middleware.Do(opts[0].UpdateHook, operator.AfterUpdate); err != nil {
if err = middleware.Do(ctx, opts[0].UpdateHook, operator.AfterUpdate); err != nil {
return
}
}
Expand All @@ -239,7 +239,7 @@ func (c *Collection) UpdateId(ctx context.Context, id interface{}, update interf
updateOpts = opts[0].UpdateOptions
}
if opts[0].UpdateHook != nil {
if err = middleware.Do(opts[0].UpdateHook, operator.BeforeUpdate); err != nil {
if err = middleware.Do(ctx, opts[0].UpdateHook, operator.BeforeUpdate); err != nil {
return
}
}
Expand All @@ -253,7 +253,7 @@ func (c *Collection) UpdateId(ctx context.Context, id interface{}, update interf
return err
}
if len(opts) > 0 && opts[0].UpdateHook != nil {
if err = middleware.Do(opts[0].UpdateHook, operator.AfterUpdate); err != nil {
if err = middleware.Do(ctx, opts[0].UpdateHook, operator.AfterUpdate); err != nil {
return
}
}
Expand All @@ -270,7 +270,7 @@ func (c *Collection) UpdateAll(ctx context.Context, filter interface{}, update i
updateOpts = opts[0].UpdateOptions
}
if opts[0].UpdateHook != nil {
if err = middleware.Do(opts[0].UpdateHook, operator.BeforeUpdate); err != nil {
if err = middleware.Do(ctx, opts[0].UpdateHook, operator.BeforeUpdate); err != nil {
return
}
}
Expand All @@ -283,7 +283,7 @@ func (c *Collection) UpdateAll(ctx context.Context, filter interface{}, update i
return
}
if len(opts) > 0 && opts[0].UpdateHook != nil {
if err = middleware.Do(opts[0].UpdateHook, operator.AfterUpdate); err != nil {
if err = middleware.Do(ctx, opts[0].UpdateHook, operator.AfterUpdate); err != nil {
return
}
}
Expand All @@ -305,7 +305,7 @@ func (c *Collection) ReplaceOne(ctx context.Context, filter interface{}, doc int
h = opts[0].UpdateHook
}
}
if err = middleware.Do(doc, operator.BeforeReplace, h); err != nil {
if err = middleware.Do(ctx, doc, operator.BeforeReplace, h); err != nil {
return
}
res, err := c.collection.ReplaceOne(ctx, filter, doc, replaceOpts)
Expand All @@ -315,7 +315,7 @@ func (c *Collection) ReplaceOne(ctx context.Context, filter interface{}, doc int
if err != nil {
return err
}
if err = middleware.Do(doc, operator.AfterReplace, h); err != nil {
if err = middleware.Do(ctx, doc, operator.AfterReplace, h); err != nil {
return
}

Expand All @@ -332,7 +332,7 @@ func (c *Collection) Remove(ctx context.Context, filter interface{}, opts ...opt
deleteOptions = opts[0].DeleteOptions
}
if opts[0].RemoveHook != nil {
if err = middleware.Do(opts[0].RemoveHook, operator.BeforeRemove); err != nil {
if err = middleware.Do(ctx, opts[0].RemoveHook, operator.BeforeRemove); err != nil {
return err
}
}
Expand All @@ -345,7 +345,7 @@ func (c *Collection) Remove(ctx context.Context, filter interface{}, opts ...opt
return err
}
if len(opts) > 0 && opts[0].RemoveHook != nil {
if err = middleware.Do(opts[0].RemoveHook, operator.AfterRemove); err != nil {
if err = middleware.Do(ctx, opts[0].RemoveHook, operator.AfterRemove); err != nil {
return err
}
}
Expand All @@ -360,7 +360,7 @@ func (c *Collection) RemoveId(ctx context.Context, id interface{}, opts ...opts.
deleteOptions = opts[0].DeleteOptions
}
if opts[0].RemoveHook != nil {
if err = middleware.Do(opts[0].RemoveHook, operator.BeforeRemove); err != nil {
if err = middleware.Do(ctx, opts[0].RemoveHook, operator.BeforeRemove); err != nil {
return err
}
}
Expand All @@ -374,7 +374,7 @@ func (c *Collection) RemoveId(ctx context.Context, id interface{}, opts ...opts.
}

if len(opts) > 0 && opts[0].RemoveHook != nil {
if err = middleware.Do(opts[0].RemoveHook, operator.AfterRemove); err != nil {
if err = middleware.Do(ctx, opts[0].RemoveHook, operator.AfterRemove); err != nil {
return err
}
}
Expand All @@ -391,7 +391,7 @@ func (c *Collection) RemoveAll(ctx context.Context, filter interface{}, opts ...
deleteOptions = opts[0].DeleteOptions
}
if opts[0].RemoveHook != nil {
if err = middleware.Do(opts[0].RemoveHook, operator.BeforeRemove); err != nil {
if err = middleware.Do(ctx, opts[0].RemoveHook, operator.BeforeRemove); err != nil {
return
}
}
Expand All @@ -404,7 +404,7 @@ func (c *Collection) RemoveAll(ctx context.Context, filter interface{}, opts ...
return
}
if len(opts) > 0 && opts[0].RemoveHook != nil {
if err = middleware.Do(opts[0].RemoveHook, operator.AfterRemove); err != nil {
if err = middleware.Do(ctx, opts[0].RemoveHook, operator.AfterRemove); err != nil {
return
}
}
Expand Down Expand Up @@ -467,7 +467,8 @@ func (c *Collection) ensureIndex(ctx context.Context, indexes []opts.IndexModel)
// if uniques/indexes is []string{"name"}, means create index "name"
// if uniques/indexes is []string{"name,-age","uid"} means create Compound indexes: name and -age, then create one index: uid
func (c *Collection) EnsureIndexes(ctx context.Context, uniques []string, indexes []string) (err error) {
uniqueModel, indexesModel := []opts.IndexModel{}, []opts.IndexModel{}
var uniqueModel []opts.IndexModel
var indexesModel []opts.IndexModel
for _, v := range uniques {
vv := strings.Split(v, ",")
model := opts.IndexModel{Key: vv, Unique: true}
Expand Down
3 changes: 2 additions & 1 deletion field/field.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
package field

import (
"context"
"reflect"
"time"

Expand All @@ -36,7 +37,7 @@ var fieldHandler = map[operator.OpType]func(doc interface{}) error{

// Do call the specific method to handle field based on fType
// Don't use opts here
func Do(doc interface{}, opType operator.OpType, opts ...interface{}) error {
func Do(ctx context.Context, doc interface{}, opType operator.OpType, opts ...interface{}) error {
to := reflect.TypeOf(doc)
if to == nil {
return nil
Expand Down
Loading

0 comments on commit 25bdc11

Please sign in to comment.