박권수

feat. new logic

1 //어플에서 약병 등록 및, 약병에 관한 정보 조회 = 여기서 mqtt통신으로 broker에 데이터를 요청한다. 1 //어플에서 약병 등록 및, 약병에 관한 정보 조회 = 여기서 mqtt통신으로 broker에 데이터를 요청한다.
2 const Bottle = require('../../models/bottle'); 2 const Bottle = require('../../models/bottle');
3 const Hub = require('../../models/hub'); 3 const Hub = require('../../models/hub');
4 +const Medicine = require('../../models/medicine');
4 const DataProcess = require('../../lib/DataProcess'); 5 const DataProcess = require('../../lib/DataProcess');
5 const Mqtt = require('../../lib/MqttModule'); 6 const Mqtt = require('../../lib/MqttModule');
6 7
7 exports.bottleRegister = async(ctx) => { 8 exports.bottleRegister = async(ctx) => {
8 - const { bottleId, hubId, topic } = ctx.request.body; 9 + const { bottleId, hubId } = ctx.request.body;
10 + const topic = 'bottle/' + String(bottleId) + '/bts';
9 11
10 const newBottle = new Bottle({ 12 const newBottle = new Bottle({
11 bottleId, 13 bottleId,
...@@ -30,12 +32,12 @@ exports.bottleRegister = async(ctx) => { ...@@ -30,12 +32,12 @@ exports.bottleRegister = async(ctx) => {
30 return; 32 return;
31 } 33 }
32 34
33 - const client = Mqtt.mqttOn({ 35 + const client = await Mqtt.mqttOn({
34 host : hosting.host, 36 host : hosting.host,
35 port : hosting.port, 37 port : hosting.port,
36 clientId : hosting.clientId 38 clientId : hosting.clientId
37 }); 39 });
38 - Mqtt.mqttSubscribe(client, topic); 40 + Mqtt.mqttSubscribe(client, topic, DataProcess.dataPublish);
39 41
40 await newBottle.save(); 42 await newBottle.save();
41 43
...@@ -43,41 +45,33 @@ exports.bottleRegister = async(ctx) => { ...@@ -43,41 +45,33 @@ exports.bottleRegister = async(ctx) => {
43 }; 45 };
44 46
45 exports.lookupInfo = async(ctx) => { 47 exports.lookupInfo = async(ctx) => {
46 - const { bottleId, topic } = ctx.request.body; 48 + const { bottleId } = ctx.params;
47 - /** toDO
48 - * 약병 데이터를 요청한다
49 - * 1. Broker에 데이터 요청
50 - * 2. Broker에게서 받은 데이터를
51 - * 3. 가공한 후
52 - * 4. 유저에게 http response
53 - */
54 49
55 const bottle = await Bottle.findByBottleId(bottleId); 50 const bottle = await Bottle.findByBottleId(bottleId);
56 - const hubId = await bottle.getHubId(); 51 + if(!bottle) {
57 - const hub = await Hub.findByHubId(hubId); 52 + ctx.status = 404;
58 - const hosting = await hub.getHubHost(); 53 + return;
59 -
60 - const client = await Mqtt.mqttOn({
61 - host : hosting.host,
62 - port : hosting.port,
63 - clientId : hosting.clientId,
64 - });
65 - Mqtt.mqttSubscribe(client, topic);
66 -
67 - const a = dataRequest(); //1.
68 - const b = await getData();
69 - const c = await dataProcess();
70 -
71 - ctx.body = {
72 - a,
73 - b,
74 - c
75 } 54 }
55 +
56 + ctx.body = bottle;
76 } 57 }
77 58
78 //약병의 ID를 찾아서 약의 정보를 등록 : Post 59 //약병의 ID를 찾아서 약의 정보를 등록 : Post
79 exports.setMedicine = async(ctx) => { 60 exports.setMedicine = async(ctx) => {
80 - const { medicineId, bottleId } = ctx.request.body; 61 + const { bottleId } = ctx.params;
62 + const { medicineId } = ctx.request.body;
63 +
64 + const bottle = await Bottle.findByBottleId(bottleId);
65 + if(!bottle) {
66 + ctx.status = 404;
67 + return;
68 + }
69 +
70 + const medicine = await Medicine.findByMedicineId(medicineId);
71 + if(!medicine) {
72 + ctx.status = 404;
73 + return;
74 + }
81 75
82 await Bottle.findOneAndUpdate({ 76 await Bottle.findOneAndUpdate({
83 bottleId 77 bottleId
......
...@@ -4,7 +4,7 @@ const bottleCtrl = require('./bottle.ctrl'); ...@@ -4,7 +4,7 @@ const bottleCtrl = require('./bottle.ctrl');
4 const bottle = new Router(); 4 const bottle = new Router();
5 5
6 bottle.post('/register', bottleCtrl.bottleRegister); 6 bottle.post('/register', bottleCtrl.bottleRegister);
7 -bottle.post('/lookupInfo', bottleCtrl.lookupInfo); 7 +bottle.post('/lookupInfo/:bottleId', bottleCtrl.lookupInfo);
8 -bottle.post('/setmedicine', bottleCtrl.setMedicine); 8 +bottle.post('/setmedicine/:bottleId', bottleCtrl.setMedicine);
9 9
10 module.exports = bottle; 10 module.exports = bottle;
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -3,7 +3,7 @@ const Hub = require('../../models/hub'); ...@@ -3,7 +3,7 @@ const Hub = require('../../models/hub');
3 const Mqtt = require('../../lib/MqttModule'); 3 const Mqtt = require('../../lib/MqttModule');
4 4
5 exports.hubConnect = async (ctx) => { 5 exports.hubConnect = async (ctx) => {
6 - const { host, port, hubId } = ctx.request.body; 6 + const { hubId, host, port } = ctx.request.body;
7 7
8 const hosting = { 8 const hosting = {
9 host, 9 host,
...@@ -21,5 +21,16 @@ exports.hubConnect = async (ctx) => { ...@@ -21,5 +21,16 @@ exports.hubConnect = async (ctx) => {
21 } 21 }
22 22
23 exports.hubDisconnect = async(ctx) => { 23 exports.hubDisconnect = async(ctx) => {
24 + const { hubId } = ctx.params;
24 25
26 + const hub = await Hub.findByHubId(hubId);
27 + if(!hub) {
28 + ctx.status = 404;
29 + return;
30 + }
31 +
32 + const hosting = await hub.getHubHost();
33 + Mqtt.mqttOff(hosting);
34 +
35 + await Hub.deleteOne({ hubId });
25 } 36 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,6 +4,6 @@ const hubCtrl = require('./hub.ctrl'); ...@@ -4,6 +4,6 @@ const hubCtrl = require('./hub.ctrl');
4 const hub = new Router(); 4 const hub = new Router();
5 5
6 hub.post('/connect', hubCtrl.hubConnect); 6 hub.post('/connect', hubCtrl.hubConnect);
7 -hub.post('/disconnect', hubCtrl.hubDisconnect); 7 +hub.post('/disconnect/:hubId', hubCtrl.hubDisconnect);
8 8
9 module.exports = hub; 9 module.exports = hub;
...\ No newline at end of file ...\ No newline at end of file
......