Aller au contenu principal

Guide de Nettoyage Optionnel du Code Gmail

Ce guide décrit les étapes optionnelles pour nettoyer complètement le code Gmail de l'application. Ces modifications ne sont pas urgentes car le code Gmail n'est plus utilisé, mais elles peuvent être effectuées pour simplifier le codebase.

⚠️ Important

  • Ces modifications sont optionnelles - l'application fonctionne déjà sans elles
  • Le code Gmail est déjà désactivé et ne sera plus utilisé
  • Ces modifications peuvent être faites progressivement, sans urgence

Étape 1 : Marquer GmailService comme Deprecated

1.1 Ajouter la dépréciation au service

Fichier: backend/src/quotes-invoices/gmail.service.ts

/**
* @deprecated Gmail API is no longer used. Email sending is handled via SMTP.
* This service is kept for backward compatibility but will be removed in a future version.
*
* Service for sending emails via Gmail API
*/
@Injectable()
export class GmailService implements IGmailService {
// ... existing code ...
}

1.2 Ajouter la dépréciation à l'interface

Fichier: backend/src/quotes-invoices/gmail.interface.ts

/**
* @deprecated Gmail API is no longer used. Email sending is handled via SMTP.
* This interface is kept for backward compatibility but will be removed in a future version.
*/
export interface IGmailService {
// ... existing code ...
}

Étape 2 : Retirer les Injections GmailService (Optionnel)

Les services utilisent déjà @Optional() pour GmailService, donc ils fonctionnent même si le service n'est pas disponible. Vous pouvez :

Option A : Garder le code tel quel (Recommandé)

  • Le code fonctionne déjà avec @Optional()
  • Pas de risque de casser quelque chose
  • Facile à retirer plus tard si besoin

Option B : Retirer complètement les injections

Fichiers à modifier:

  • backend/src/quotes-invoices/quotes-invoices-email-sending.service.ts
  • backend/src/scheduled-emails/scheduled-emails-sending.service.ts
  • backend/src/contracts/contracts-email.service.ts

Exemple pour quotes-invoices-email-sending.service.ts:

// Retirer cette ligne
import { GmailService } from "./gmail.service.js";

// Retirer du constructor
constructor(
// ... autres services ...
// private readonly gmailService: GmailService, // RETIRER
// ... autres services ...
) {
// ...
}

Étape 3 : Retirer GmailService des Modules (Optionnel)

3.1 Retirer de QuotesInvoicesModule

Fichier: backend/src/quotes-invoices/quotes-invoices.module.ts

@Module({
// ... autres configs ...
exports: [
// GmailService, // RETIRER
QuotesInvoicesService,
// ... autres exports ...
],
providers: [
// ... autres providers ...
// GmailService, // RETIRER
],
})

3.2 Retirer de QuotesInvoicesCoreModule

Fichier: backend/src/quotes-invoices/quotes-invoices-core.module.ts

@Module({
providers: [
// GmailService, // RETIRER
{
// provide: GMAIL_SERVICE_TOKEN, // RETIRER
// useClass: GmailService, // RETIRER
},
],
exports: [
// GmailService, // RETIRER
// GMAIL_SERVICE_TOKEN, // RETIRER
],
})

⚠️ Attention: Si vous retirez GmailService des modules, vous devez aussi retirer toutes les injections dans les services qui l'utilisent.

Étape 4 : Nettoyer les Tokens Gmail de la Base de Données (Optionnel)

4.1 Créer une migration pour nettoyer les tokens Gmail

Nouveau fichier: infra/liquibase/changes/0121_cleanup_gmail_tokens/up.sql

-- Cleanup Gmail tokens from user_metadata
-- Since gmail.compose scope has been removed, Gmail tokens are no longer used
-- This migration removes Gmail tokens but keeps Calendar tokens

UPDATE public.user_metadata
SET
google_gmail_access_token = NULL,
google_gmail_refresh_token = NULL,
google_gmail_token_expires_at = NULL,
updated_at = NOW()
WHERE
google_gmail_access_token IS NOT NULL
OR google_gmail_refresh_token IS NOT NULL;

