CentralBackend/repositories/stamp/CompanyStampRepository.js
2025-10-28 21:56:38 +01:00

89 lines
3.5 KiB
JavaScript

const db = require('../../database/database');
const { logger } = require('../../middleware/logger');
class CompanyStampRepository {
async create(data, conn) {
logger.info('CompanyStampRepository.create:start', { company_id: data.company_id, label: data.label });
const q = `
INSERT INTO company_stamps (company_id, label, mime_type, image_base64, is_active, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, NOW(), NOW())
`;
const params = [data.company_id, data.label || null, data.mime_type, data.image_base64, !!data.is_active];
const executor = conn || db;
// Avoid array-destructuring; support both [result, fields] and plain result
const execResult = await executor.execute(q, params);
const res = Array.isArray(execResult) ? execResult[0] : execResult;
const id = res && typeof res.insertId !== 'undefined' ? res.insertId : null;
logger.info('CompanyStampRepository.create:success', { id });
return { id, ...data };
}
async findById(id, conn) {
const q = `SELECT * FROM company_stamps WHERE id = ? LIMIT 1`;
const executor = conn || db;
const [rows] = await executor.execute(q, [id]);
return rows[0] || null;
}
async findByCompanyId(companyId, conn) {
const q = `SELECT * FROM company_stamps WHERE company_id = ? ORDER BY created_at DESC`;
const executor = conn || db;
const [rows] = await executor.execute(q, [companyId]);
return rows;
}
async findActiveByCompanyId(companyId, conn) {
const q = `SELECT * FROM company_stamps WHERE company_id = ? AND is_active = 1 LIMIT 1`;
const executor = conn || db;
const [rows] = await executor.execute(q, [companyId]);
return rows[0] || null;
}
async deactivateAllForCompany(companyId, conn) {
const q = `UPDATE company_stamps SET is_active = 0, updated_at = NOW() WHERE company_id = ? AND is_active = 1`;
const executor = conn || db;
await executor.execute(q, [companyId]);
}
async activate(id, companyId, conn) {
const q = `UPDATE company_stamps SET is_active = 1, updated_at = NOW() WHERE id = ? AND company_id = ?`;
const executor = conn || db;
await executor.execute(q, [id, companyId]);
}
async delete(id, companyId, conn) {
const q = `DELETE FROM company_stamps WHERE id = ? AND company_id = ?`;
const executor = conn || db;
// Avoid array-destructuring; support both [result, fields] and plain result
const execResult = await executor.execute(q, [id, companyId]);
const res = Array.isArray(execResult) ? execResult[0] : execResult;
// Lightweight log of result shape to verify driver behavior
try {
logger.debug
? logger.debug('CompanyStampRepository.delete:result_shape', {
isArray: Array.isArray(execResult),
keys: Array.isArray(execResult) ? Object.keys(execResult[0] || {}) : Object.keys(execResult || {})
})
: logger.info('CompanyStampRepository.delete:result_shape', {
isArray: Array.isArray(execResult),
keys: Array.isArray(execResult) ? Object.keys(execResult[0] || {}) : Object.keys(execResult || {})
});
} catch (_) {
// no-op logging fallback
}
const affected = res && typeof res.affectedRows === 'number' ? res.affectedRows : 0;
return affected > 0;
}
async listAll(conn) {
const q = `SELECT * FROM company_stamps ORDER BY created_at DESC`;
const executor = conn || db;
const [rows] = await executor.execute(q);
return rows;
}
}
module.exports = new CompanyStampRepository();