const pool = require("../config"); // Get spareparts by brand_id const getSparepartsByBrandIdDb = async (brandId) => { const queryText = ` SELECT s.sparepart_id, s.sparepart_name, s.sparepart_code, s.sparepart_description, s.sparepart_model, s.sparepart_foto, s.sparepart_item_type, s.sparepart_qty, s.sparepart_unit, s.sparepart_merk, s.sparepart_stok, s.created_at, s.updated_at FROM brand_spareparts bs JOIN m_sparepart s ON bs.sparepart_id = s.sparepart_id WHERE bs.brand_id = $1 AND s.deleted_at IS NULL ORDER BY s.sparepart_name `; const result = await pool.query(queryText, [brandId]); return result.recordset; }; // Get brands by sparepart_id const getBrandsBySparepartIdDb = async (sparepartId) => { const queryText = ` SELECT b.brand_id, b.brand_name, b.brand_type, b.brand_manufacture, b.brand_model, b.brand_code, b.is_active, b.created_at, b.updated_at FROM brand_spareparts bs JOIN m_brands b ON bs.brand_id = b.brand_id WHERE bs.sparepart_id = $1 AND b.deleted_at IS NULL ORDER BY b.brand_name `; const result = await pool.query(queryText, [sparepartId]); return result.recordset; }; // Insert brand-spareparts relationship const insertBrandSparepartDb = async (brandId, sparepartId, createdBy) => { const queryText = ` INSERT INTO brand_spareparts (brand_id, sparepart_id, created_by, created_at) VALUES ($1, $2, $3, CURRENT_TIMESTAMP) `; const result = await pool.query(queryText, [brandId, sparepartId, createdBy]); return result.recordset; }; // Insert multiple brand-spareparts relationships const insertMultipleBrandSparepartsDb = async (brandId, sparepartIds, createdBy) => { if (!sparepartIds || sparepartIds.length === 0) return []; const values = sparepartIds.map((_, index) => `($1, $${index + 2}, $${sparepartIds.length + 2}, CURRENT_TIMESTAMP)`).join(', '); const queryText = ` INSERT INTO brand_spareparts (brand_id, sparepart_id, created_by, created_at) VALUES ${values} `; const params = [brandId, ...sparepartIds, createdBy]; const result = await pool.query(queryText, params); return result.recordset; }; // Delete specific brand-sparepart relationship const deleteBrandSparepartDb = async (brandId, sparepartId) => { const queryText = ` DELETE FROM brand_spareparts WHERE brand_id = $1 AND sparepart_id = $2 `; const result = await pool.query(queryText, [brandId, sparepartId]); return result.rowsAffected > 0; }; // Delete all spareparts for a brand const deleteAllBrandSparepartsDb = async (brandId) => { const queryText = ` DELETE FROM brand_spareparts WHERE brand_id = $1 `; const result = await pool.query(queryText, [brandId]); return result.rowsAffected > 0; }; // Update brand-spareparts (replace all) const updateBrandSparepartsDb = async (brandId, sparepartIds, updatedBy) => { // Delete existing relationships await deleteAllBrandSparepartsDb(brandId); // Insert new relationships if (sparepartIds && sparepartIds.length > 0) { return await insertMultipleBrandSparepartsDb(brandId, sparepartIds, updatedBy); } return true; }; // Check if brand-sparepart relationship exists const checkBrandSparepartExistsDb = async (brandId, sparepartId) => { const queryText = ` SELECT 1 FROM brand_spareparts WHERE brand_id = $1 AND sparepart_id = $2 `; const result = await pool.query(queryText, [brandId, sparepartId]); return result.recordset.length > 0; }; module.exports = { getSparepartsByBrandIdDb, getBrandsBySparepartIdDb, insertBrandSparepartDb, insertMultipleBrandSparepartsDb, deleteBrandSparepartDb, deleteAllBrandSparepartsDb, updateBrandSparepartsDb, checkBrandSparepartExistsDb, };