Merge pull request 'refactor: remove local QR data URI caching and streamline QR code retrieval' (#18) from bigTypeShii into dev

Reviewed-on: #18
This commit is contained in:
Seazn 2026-03-17 17:59:27 +00:00
commit 411762cf65

View File

@ -16,7 +16,6 @@ const CompanySettingsRepository = require('../../repositories/settings/CompanySe
class InvoiceService {
constructor() {
this.repo = new InvoiceRepository();
this._qrDataUriCache = new Map();
}
_inferImageMimeFromBase64(base64) {
@ -59,17 +58,12 @@ class InvoiceService {
return null;
}
_getLocalQrImagePath(pieceCount) {
const safePieceCount = pieceCount === 120 ? 120 : 60;
const fileName = safePieceCount === 120 ? 'qr_120.png' : 'qr_60.png';
return path.resolve(__dirname, '../../templates/invoice/qr', fileName);
}
async _getCompanySettingsQrDataUri(pieceCount) {
const safePieceCount = pieceCount === 120 ? 120 : 60;
try {
const repo = new CompanySettingsRepository();
const row = await repo.get();
if (!row) return null;
const raw = safePieceCount === 120 ? row?.qr_code_120_base64 : row?.qr_code_60_base64;
const value = (raw == null) ? '' : String(raw).trim();
if (!value) return null;
@ -85,34 +79,11 @@ class InvoiceService {
}
}
async _getLocalQrDataUri(pieceCount) {
const safePieceCount = pieceCount === 120 ? 120 : 60;
if (this._qrDataUriCache.has(safePieceCount)) {
return this._qrDataUriCache.get(safePieceCount);
}
const filePath = this._getLocalQrImagePath(safePieceCount);
try {
const buffer = await fs.readFile(filePath);
const dataUri = `data:image/png;base64,${buffer.toString('base64')}`;
this._qrDataUriCache.set(safePieceCount, dataUri);
return dataUri;
} catch (e) {
logger.warn('InvoiceService._getLocalQrDataUri:missing_qr_file', {
pieceCount: safePieceCount,
filePath,
message: e?.message,
});
return null;
}
}
async _buildQrCodeImageTag({ abonement }) {
const pieceCount = this._resolvePieceCountForQr(abonement);
if (!pieceCount) return '';
const dataUri = await this._getCompanySettingsQrDataUri(pieceCount) || await this._getLocalQrDataUri(pieceCount);
const dataUri = await this._getCompanySettingsQrDataUri(pieceCount);
if (!dataUri) return '';
return `<img alt="QR Code" src="${this._escapeHtml(dataUri)}" />`;