89 lines
3.5 KiB
JavaScript
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();
|