Replaced `SELECT *` statements across multiple data models with explicit column lists to improve query performance, reduce data transfer, and increase code clarity. This is part of the Phase 2 refactoring plan. - Refactored queries in the following models: - projectModel - toolsModel - attendanceModel - dailyIssueReportModel - issueTypeModel - workReportModel - userModel - dailyWorkReportModel fix(api): Add missing volume mounts to docker-compose Modified docker-compose.yml to mount the `config`, `middlewares`, `utils`, and `services` directories into the API container. This fixes a `MODULE_NOT_FOUND` error that caused the container to crash on startup. feat(db): Add migration for missing project columns Created a new database migration to add `is_active`, `project_status`, and `completed_date` columns to the `projects` table, resolving an inconsistency between the model code and the schema. docs: Add deployment notes Added a new markdown file to document the testing (macOS, Docker Desktop) and production (Synology NAS, Container Manager) environments.
58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
const { getDb } = require('../dbPool');
|
|
|
|
// CREATE
|
|
const create = async (type, callback) => {
|
|
try {
|
|
const db = await getDb();
|
|
const [result] = await db.query(
|
|
`INSERT INTO IssueTypes (category, subcategory) VALUES (?, ?)`,
|
|
[type.category, type.subcategory]
|
|
);
|
|
callback(null, result.insertId);
|
|
} catch (err) {
|
|
callback(err);
|
|
}
|
|
};
|
|
|
|
// READ ALL
|
|
const getAll = async (callback) => {
|
|
try {
|
|
const db = await getDb();
|
|
const [rows] = await db.query(`SELECT issue_type_id, category, subcategory FROM IssueTypes ORDER BY category, subcategory`);
|
|
callback(null, rows);
|
|
} catch (err) {
|
|
callback(err);
|
|
}
|
|
};
|
|
|
|
// UPDATE
|
|
const update = async (id, type, callback) => {
|
|
try {
|
|
const db = await getDb();
|
|
const [result] = await db.query(
|
|
`UPDATE IssueTypes SET category = ?, subcategory = ? WHERE id = ?`,
|
|
[type.category, type.subcategory, id]
|
|
);
|
|
callback(null, result.affectedRows);
|
|
} catch (err) {
|
|
callback(err);
|
|
}
|
|
};
|
|
|
|
// DELETE
|
|
const remove = async (id, callback) => {
|
|
try {
|
|
const db = await getDb();
|
|
const [result] = await db.query(`DELETE FROM IssueTypes WHERE id = ?`, [id]);
|
|
callback(null, result.affectedRows);
|
|
} catch (err) {
|
|
callback(err);
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
create,
|
|
getAll,
|
|
update,
|
|
remove
|
|
}; |