app-cloudep-member-server/internal/model/mongo/auto_id_model.go

47 lines
1.2 KiB
Go

package model
import (
"context"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/monc"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
var _ AutoIdModel = (*customAutoIdModel)(nil)
type (
// AutoIdModel is an interface to be customized, add more methods here,
// and implement the added methods in customAutoIdModel.
AutoIdModel interface {
autoIdModel
Inc(ctx context.Context, data *AutoId) error
}
customAutoIdModel struct {
*defaultAutoIdModel
}
)
// NewAutoIdModel returns a model for the mongo.
func NewAutoIdModel(url, db, collection string, c cache.CacheConf) AutoIdModel {
conn := monc.MustNewModel(url, db, collection, c)
return &customAutoIdModel{
defaultAutoIdModel: newDefaultAutoIdModel(conn),
}
}
func (m *customAutoIdModel) Inc(ctx context.Context, data *AutoId) error {
filter := bson.M{"admin": "auto_id"}
update := bson.M{"$inc": bson.M{"counter": 1}}
key := prefixAutoIdCacheKey + "count"
err := m.conn.FindOneAndUpdate(ctx, key, data, filter, update,
options.FindOneAndUpdate().SetUpsert(true),
options.FindOneAndUpdate().SetReturnDocument(options.After),
)
return err
}