박권수

feat. Batch System

const Koa = require('koa');
const cors = require('@koa/cors');
const Router = require('koa-router');
const cors = require('@koa/cors');
const bodyparser = require('koa-bodyparser');
const Mongoose = require('mongoose');
const api = require('./src/api');
const updateMedicineInfo = require('./src/lib/UpdatingMedicineInfo');
const MqttServer = require('./src/util/MqttServer');
const BatchSystem = require('./src/util/Batch');
require('dotenv').config();
// eslint-disable-next-line no-undef
......@@ -26,7 +28,7 @@ Mongoose.connect(MONGO_URL, {
// updateMedicineInfo.updateMedicineInfo();
}).catch(e => {
console.log(e);
})
});
app.use(bodyparser());
router.use('/api', api.routes());
......@@ -36,4 +38,6 @@ app.use(router.routes()).use(router.allowedMethods());
app.listen(SERVER_PORT, () => {
console.log('\x1b[1;36mPORT : ', SERVER_PORT, 'is connected\x1b[0m');
MqttServer.on();
})
\ No newline at end of file
BatchSystem.CheckNewYear();
BatchSystem.PushNotifyByDosage();
});
\ No newline at end of file
......
......@@ -10,4 +10,92 @@
const cron = require('node-cron');
const Profile = require('../models/profile');
const BottleMedicine = require('../models/bottleMedicine');
\ No newline at end of file
const User = require('../models/user');
const Hub = require('../models/hub');
const Bottle = require('../models/bottle');
const BottleMedicine = require('../models/bottleMedicine');
//매년 1월 1일 00시 00분에 1살씩 추가
exports.CheckNewYear = () => {
cron.schedule('0 0 0 1 1 *', async () => {
const profileList = await Profile.find();
profileList.forEach(async profile => {
await profile.updateUserAge();
profile.save();
});
}, {
timezone : 'Asia/Tokyo',
});
};
//dosage에 따라, Push Notification을 발송한다.
//아침 8시, 점심 12시, 저녁 6시에 한번씩 발송
exports.PushNotifyByDosage = async() => {
//매일 아침 8시 : 복용량 상관 없이 보냄
cron.schedule('0 0 8 * * *', async () => {
const bottleMedicineList = await BottleMedicine.find({ useYn : 'Y', dosage : { $gte : 1 } });
bottleMedicineList.forEach(async bottleMedicine => {
const bottle = await Bottle.findOne({ bottleId : bottleMedicine.bottleId });
const hub = await Hub.findOne({ hubId : bottle.hubId });
const user = await User.findOne({ userId : hub.userId, useYn : 'Y' });
if(user) {
const profile = await Profile.findOne({ userId : user.userId });
const { deviceToken } = profile;
PushNotify(deviceToken);
}
});
}, {
timezone : 'Asia/Tokyo',
});
//매일 점심 12시 : 복용량이 3인 환자들만
cron.schedule('0 0 12 * * *', async () => {
const bottleMedicineList = await BottleMedicine.find({ useYn : 'Y', dosage : { $gte : 3 } });
bottleMedicineList.forEach(async bottleMedicine => {
const bottle = await Bottle.findOne({ bottleId : bottleMedicine.bottleId });
const hub = await Hub.findOne({ hubId : bottle.hubId });
const user = await User.findOne({ userId : hub.userId, useYn : 'Y' });
if(user) {
const profile = await Profile.findOne({ userId : user.userId });
const { deviceToken } = profile;
PushNotify(deviceToken);
}
});
}, {
timezone : 'Asia/Tokyo',
});
//매일 저녁 6시
cron.schedule('0 0 18 * * *', async () => {
const bottleMedicineList = await BottleMedicine.find({ useYn : 'Y', dosage : { $gte : 2 } });
bottleMedicineList.forEach(async bottleMedicine => {
const bottle = await Bottle.findOne({ bottleId : bottleMedicine.bottleId });
const hub = await Hub.findOne({ hubId : bottle.hubId });
const user = await User.findOne({ userId : hub.userId, useYn : 'Y' });
if(user) {
const profile = await Profile.findOne({ userId : user.userId });
const { deviceToken } = profile;
PushNotify(deviceToken);
}
});
}, {
timezone : 'Asia/Tokyo',
});
};
const PushNotify = async(deviceToken) => {
//toDo : deviceToken을 받아서 push notification을 발송하는 함수
console.log(deviceToken);
};
......