github.com/hungdoo/bot@v0.0.0-20240325145135-dd1f386f7b81/src/packages/db/mongodb.go (about) 1 package db 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/hungdoo/bot/src/packages/dotenv" 8 "github.com/hungdoo/bot/src/packages/log" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 var _db *MongoDB 14 15 type MongoDB struct { 16 IsTestEnv bool 17 Client *mongo.Client 18 } 19 20 func newMongoDB() (*MongoDB, error) { 21 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) 22 defer cancel() 23 // Set client options 24 clientOptions := options.Client().ApplyURI("mongodb://" + dotenv.GetEnv("DBHost") + ":" + dotenv.GetEnv("DBPort")) 25 26 // Connect to MongoDB 27 client, err := mongo.Connect(ctx, clientOptions) 28 if err != nil { 29 return nil, err 30 } 31 32 // Check the connection 33 err = client.Ping(ctx, nil) 34 if err != nil { 35 return nil, err 36 } 37 38 log.GeneralLogger.Printf("MongoDB Connected to: %s\n", clientOptions.GetURI()) 39 40 var isTestEnv bool 41 env := dotenv.GetEnv("DBEnv") 42 if env == "test" { 43 isTestEnv = true 44 } 45 46 return &MongoDB{Client: client, IsTestEnv: isTestEnv}, nil 47 } 48 49 func (db *MongoDB) Close() { 50 log.GeneralLogger.Println("MongoDB Closed") 51 db.Client.Disconnect(context.TODO()) 52 } 53 func (db *MongoDB) GetCollection(coll string) *mongo.Collection { 54 return db.Client.Database(dotenv.GetEnv("DBName")).Collection(coll) 55 } 56 57 // Manipulate 58 59 func (db *MongoDB) Insert(coll string, data interface{}) error { 60 collection := db.GetCollection(coll) 61 _, err := collection.InsertOne(context.TODO(), data) 62 return err 63 } 64 65 func (db *MongoDB) Update(coll string, filter interface{}, update interface{}) error { 66 collection := db.GetCollection(coll) 67 _, err := collection.UpdateMany(context.TODO(), filter, update) 68 return err 69 } 70 71 func (db *MongoDB) Delete(coll string, query interface{}) error { 72 collection := db.GetCollection(coll) 73 _, err := collection.DeleteMany(context.TODO(), query) 74 return err 75 } 76 77 // Query 78 79 func (db *MongoDB) Find(coll string, query interface{}) (*mongo.Cursor, error) { 80 collection := db.GetCollection(coll) 81 return collection.Find(context.TODO(), query) 82 } 83 84 func GetDb() *MongoDB { 85 if _db != nil { 86 return _db 87 } 88 var err error 89 _db, err = newMongoDB() 90 if err != nil { 91 log.ErrorLogger.Fatal(err) 92 } 93 94 return _db 95 }