diff --git a/backend/gestion/db/db_notifications.go b/backend/gestion/db/db_notifications.go index 05165ab7..45dc0b55 100644 --- a/backend/gestion/db/db_notifications.go +++ b/backend/gestion/db/db_notifications.go @@ -24,7 +24,7 @@ func (d *Database) NotifyClient(username string, commandID int, notifType, messa Redis.LPush(RedisCtx, notifKey, notifJSON) Redis.Expire(RedisCtx, notifKey, 7*24*time.Hour) - if services.TelegramBot != nil && services.TelegramBot.IsConfigured() { + if services.TelegramBot != nil && services.TelegramBot.IsConfigured() && services.TelegramBot.IsNotificationsEnabled() { if chatID, ok, err := d.GetClientTelegramChatID(username); err == nil && ok { go services.TelegramBot.SendMessage(chatID, fmt.Sprintf("🔔 Notification\n\n%s", message)) } @@ -50,7 +50,7 @@ func (d *Database) NotifyLivreur(username string, commandID int, notifType, mess Redis.LPush(RedisCtx, notifKey, notifJSON) Redis.Expire(RedisCtx, notifKey, 7*24*time.Hour) - if services.TelegramBot != nil && services.TelegramBot.IsConfigured() { + if services.TelegramBot != nil && services.TelegramBot.IsConfigured() && services.TelegramBot.IsNotificationsEnabled() { if chatID, ok, err := d.GetUserTelegramChatID(username); err == nil && ok { go services.TelegramBot.SendMessage(chatID, fmt.Sprintf("🔔 Notification\n\n%s", message)) } @@ -87,7 +87,7 @@ func (d *Database) NotifyAllAdminCabine(commandID int, clientUsername, deliveryA Redis.LPush(RedisCtx, notifKey, notifJSON) Redis.Expire(RedisCtx, notifKey, 7*24*time.Hour) - if services.TelegramBot != nil && services.TelegramBot.IsConfigured() { + if services.TelegramBot != nil && services.TelegramBot.IsConfigured() && services.TelegramBot.IsNotificationsEnabled() { if chatID, ok, err := d.GetUserTelegramChatID(u.Username); err == nil && ok { capturedChatID := chatID capturedMsg := msg @@ -126,7 +126,7 @@ func (d *Database) NotifyAllAdminCabineAlert(alertID int, livreurUsername, alert Redis.LPush(RedisCtx, notifKey, notifJSON) Redis.Expire(RedisCtx, notifKey, 7*24*time.Hour) - if services.TelegramBot != nil && services.TelegramBot.IsConfigured() { + if services.TelegramBot != nil && services.TelegramBot.IsConfigured() && services.TelegramBot.IsNotificationsEnabled() { if chatID, ok, err := d.GetUserTelegramChatID(u.Username); err == nil && ok { capturedChatID := chatID capturedBody := body diff --git a/backend/gestion/db/db_settings.go b/backend/gestion/db/db_settings.go index 41fdaaa1..508df618 100644 --- a/backend/gestion/db/db_settings.go +++ b/backend/gestion/db/db_settings.go @@ -142,6 +142,8 @@ func (d *Database) GetSettings() (models.AppSettings, error) { settings.TelegramBotToken = row.Value case "telegram_bot_username": settings.TelegramBotUsername = row.Value + case "telegram_notifications_enabled": + settings.TelegramNotificationsEnabled = row.Value == "true" case "delivery_mode": var mode models.DeliveryModeConfig if err := json.Unmarshal([]byte(row.Value), &mode); err == nil { @@ -223,6 +225,7 @@ func (d *Database) UpdateSettings(s models.AppSettings) error { {"postal_zones", string(zonesJSON)}, {"telegram_bot_token", s.TelegramBotToken}, {"telegram_bot_username", s.TelegramBotUsername}, + {"telegram_notifications_enabled", boolStr(s.TelegramNotificationsEnabled)}, {"delivery_mode", string(deliveryModeJSON)}, } diff --git a/backend/gestion/handlers/settings.go b/backend/gestion/handlers/settings.go index f4652039..c78a1aaf 100644 --- a/backend/gestion/handlers/settings.go +++ b/backend/gestion/handlers/settings.go @@ -40,9 +40,10 @@ func GetPublicSettings(c *gin.Context) { "referral_enabled": settings.ReferralEnabled, "referral_amount": settings.ReferralAmount, "delivery_schedule": settings.DeliverySchedule, - "crypto_payment_enabled": settings.CryptoPaymentEnabled, - "crypto_only": settings.CryptoOnly, - "nowpayments_currencies": settings.NowPaymentsCurrencies, + "crypto_payment_enabled": settings.CryptoPaymentEnabled, + "crypto_only": settings.CryptoOnly, + "nowpayments_currencies": settings.NowPaymentsCurrencies, + "telegram_notifications_enabled": settings.TelegramNotificationsEnabled, }) } @@ -79,6 +80,7 @@ func UpdateSettings(c *gin.Context) { // Recharger le service Telegram si le token/username a changé if services.TelegramBot != nil { services.TelegramBot.Reload(req.TelegramBotToken, req.TelegramBotUsername) + services.TelegramBot.SetNotificationsEnabled(req.TelegramNotificationsEnabled) if req.TelegramBotToken != "" { log.Printf("✅ [SETTINGS] Service Telegram rechargé (username: %s)", req.TelegramBotUsername) if webhookURL := os.Getenv("TELEGRAM_WEBHOOK_URL"); webhookURL != "" { diff --git a/backend/gestion/main.go b/backend/gestion/main.go index 346f0704..9bce433a 100644 --- a/backend/gestion/main.go +++ b/backend/gestion/main.go @@ -58,6 +58,7 @@ func main() { if dbSettings, err := database.GetSettings(); err == nil { telegramService.Reload(dbSettings.TelegramBotToken, dbSettings.TelegramBotUsername) + telegramService.SetNotificationsEnabled(dbSettings.TelegramNotificationsEnabled) if dbSettings.TelegramBotToken != "" { log.Printf("✅ [TELEGRAM] Config chargée depuis la DB (username: %s)", dbSettings.TelegramBotUsername) if webhookURL := os.Getenv("TELEGRAM_WEBHOOK_URL"); webhookURL != "" { diff --git a/backend/gestion/models/settings.go b/backend/gestion/models/settings.go index d714b40b..933a601d 100644 --- a/backend/gestion/models/settings.go +++ b/backend/gestion/models/settings.go @@ -75,7 +75,8 @@ type AppSettings struct { NowPaymentsCurrencies []string `json:"nowpayments_currencies"` // cryptos acceptées (ex: ["btc","eth","ltc"]) DeliverySchedule DeliverySchedule `json:"delivery_schedule"` // horaires de livraison par jour PostalZones []PostalZone `json:"postal_zones"` // zones de livraison avec minimum de commande - TelegramBotToken string `json:"telegram_bot_token"` // token du bot Telegram (BotFather) - TelegramBotUsername string `json:"telegram_bot_username"` // username du bot (sans @) - DeliveryMode DeliveryModeConfig `json:"delivery_mode"` // mode d'assignation des livreurs + TelegramBotToken string `json:"telegram_bot_token"` // token du bot Telegram (BotFather) + TelegramBotUsername string `json:"telegram_bot_username"` // username du bot (sans @) + TelegramNotificationsEnabled bool `json:"telegram_notifications_enabled"` // activer/désactiver les notifications Telegram + DeliveryMode DeliveryModeConfig `json:"delivery_mode"` // mode d'assignation des livreurs } diff --git a/backend/gestion/services/telegram.go b/backend/gestion/services/telegram.go index f3a0042d..dd157f75 100644 --- a/backend/gestion/services/telegram.go +++ b/backend/gestion/services/telegram.go @@ -14,9 +14,10 @@ import ( var TelegramBot *TelegramService type TelegramService struct { - botToken string - webhookSecret string - BotUsername string + botToken string + webhookSecret string + BotUsername string + notificationsEnabled bool } func NewTelegramService() *TelegramService { @@ -33,6 +34,14 @@ func (t *TelegramService) IsConfigured() bool { return t.botToken != "" } +func (t *TelegramService) IsNotificationsEnabled() bool { + return t.notificationsEnabled +} + +func (t *TelegramService) SetNotificationsEnabled(enabled bool) { + t.notificationsEnabled = enabled +} + // Reload met à jour le token et le username (appelé après UpdateSettings) func (t *TelegramService) Reload(token, username string) { if token != "" {