From 494675c5676d7b26225f95dce442a54b9ee66a36 Mon Sep 17 00:00:00 2001 From: szbk Date: Wed, 6 Mar 2024 01:06:40 +0300 Subject: [PATCH] on/off add --- app.js | 38 +++++++++++++++----------- controller/device.log.controller.js | 42 +++++++++-------------------- controller/device.set.controller.js | 38 ++++++++++++++++++++++++++ controller/save.controller.js | 7 ++--- library/index.js | 39 +++++++++++++++++++++++++++ package.json | 5 ++-- route/device.log.route.js | 2 +- route/device.set.route.js | 38 ++++++++++++++++++++++++++ 8 files changed, 155 insertions(+), 54 deletions(-) create mode 100644 controller/device.set.controller.js create mode 100644 library/index.js create mode 100644 route/device.set.route.js diff --git a/app.js b/app.js index afd70f3..4820a34 100644 --- a/app.js +++ b/app.js @@ -5,43 +5,49 @@ const mongoose = require("mongoose"); const configs = require("./configs"); const chalk = require("chalk"); const helmet = require("helmet"); -const config = require('./configs'); +const config = require("./configs"); const morgan = require("morgan"); +const fetch = require('node-fetch'); -app.use(express.urlencoded({extended: true})); +app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(helmet()); // Logs -app.use(morgan('dev')); +app.use(morgan("dev")); // Connect Mongoose -mongoose.connect(configs.mongodburl, { +mongoose + .connect(configs.mongodburl, { autoIndex: true -}).then(() => { + }) + .then(() => { console.log(chalk.cyanBright.bold("Mongodb is live!")); -}).catch((error) => { - + }) + .catch((error) => { console.log("Mongodb error: " + error.message); -}); + }); // Save Route app.use("/api/save", require("./route/save.route")); +// Device Set Route +app.use("/api/set", require("./route/device.set.route")); // Device Log Route app.use("/api/device-log", require("./route/device.log.route")); -// Wrong Endpoint -app.use("/api/*", (req, res) => { - res.status(400).json({error: true, message: "Invalid api end point!"}); +// 404 Not Found Endpoint +app.use((req, res) => { + res.status(404).json({ error: true, message: "Not found!" }); }); // Root public route -app.use("*", (req, res) => { // res.sendFile("public/", { root: __dirname }); - res.sendStatus(400); +app.use("*", (req, res) => { + // res.sendFile("public/", { root: __dirname }); + res.sendStatus(400); }); // Server Listening server.listen(configs.port, () => { - console.log(chalk.yellowBright.bold.red("Listening: " + configs.port)); + console.log(chalk.yellowBright.bold.red("Listening: " + configs.port)); }); // Error Handling app.on("eror", (error) => { - console.log(error); -}); \ No newline at end of file + console.log(error); +}); diff --git a/controller/device.log.controller.js b/controller/device.log.controller.js index 2fff18d..d3c0ca3 100644 --- a/controller/device.log.controller.js +++ b/controller/device.log.controller.js @@ -1,7 +1,7 @@ const configs = require("../configs"); -const DeviceModel = require("../models/device.model"); +const Library = require("../library"); -const set = async ( +const logSave = async ( token, device_id, remote_name, @@ -10,38 +10,20 @@ const set = async ( ) => { if (token === configs.verifyToken) { try { - // Önce kaydı bulalım - const filter = { - _id: device_id - }; + const result = await Library.saveDeviceLog( + device_id, + remote_name, + remote_type, + operating_type + ); - const update = { - $push: { - device_log: { - remote_name, - remote_type, - operating_type, - log_time: Date.now() - } - } - }; - - const result = await DeviceModel.updateOne(filter, update); - - if (result.nModified === 0) { - throw new Error("Güncellenmek istenen kayıt bulunamadı"); - } - - return "Log Kaydedildi!"; + return result; } catch (error) { - // if (error.code === 11000) { - // throw new Error("Zaten kaydedilmiş"); - // } - throw new Error("Mongodb'ye kaydedilirken hata oluştu"); + throw new Error("Mongodb'ye kaydedilirken hata oluştu (log.controller)"); } } else { - throw new Error("Hatalı token"); + throw new Error("Hatalı token (log.controller)"); } }; -module.exports = { set }; +module.exports = { logSave }; diff --git a/controller/device.set.controller.js b/controller/device.set.controller.js new file mode 100644 index 0000000..6d8d817 --- /dev/null +++ b/controller/device.set.controller.js @@ -0,0 +1,38 @@ +const config = require("../configs"); +const configs = require("../configs"); +const Library = require("../library"); +const DeviceModel = require("../models/device.model"); +const fetch = require("node-fetch"); + +const set = async (token, device_id, remote_name, remote_type, operating_type) => { + if (token === configs.verifyToken) { + try { + const deviceExist = await DeviceModel.findOne({ + _id: device_id + }); + if (deviceExist) { + const hostname = deviceExist.device_ip_address; + const path = "on"; + const response = await fetch( + "http://" + hostname + "/" + path + "?token=" + configs.verifyToken + ); + + const isOpen = await response.text(); + if (isOpen) { + Library.saveDeviceLog(device_id, remote_name, remote_type, operating_type); + return "Cihaz açıldı" + }else{ + throw new Error("Cihaz açılırken hata oluştu!"); + } + } else { + throw new Error("Cihaz bulunamadı!"); + } + } catch (error) { + throw new Error("Mongodb: " + error.message + " (set.controller)"); + } + } else { + throw new Error("Hatalı token (set.controller)"); + } +}; + +module.exports = { set }; diff --git a/controller/save.controller.js b/controller/save.controller.js index 9f75dec..ecb607e 100644 --- a/controller/save.controller.js +++ b/controller/save.controller.js @@ -63,13 +63,10 @@ const save = async ( return "IP Adresi güncellendi"; } } catch (error) { - // if (error.code === 11000) { - // throw new Error("Zaten kaydedilmiş"); - // } - throw new Error("Mongodb'ye kaydedilirken hata oluştu"); + throw new Error("Mongodb: " + error.message + " (save.controller)"); } } else { - throw new Error("Hatalı token"); + throw new Error("Hatalı token (save.controller)"); } }; diff --git a/library/index.js b/library/index.js new file mode 100644 index 0000000..f8b267b --- /dev/null +++ b/library/index.js @@ -0,0 +1,39 @@ +const configs = require("../configs"); +const DeviceModel = require("../models/device.model"); + +const saveDeviceLog = async ( + device_id, + remote_name, + remote_type, + operating_type +) => { + try { + // Önce kaydı bulalım + const filter = { + _id: device_id + }; + + const update = { + $push: { + device_log: { + remote_name, + remote_type, + operating_type, + log_time: Date.now() + } + } + }; + + const result = await DeviceModel.updateOne(filter, update); + + if (result.nModified === 0) { + throw new Error("Güncellenmek istenen kayıt bulunamadı (library)"); + } + + return "Log Kaydedildi!"; + } catch (error) { + throw new Error("Mongodb'ye kaydedilirken hata oluştu (library)"); + } +}; + +module.exports = { saveDeviceLog }; diff --git a/package.json b/package.json index f8545fc..6694dd6 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "dependencies": { + "chalk": "^4.0.0", "create-react-app": "^5.0.1", "dotenv": "^16.4.5", "express": "^4.18.2", "helmet": "^7.1.0", "mongoose": "^8.2.0", "morgan": "^1.10.0", + "node-fetch": "^2.7.0", "nodemon": "^3.1.0", - "socket.io": "^4.7.4", - "chalk": "^4.0.0" + "socket.io": "^4.7.4" }, "name": "wisecolt-mancmini", "version": "1.0.0", diff --git a/route/device.log.route.js b/route/device.log.route.js index f947b2a..1912b9a 100644 --- a/route/device.log.route.js +++ b/route/device.log.route.js @@ -9,7 +9,7 @@ router.use(express.json()); router.post("/", async (req, res) => { try { // Token Control Middleware - const result = await DeviceLogController.set( + const result = await DeviceLogController.logSave( req.body.token, req.body.device_id, req.body.remote_name, diff --git a/route/device.set.route.js b/route/device.set.route.js new file mode 100644 index 0000000..f0156b8 --- /dev/null +++ b/route/device.set.route.js @@ -0,0 +1,38 @@ +const express = require("express"); +const router = express.Router(); +const DeviceSetController = require("../controller/device.set.controller"); + +router.use(express.urlencoded({ extended: false })); +router.use(express.json()); + +// Device Log Save route +router.get( + "/:operating_type/:token/:device_id/:remote_name/:remote_type", + async (req, res) => { + try { + const { token, device_id, remote_name, remote_type, operating_type } = + req.params; + + // Token Control Middleware + const result = await DeviceSetController.set( + token, + device_id, + remote_name, + remote_type, + operating_type + ); + + return res.status(200).json({ + error: false, + result + }); + } catch (error) { + res.status(400).json({ + error: true, + result: error.message + }); + } + } +); + +module.exports = router;