All files / app/services qr-code.service.ts

100% Statements 16/16
100% Branches 1/1
100% Functions 4/4
100% Lines 15/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                  1x             12x   12x                     6x     6x 6x 5x 4x 4x 4x 3x 3x   4x 4x       2x              
import { Injectable } from '@angular/core';
 
/**
 * Service pour générer des QR codes
 * Utilise une API publique pour générer des QR codes
 */
@Injectable({
  providedIn: 'root'
})
export class QrCodeService {
  /**
   * Génère l'URL d'un QR code pour un texte donné
   * Utilise l'API QR Server (gratuite et sans authentification)
   */
  generateQrCodeUrl(text: string, size: number = 200): string {
    // Encode le texte pour l'URL
    const encodedText = encodeURIComponent(text);
    // Utilise l'API QR Server
    return `https://api.qrserver.com/v1/create-qr-code/?size=${size}x${size}&data=${encodedText}`;
  }
 
  /**
   * Génère un QR code en base64 (pour l'inclusion dans les emails)
   * Note: Pour une vraie application, il faudrait utiliser une bibliothèque comme qrcode
   * ou faire un appel au backend qui génère le QR code
   */
  async generateQrCodeBase64(text: string): Promise<string> {
    // Pour l'instant, on retourne l'URL du QR code
    // Dans une vraie application, on utiliserait une bibliothèque comme 'qrcode' ou on appellerait le backend
    const qrUrl = this.generateQrCodeUrl(text, 200);
    
    // Convertir l'image en base64 (nécessite un appel CORS)
    try {
      const response = await fetch(qrUrl);
      const blob = await response.blob();
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onloadend = () => {
          const base64 = reader.result as string;
          resolve(base64);
        };
        reader.onerror = reject;
        reader.readAsDataURL(blob);
      });
    } catch (error) {
      // Retourner l'URL en fallback
      return qrUrl;
    }
  }
}