Untitled
user_4058768
plain_text
a year ago
7.8 kB
5
Indexable
module.exports = app => { const menu = { parentMenu: app.parentMenu.sdh, menus: { 7642: { title: 'Quản lý đề tài (2)', link: '/user/sau-dai-hoc/de-tai', parentKey: 7543 } } }; app.permission.add( { name: 'sdhDeTai:read', menu }, 'sdhDeTai:write', 'sdhDeTai:delete', ); app.get('/user/sau-dai-hoc/de-tai', app.permission.check('sdhDeTai:read'), app.templates.admin); app.get('/user/sau-dai-hoc/so-quyet-dinh/:mssv', app.permission.check('sdhDeTai:read'), app.templates.admin); //APIs---------------------------------------------------------------------------------------------------------------------------------- app.get('/api/sdh/de-tai', app.permission.check('sdhDeTai:read'), async (req, res) => { try { const items = await app.model.sdhDeTai.getAll({}, '*', 'ID'); res.send({ items }); } catch (error) { app.consoleError(req, error); res.send({ error }); } }); app.get('/api/sdh/de-tai/page/:pageNumber/:pageSize', app.permission.check('sdhDeTai:read'), async (req, res) => { try { const { pageNumber, pageSize } = req.params; let { filter = {} } = req.query || {}; const { rows: list, pagenumber, pagesize, pagetotal, totalitem } = await app.model.sdhDeTai.searchPage(Number(pageNumber), Number(pageSize), app.utils.stringify(filter)); list.forEach(item => { item.canBo = app.utils.parse(item.canBo); item.canBo = item.canBo.filter(canBo => !(canBo.mscb === null && canBo.vaiTro === null && canBo.hoTenCanBo === null && canBo.from === null) ); } ); res.send({ page: { list, pageNumber: pagenumber, pageSize: pagesize, pageTotal: pagetotal, totalItem: totalitem } }); } catch (error) { app.consoleError(app, error); res.send({ error }); } }); app.get('/api/sdh/cbhd/page/:pageNumber/:pageSize', app.permission.check('sdhDeTai:read'), async (req, res) => { try { const { pageNumber, pageSize } = req.params; let { filter } = req.query || {}; filter = filter || {}; const searchTerm = typeof req.query.condition === 'string' ? req.query.condition : ''; const { rows: list, pagenumber, pagesize, pagetotal, totalitem } = await app.model.sdhDeTai.sdhCanBoHuongDanSearchPage(Number(pageNumber), Number(pageSize), app.utils.stringify(filter), searchTerm); res.send({ page: { list, pageNumber: pagenumber, pageSize: pagesize, pageTotal: pagetotal, totalItem: totalitem } }); } catch (error) { app.consoleError(error); res.send({ error }); } }); app.get('/api/sdh/cbhd/item/:shcc', app.permission.check('sdhDeTai:read'), async (req, res) => { try { const mscb = req.params.shcc; const { belongTo } = req.query; const belongToMapper = { 'CBTT': async () => await app.model.tchcCanBo.get({ shcc: mscb }).then(item => ({ ...item, belongTo: 'CBTT' })), 'CBNT': async () => await app.model.dtCanBoNgoaiTruong.get({ shcc: mscb }).then(item => ({ ...item, belongTo: 'CBNT' })), 'CBSDH': async () => await app.model.sdhCanBo.get({ id: mscb }).then(item => ({ ...item, shcc: item.id, belongTo: 'CBSDH' })), }; const canBo = await belongToMapper[belongTo](); res.send({ item: { ...canBo } }); } catch (error) { app.consoleError(req, error); res.send({ error }); } }); app.post('/api/sdh/duyet-de-tai', app.permission.check('sdhDeTai:write'), async (req, res) => { try { const { data, id } = req.body; const soQuyetDinhData = { ten: data.tenSqd, time: Date.now(), idDeTai: id, soQuyetDinh: data.soQuyetDinh, mssv: data.mssv }; const soQuyetDinhItem = await app.model.sdhSoQuyetDinh.create(soQuyetDinhData); const [deTai, cbhd] = await Promise.all([ app.model.sdhDeTai.update({ id }, { isDuyet: 1 }), app.model.sdhCbhd.getAll({ mssv: data.mssv }) ]); await Promise.all(cbhd.flatMap(item => [ app.model.sdhSoQuyetDinhDetail.create({ soQuyetDinh: soQuyetDinhItem.id, tenDeTai: deTai.tenDeTai, typeShcc: 0, shcc: item.idCanBo, vaiTro: item.vaiTro, }) ])); const item = { soQuyetDinh: soQuyetDinhItem, }; res.send({ item }); } catch (error) { app.consoleError(req, error); res.send({ error }); } }); app.post('/api/sdh/de-tai', app.permission.check('sdhDeTai:write'), async (req, res) => { try { const { data } = req.body; const deTaiData = { tenDeTai: data.tenDeTai, mssv: data.mssv, ghiChu: data.ghiChu, noiDung: data.noiDung, isDuyet: 0, }; const deTaiItem = await app.model.sdhDeTai.create(deTaiData); await Promise.all(data.cbhd.flatMap(item => [ app.model.sdhCbhd.create({ vaiTro: item.vaiTro, idCanBo: item.shcc, mssv: data.mssv, belongTo: item.belongTo, }) ])); res.send({ item: deTaiItem }); } catch (error) { app.consoleError(req, error); res.send({ error }); } }); app.put('/api/sdh/de-tai', app.permission.check('sdhDeTai:write'), async (req, res) => { try { const { data, id } = req.body; const deTaiData = { tenDeTai: data.tenDeTai, mssv: data.mssv, ghiChu: data.ghiChu, noiDung: data.noiDung }; const soQuyetDinhData = { ten: data.tenSqd, time: Date.now(), idDeTai: id, soQuyetDinh: data.soQuyetDinh, mssv: data.mssv }; const soQuyetDinhItem = await app.model.sdhSoQuyetDinh.create(soQuyetDinhData); await app.model.sdhCbhd.delete({ mssv: data.mssv }); await Promise.all([ app.model.sdhSoQuyetDinh.update({ idDeTai: id, active: 0 }, { active: 1 }), app.model.sdhDeTai.update({ id }, deTaiData), app.model.sdhSoQuyetDinh.create(soQuyetDinhData), ...data.cbhd.flatMap(item => [ app.model.sdhCbhd.create({ vaiTro: item.vaiTro, idCanBo: item.shcc, belongTo: item.belongTo, mssv: data.mssv }), app.model.sdhSoQuyetDinhDetail.create({ soQuyetDinh: soQuyetDinhItem.id, tenDeTai: data.tenDeTai, shcc: item.shcc, typeShcc: 0, vaiTro: item.vaiTro }) ]) ]); res.send({ 'message': 'success' }); } catch (error) { app.consoleError(req, error); res.send({ error }); } }); app.get('/api/sdh/de-tai-sinh-vien/page/:pageNumber/:pageSize', app.permission.check('sdhDeTai:read'), async (req, res) => { try { const pagenumber = parseInt(req.params.pageNumber), pagesize = parseInt(req.params.pageSize), { condition, filter } = req.query, searchTerm = typeof condition === 'string' ? condition : ''; const page = await app.model.sdhDeTai.sinhVienWithDeTaiAdapter(pagenumber, pagesize, searchTerm, app.utils.stringify(filter)); const { totalitem: totalItem, pagesize: pageSize, pagetotal: pageTotal, pagenumber: pageNumber, rows: list } = page; res.send({ page: { totalItem, pageSize, pageTotal, pageNumber, list } }); } catch (error) { app.consoleError(app, error); res.send({ error }); } }); };
Editor is loading...
Leave a Comment