diff --git a/db/brand_sparepart.db.js b/db/brand_sparepart.db.js new file mode 100644 index 0000000..850879d --- /dev/null +++ b/db/brand_sparepart.db.js @@ -0,0 +1,130 @@ +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, +}; \ No newline at end of file