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  }