-- Log the number of users cleaned
DO $$
DECLARE
cleaned_count INTEGER;
BEGIN
GET DIAGNOSTICS cleaned_count = ROW_COUNT;
RAISE NOTICE 'Cleaned Gmail tokens for % user(s)', cleaned_count;
END $$;

Fichier: infra/liquibase/changes/0121_cleanup_gmail_tokens/down.sql

-- Rollback: Cannot restore Gmail tokens once deleted
-- This migration is one-way only
-- Note: Gmail tokens cannot be restored as the scope has been removed

4.2 Exécuter la migration

make migrate

Étape 5 : Retirer les Colonnes Gmail de user_metadata (Optionnel, Avancé)

⚠️ Cette étape est plus risquée - Ne la faites que si vous êtes sûr de ne plus jamais avoir besoin de Gmail.

5.1 Créer une migration pour retirer les colonnes

Nouveau fichier: infra/liquibase/changes/0122_remove_gmail_columns/up.sql

-- Remove Gmail token columns from user_metadata
-- WARNING: This is irreversible. Only do this if you're certain Gmail will never be used again.

ALTER TABLE public.user_metadata
DROP COLUMN IF EXISTS google_gmail_access_token,
DROP COLUMN IF EXISTS google_gmail_refresh_token,
DROP COLUMN IF EXISTS google_gmail_token_expires_at;

Fichier: infra/liquibase/changes/0122_remove_gmail_columns/down.sql

-- Rollback: Re-add Gmail columns (but data will be lost)
ALTER TABLE public.user_metadata
ADD COLUMN IF NOT EXISTS google_gmail_access_token TEXT,
ADD COLUMN IF NOT EXISTS google_gmail_refresh_token TEXT,
ADD COLUMN IF NOT EXISTS google_gmail_token_expires_at TIMESTAMPTZ;

5.2 Mettre à jour le type TypeScript

Fichier: backend/src/users/user-metadata.service.ts

Retirer les champs Gmail de l'interface UserMetadataUpsert et des méthodes.

Étape 6 : Supprimer les Fichiers Gmail (Optionnel, Avancé)

⚠️ Cette étape est définitive - Ne la faites que si vous êtes absolument certain.

Fichiers à supprimer (si vous retirez complètement) :

  1. backend/src/quotes-invoices/gmail.service.ts
  2. backend/src/quotes-invoices/gmail.interface.ts

Mettre à jour les imports

Rechercher et retirer tous les imports de ces fichiers dans :

  • backend/src/quotes-invoices/quotes-invoices-email-sending.service.ts
  • backend/src/scheduled-emails/scheduled-emails-sending.service.ts
  • backend/src/contracts/contracts-email.service.ts
  • backend/src/quotes-invoices/quotes-invoices.module.ts
  • backend/src/quotes-invoices/quotes-invoices-core.module.ts
  • backend/src/contracts/contracts.module.ts

Recommandations

✅ À faire maintenant (Sécurisé)

  1. Marquer GmailService comme deprecated (Étape 1)
  2. Nettoyer les tokens Gmail de la DB (Étape 4.1) - Optionnel mais recommandé

⚠️ À faire plus tard (Si nécessaire)

  1. Retirer les injections GmailService (Étape 2 - Option B)
  2. Retirer GmailService des modules (Étape 3)

❌ À éviter pour l'instant

  1. Retirer les colonnes de la DB (Étape 5) - Trop risqué
  2. Supprimer les fichiers (Étape 6) - Trop définitif

Checklist de Nettoyage

  • GmailService marqué comme deprecated
  • Interface IGmailService marquée comme deprecated
  • Migration créée pour nettoyer les tokens Gmail (optionnel)
  • Migration exécutée (optionnel)
  • Tests effectués pour vérifier que tout fonctionne
  • Documentation mise à jour

Notes

  • Les tokens Gmail dans la base de données ne posent pas de problème de sécurité - ils ne sont simplement plus utilisés
  • Le code Gmail peut rester en place sans impact sur les performances
  • Le nettoyage peut être fait progressivement, sans urgence