126 lines
2.8 KiB
Go
126 lines
2.8 KiB
Go
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
|
|
}
|