@@ -0,0 +1,125 @@
|
||||
package officialWebsitemod
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func notDeletedFilter() M {
|
||||
return M{
|
||||
"$or": bson.A{
|
||||
M{"deletedAt": M{"$exists": false}},
|
||||
M{"deletedAt": nil},
|
||||
M{"deletedAt": time.Time{}},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func withNotDeletedFilter(filter M) M {
|
||||
if filter == nil {
|
||||
return notDeletedFilter()
|
||||
} else {
|
||||
copied := M{}
|
||||
for k, v := range filter {
|
||||
copied[k] = v
|
||||
}
|
||||
filter = copied
|
||||
}
|
||||
|
||||
if _, ok := filter["deletedAt"]; ok {
|
||||
return filter
|
||||
}
|
||||
|
||||
return M{
|
||||
"$and": bson.A{
|
||||
filter,
|
||||
notDeletedFilter(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func findOneByTable(table string, out interface{}, filter M) error {
|
||||
filter = withNotDeletedFilter(filter)
|
||||
return coll(nil, table).FindOne(out, filter)
|
||||
}
|
||||
|
||||
func findManyByTable(table string, out interface{}, filter M, opts ...*options.FindOptions) error {
|
||||
filter = withNotDeletedFilter(filter)
|
||||
return coll(nil, table).Find(out, filter, opts...)
|
||||
}
|
||||
|
||||
func countByTable(table string, filter M) (int64, error) {
|
||||
filter = withNotDeletedFilter(filter)
|
||||
return coll(nil, table).Count(filter)
|
||||
}
|
||||
|
||||
func createByTable(table string, doc interface{}) (primitive.ObjectID, error) {
|
||||
res, err := coll(nil, table).InsertOne(doc)
|
||||
if err != nil {
|
||||
return primitive.NilObjectID, err
|
||||
}
|
||||
id, ok := res.InsertedID.(primitive.ObjectID)
|
||||
if !ok {
|
||||
return primitive.NilObjectID, errors.New("inserted id is not ObjectID")
|
||||
}
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func createManyByTable(table string, docs []Video) ([]primitive.ObjectID, error) {
|
||||
insertIds, err := coll(nil, table).InsertMany(docs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var ids []primitive.ObjectID
|
||||
for _, v := range insertIds.InsertedIDs {
|
||||
id, ok := v.(primitive.ObjectID)
|
||||
if !ok {
|
||||
return nil, errors.New("inserted id is not ObjectID")
|
||||
}
|
||||
ids = append(ids, id)
|
||||
}
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
func updateByTable(table string, filter M, update M) (int64, error) {
|
||||
if len(filter) == 0 {
|
||||
return 0, errors.New("update filter is empty")
|
||||
}
|
||||
if len(update) == 0 {
|
||||
return 0, errors.New("update doc is empty")
|
||||
}
|
||||
res, err := coll(nil, table).UpdateOne(filter, update)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return res.ModifiedCount, nil
|
||||
}
|
||||
|
||||
func updateManyByTable(table string, filter M, update M) (int64, error) {
|
||||
if len(filter) == 0 {
|
||||
return 0, errors.New("update filter is empty")
|
||||
}
|
||||
if len(update) == 0 {
|
||||
return 0, errors.New("update doc is empty")
|
||||
}
|
||||
res, err := coll(nil, table).UpdateMany(filter, update)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return res.ModifiedCount, nil
|
||||
}
|
||||
|
||||
func deleteByTable(table string, filter M) (int64, error) {
|
||||
if len(filter) == 0 {
|
||||
return 0, errors.New("delete filter is empty")
|
||||
}
|
||||
res, err := coll(nil, table).DeleteMany(filter)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return res.DeletedCount, nil
|
||||
}
|
||||
Reference in New Issue
Block a user