Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
555096102a
|
|||
d76d7b5cb9
|
|||
6622c9003d
|
|||
b02e1d2e85
|
@@ -10,6 +10,8 @@ import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type EntityID = any
|
||||
|
||||
type fullTypeRef[TData any] struct {
|
||||
IsPointer bool
|
||||
Kind reflect.Kind
|
||||
@@ -40,7 +42,7 @@ func (c *Coll[TData]) Drop(ctx context.Context) error {
|
||||
return c.coll.Drop(ctx)
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) FindOne(ctx context.Context, filter any) (TData, error) {
|
||||
func (c *Coll[TData]) FindOne(ctx context.Context, filter bson.M) (TData, error) {
|
||||
var res TData
|
||||
|
||||
err := c.coll.FindOne(ctx, filter).Decode(&res)
|
||||
@@ -51,7 +53,7 @@ func (c *Coll[TData]) FindOne(ctx context.Context, filter any) (TData, error) {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) FindOneOpt(ctx context.Context, filter any) (*TData, error) {
|
||||
func (c *Coll[TData]) FindOneOpt(ctx context.Context, filter bson.M) (*TData, error) {
|
||||
var res TData
|
||||
|
||||
err := c.coll.FindOne(ctx, filter).Decode(&res)
|
||||
@@ -65,7 +67,7 @@ func (c *Coll[TData]) FindOneOpt(ctx context.Context, filter any) (*TData, error
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) FindOneByID(ctx context.Context, id any) (TData, error) {
|
||||
func (c *Coll[TData]) FindOneByID(ctx context.Context, id EntityID) (TData, error) {
|
||||
var res TData
|
||||
|
||||
err := c.coll.FindOne(ctx, bson.M{"_id": id}).Decode(&res)
|
||||
@@ -76,7 +78,7 @@ func (c *Coll[TData]) FindOneByID(ctx context.Context, id any) (TData, error) {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) FindOneOptByID(ctx context.Context, id any) (*TData, error) {
|
||||
func (c *Coll[TData]) FindOneOptByID(ctx context.Context, id EntityID) (*TData, error) {
|
||||
var res TData
|
||||
|
||||
err := c.coll.FindOne(ctx, bson.M{"_id": id}).Decode(&res)
|
||||
@@ -90,7 +92,18 @@ func (c *Coll[TData]) FindOneOptByID(ctx context.Context, id any) (*TData, error
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) Find(ctx context.Context, filter any, opts ...*options.FindOptions) ([]TData, error) {
|
||||
func (c *Coll[TData]) FindOneAndUpdate(ctx context.Context, filterQuery bson.M, updateQuery bson.M) (TData, error) {
|
||||
var res TData
|
||||
|
||||
err := c.coll.FindOneAndUpdate(ctx, filterQuery, updateQuery, options.FindOneAndUpdate().SetReturnDocument(options.After)).Decode(&res)
|
||||
if err != nil {
|
||||
return *new(TData), err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) Find(ctx context.Context, filter bson.M, opts ...*options.FindOptions) ([]TData, error) {
|
||||
cursor, err := c.coll.Find(ctx, filter, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -120,7 +133,7 @@ func (c *Coll[TData]) Aggregate(ctx context.Context, pipeline mongo.Pipeline, op
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) ReplaceOne(ctx context.Context, id any, value TData) error {
|
||||
func (c *Coll[TData]) ReplaceOne(ctx context.Context, id EntityID, value TData) error {
|
||||
_, err := c.coll.UpdateOne(ctx, bson.M{"_id": id}, value)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -129,7 +142,16 @@ func (c *Coll[TData]) ReplaceOne(ctx context.Context, id any, value TData) error
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) UpdateOne(ctx context.Context, id any, updateQuery any) error {
|
||||
func (c *Coll[TData]) UpdateOne(ctx context.Context, filterQuery bson.M, updateQuery bson.M) error {
|
||||
_, err := c.coll.UpdateOne(ctx, filterQuery, updateQuery)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) UpdateOneByID(ctx context.Context, id EntityID, updateQuery bson.M) error {
|
||||
_, err := c.coll.UpdateOne(ctx, bson.M{"_id": id}, updateQuery)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -138,23 +160,7 @@ func (c *Coll[TData]) UpdateOne(ctx context.Context, id any, updateQuery any) er
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) UpdateOneAndReturn(ctx context.Context, id any, updateQuery any) (TData, error) {
|
||||
_, err := c.coll.UpdateOne(ctx, bson.M{"_id": id}, updateQuery)
|
||||
if err != nil {
|
||||
return *new(TData), err
|
||||
}
|
||||
|
||||
var res TData
|
||||
|
||||
err = c.coll.FindOne(ctx, bson.M{"_id": id}).Decode(&res)
|
||||
if err != nil {
|
||||
return *new(TData), err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) DeleteOne(ctx context.Context, id any) error {
|
||||
func (c *Coll[TData]) DeleteOne(ctx context.Context, id EntityID) error {
|
||||
_, err := c.coll.DeleteOne(ctx, bson.M{"_id": id})
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -163,6 +169,15 @@ func (c *Coll[TData]) DeleteOne(ctx context.Context, id any) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) DeleteMany(ctx context.Context, filterQuery bson.M) (*mongo.DeleteResult, error) {
|
||||
res, err := c.coll.DeleteMany(ctx, filterQuery)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) List(ctx context.Context, filter ct.Filter, pageSize *int, inTok ct.CursorToken) ([]TData, ct.CursorToken, error) {
|
||||
if inTok.Mode == ct.CTMEnd {
|
||||
return make([]TData, 0), ct.End(), nil
|
||||
@@ -205,6 +220,32 @@ func (c *Coll[TData]) List(ctx context.Context, filter ct.Filter, pageSize *int,
|
||||
return entities, nextToken, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) Count(ctx context.Context, filter ct.Filter) (int64, error) {
|
||||
pipeline := filter.FilterQuery()
|
||||
|
||||
pipeline = append(pipeline, bson.D{{Key: "$count", Value: "c"}})
|
||||
|
||||
cursor, err := c.coll.Aggregate(ctx, pipeline)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
type res struct {
|
||||
Count int64 `bson:"c"`
|
||||
}
|
||||
|
||||
if cursor.Next(ctx) {
|
||||
v := res{}
|
||||
err = cursor.Decode(&v)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return v.Count, nil
|
||||
}
|
||||
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (c *Coll[TData]) createToken(fieldPrimary string, dirPrimary ct.SortDirection, fieldSecondary *string, dirSecondary *ct.SortDirection, lastEntity TData, pageSize *int) (ct.CursorToken, error) {
|
||||
|
||||
valuePrimary, err := c.getFieldValueAsTokenString(lastEntity, fieldPrimary)
|
Reference in New Issue
Block a user