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 }