feat: 초기 프로젝트 설정 및 룰.md 파일 추가
This commit is contained in:
110
api.hyungi.net/controllers/dailyIssueReportController.js
Normal file
110
api.hyungi.net/controllers/dailyIssueReportController.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const dailyIssueReportModel = require('../models/dailyIssueReportModel');
|
||||
|
||||
// 1. CREATE: 단일 또는 다중 등록 (worker_id 배열 지원)
|
||||
exports.createDailyIssueReport = async (req, res) => {
|
||||
try {
|
||||
const body = req.body;
|
||||
|
||||
// 기본 필드
|
||||
const base = {
|
||||
date: body.date,
|
||||
project_id: body.project_id,
|
||||
start_time: body.start_time,
|
||||
end_time: body.end_time,
|
||||
issue_type_id: body.issue_type_id
|
||||
};
|
||||
|
||||
if (!base.date || !base.project_id || !base.start_time || !base.end_time || !base.issue_type_id || !body.worker_id) {
|
||||
return res.status(400).json({ error: '필수 필드 누락' });
|
||||
}
|
||||
|
||||
// worker_id 배열화
|
||||
const workers = Array.isArray(body.worker_id) ? body.worker_id : [body.worker_id];
|
||||
const insertedIds = [];
|
||||
|
||||
for (const wid of workers) {
|
||||
const payload = { ...base, worker_id: wid };
|
||||
|
||||
const insertId = await new Promise((resolve, reject) => {
|
||||
dailyIssueReportModel.create(payload, (err, id) => {
|
||||
if (err) reject(err);
|
||||
else resolve(id);
|
||||
});
|
||||
});
|
||||
|
||||
insertedIds.push(insertId);
|
||||
}
|
||||
|
||||
res.json({ success: true, issue_report_ids: insertedIds });
|
||||
} catch (err) {
|
||||
console.error('🔥 createDailyIssueReport error:', err);
|
||||
res.status(500).json({ error: err.message || String(err) });
|
||||
}
|
||||
};
|
||||
|
||||
// 2. READ BY DATE
|
||||
exports.getDailyIssuesByDate = async (req, res) => {
|
||||
try {
|
||||
const { date } = req.query;
|
||||
const rows = await new Promise((resolve, reject) => {
|
||||
dailyIssueReportModel.getAllByDate(date, (err, data) => {
|
||||
if (err) reject(err);
|
||||
else resolve(data);
|
||||
});
|
||||
});
|
||||
res.json(rows);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message || String(err) });
|
||||
}
|
||||
};
|
||||
|
||||
// 3. READ ONE
|
||||
exports.getDailyIssueById = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const row = await new Promise((resolve, reject) => {
|
||||
dailyIssueReportModel.getById(id, (err, data) => {
|
||||
if (err) reject(err);
|
||||
else resolve(data);
|
||||
});
|
||||
});
|
||||
if (!row) return res.status(404).json({ error: 'DailyIssueReport not found' });
|
||||
res.json(row);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message || String(err) });
|
||||
}
|
||||
};
|
||||
|
||||
// 4. UPDATE
|
||||
exports.updateDailyIssue = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const changes = await new Promise((resolve, reject) => {
|
||||
dailyIssueReportModel.update(id, req.body, (err, affectedRows) => {
|
||||
if (err) reject(err);
|
||||
else resolve(affectedRows);
|
||||
});
|
||||
});
|
||||
if (changes === 0) return res.status(404).json({ error: 'No changes or not found' });
|
||||
res.json({ success: true, changes });
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message || String(err) });
|
||||
}
|
||||
};
|
||||
|
||||
// 5. DELETE
|
||||
exports.removeDailyIssue = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const changes = await new Promise((resolve, reject) => {
|
||||
dailyIssueReportModel.remove(id, (err, affectedRows) => {
|
||||
if (err) reject(err);
|
||||
else resolve(affectedRows);
|
||||
});
|
||||
});
|
||||
if (changes === 0) return res.status(404).json({ error: 'DailyIssueReport not found' });
|
||||
res.json({ success: true, changes });
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message || String(err) });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user