Здравствуйте, я использую библиотеку
telebot вместе с MongoDB
Через GetClient() и GetBot() я общаюсь с одноименными структурами
type client struct {
client *mongo.Client // установливаю соединение и не закрываю через другую функцию
}
Соединение с базой создается в самом начале и не закрывается.
func main() {
telegram.InitBot() // создаю соединение с апи бота
storage.InitClient() // создаю соединение с mongodb и добавляю клиент в структуру
telegram.GetBot().Bot.Handle("/start", telegram.GetBot().HandleStart)
}
Функция ниже выполняется, по сообщению пользователя
/start
func (b *bot) HandleStart(message *tb.Message) {
b.Bot.Send(message.Sender, "Hello")
storage.GetClient().CreateUserDocument(message.Sender.ID) // создает документ в бд, если еще не существует с таким id пользователя
}
Так я создаю документ с начальной структурой и пользовательским id, если еще с таким id не создано:
func (c client) CreateUserDocument(chatID int) {
coll := c.client.Database("db").Collection("users")
count, _ := coll.CountDocuments(context.TODO(), bson.D{{"chatID", chatID}})
if count != 1 {
document := bson.D{{"chatID", chatID}, {"expenses", bson.A{}}, {"income", bson.A{}}}
coll.InsertOne(context.TODO(), document)
}
}
Как мне оптимизировать этот код и где добавить асинхронность? Это не весь код проэкта, на другие комманды бота делаются другие запросы в бд.