From 2881cf88c60a1a6df316935a2f4814bddba09099 Mon Sep 17 00:00:00 2001 From: Bhaskara Kishore Date: Wed, 5 Apr 2023 12:24:38 +0530 Subject: [PATCH 1/5] create a IOT device post and get apis --- src/controllers/tanksController.js | 42 +++++++++++++++++++++++-- src/models/tanks.js | 16 ++++++++-- src/routes/tanksRoute.js | 49 ++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 4 deletions(-) diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index 4c7a7fcf..577b04c0 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -1,5 +1,5 @@ //const Tank = require("../models/tanks"); -const { Tank, MotorData } = require('../models/tanks') +const { Tank, MotorData, IotData } = require('../models/tanks') const User = require("../models/User"); const boom = require("boom"); @@ -510,4 +510,42 @@ exports.consumption = async (req, reply) => { } catch (err) { throw boom.boomify(err); } -}; \ No newline at end of file +}; + + +exports.IotDevice = async (req, reply) => { + try { + const { hardwareId, tankHeight, maxLevel, minLevel, mode } = req.body; + + // create a new tank document + const tank = new IotData({ hardwareId, tankHeight, maxLevel, minLevel, mode }); + + // save the document to MongoDB + await tank.save(); + + // send a success response + reply.code(200).send({ message: 'Data saved successfully' }); + } catch (err) { + // send an error response + reply.code(500).send({ error: err.message }); + } +} + + + + +exports.getIotD = async(req, reply) => { + try { + await IotData.find({hardwareId: req.query.hardwareId}) + .exec() + .then((docs) => { + reply.send({ status_code: 200, data: docs, count: docs.length }); + }) + .catch((err) => { + console.log(err); + reply.send({ error: err }); + }); + } catch (err) { + throw boom.boomify(err); + } +} \ No newline at end of file diff --git a/src/models/tanks.js b/src/models/tanks.js index b1edeb69..508f688d 100644 --- a/src/models/tanks.js +++ b/src/models/tanks.js @@ -39,9 +39,21 @@ const motordataSchema = new mongoose.Schema({ }); + + +const IOttankSchema = new mongoose.Schema({ + hardwareId: { type: String, required: true }, + tankHeight: { type: String, required: true }, + maxLevel: { type: String, required: true }, + minLevel: { type: String, required: true }, + mode: { type: Number, required: true } + }); + + + const Tank = mongoose.model("Tank", tanksSchema); const MotorData = mongoose.model("MotorData", motordataSchema); - +const IotData = mongoose.model("IotData", IOttankSchema); module.exports = { - Tank, MotorData + Tank, MotorData,IotData } diff --git a/src/routes/tanksRoute.js b/src/routes/tanksRoute.js index e96e30ec..d90089bf 100644 --- a/src/routes/tanksRoute.js +++ b/src/routes/tanksRoute.js @@ -280,6 +280,55 @@ module.exports = function (fastify, opts, next) { handler: tanksController.consumption, }); + + + fastify.route({ + method: "POST", + url: "/api/APIWrite", + schema: { + tags: ["Tank"], + description: "This is for cretae IOT Device", + summary: "This is for Create IOT Device.", + + body: { + type: "object", + properties: { + hardwareId: { type: "string" }, + tankHeight: { type: "string"}, + maxLevel: { type: "string" }, + minLevel: { type: "string" }, + + mode: { type: "string" }, + }, + }, + security: [ + { + basicAuth: [], + }, + ], + + }, + handler: tanksController.IotDevice, + + }); + + fastify.get("/api/APIRead", { + schema: { + tags: ["Tank"], + description: "This is for Get IOT Data", + summary: "This is for to Get IOT Data", + querystring: { + hardwareId: {type: 'string'} + }, + security: [ + { + basicAuth: [], + }, + ], + }, + preHandler: fastify.auth([fastify.authenticate]), + handler: tanksController.getIotD, + }); next(); From 3bcc274e512f7a422083deb70ecb8f4333a5ddb6 Mon Sep 17 00:00:00 2001 From: Bhaskara Kishore Date: Wed, 5 Apr 2023 16:20:31 +0530 Subject: [PATCH 2/5] delivery boy login and phone verify --- src/controllers/supplierOrderController.js | 6 ++- src/handlers/supplierHandler.js | 46 ++++++++++++++++------ src/models/supplier.js | 2 + src/routes/supplierOrdersRoutes.js | 3 +- src/routes/supplierRoute.js | 1 + 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/controllers/supplierOrderController.js b/src/controllers/supplierOrderController.js index d4730232..31ec7e04 100644 --- a/src/controllers/supplierOrderController.js +++ b/src/controllers/supplierOrderController.js @@ -71,6 +71,9 @@ exports.orderNow = async (req, reply) => { state:req.body.state, zip:req.body.zip, status:req.body.status, + longitude: req.body.longitude, + latitude:req.body.latitude, + }; var agent_mobile = req.body.phone @@ -96,7 +99,8 @@ exports.orderNow = async (req, reply) => { agent.state = usertobeInserted.state agent.zip = usertobeInserted.zip agent.status = usertobeInserted.status - + agent.longitude = usertobeInserted.longitude + agent.latitude = usertobeInserted.latitude } } diff --git a/src/handlers/supplierHandler.js b/src/handlers/supplierHandler.js index 7cae812b..db6e0cd0 100644 --- a/src/handlers/supplierHandler.js +++ b/src/handlers/supplierHandler.js @@ -238,6 +238,33 @@ exports.loginSupplier = async(request, reply) =>{ //Login Delivery Handler exports.loginDeliveryBoy = async(request, reply) =>{ + + phone = request.body.phone; + phoneVerificationCode = request.body.phoneVerificationCode; + + // check if user exists in the system. If user exists , display message that + // username is not available + console.log( + "this is the phone and verification code", + phone, + phoneVerificationCode + ); + deliveryBoyExists = await DeliveryBoy.findOne({ + phone: phone, + phoneVerified: false, + phoneVerificationCode: phoneVerificationCode, + }); + console.log(deliveryBoyExists); + if (deliveryBoyExists) { + // update the phoneVerified flag to true. + const filter = { + phone: phone, + phoneVerificationCode: phoneVerificationCode, + }; + const update = { phoneVerified: true }; + const doc = await DeliveryBoy.findOneAndUpdate(filter, update); + updatedDeliveryBoy = await DeliveryBoy.findOne({ phone: phone }); + } loginObject = await supplierController.loginDeliveryBoy(request); console.log("loginObject...",loginObject) if (loginObject.same) { @@ -308,7 +335,9 @@ exports.loginDeliveryBoy = async(request, reply) =>{ address: loginObject.delivery.address, phoneVerified: loginObject.delivery.phoneVerified, oneTimePasswordSetFlag: loginObject.delivery.oneTimePasswordSetFlag, - + supplierId: loginObject.delivery.supplierId, + longitude:loginObject.delivery. longitude, + latitude:loginObject.delivery.latitude, }, }); }if (profilePicture) { @@ -324,6 +353,9 @@ exports.loginDeliveryBoy = async(request, reply) =>{ address: loginObject.delivery.address, phoneVerified: loginObject.delivery.phoneVerified, oneTimePasswordSetFlag: loginObject.delivery.oneTimePasswordSetFlag, + supplierId: loginObject.delivery.supplierId, + longitude:loginObject.delivery. longitude, + latitude:loginObject.delivery.latitude, }, }); } @@ -664,7 +696,7 @@ exports.logoutsupplier = async (request, reply) => { const doc = await DeliveryBoy.findOneAndUpdate(filter, update); updatedDeliveryBoy = await DeliveryBoy.findOne({ phone: phone }); - if (updatedDeliveryBoy.phoneVerified) { + if (updatedDeliveryBoy.phoneVerified) { reply.send('{"armintatankdata":{"error":false,"verified": true}}'); } else { error = { @@ -677,16 +709,6 @@ exports.logoutsupplier = async (request, reply) => { req.body.regError = error; reply.send(error); } - } else { - error = { - armintatankdata: { - error: true, - code: 10005, - message: "10005 - Verification code entered cannot be validated.", - }, - }; - req.body.regError = error; - reply.send(error); } } catch (err) { throw boom.boomify(err); diff --git a/src/models/supplier.js b/src/models/supplier.js index 8094a502..b7617102 100644 --- a/src/models/supplier.js +++ b/src/models/supplier.js @@ -121,6 +121,8 @@ const supplierSchema = new mongoose.Schema( zip: { type: String, default: null }, timestamp: { type: Date, default: Date.now }, status: { type: String, default: "Inactive" }, + longitude: { type : Number}, + latitude: {type: Number}, }); diff --git a/src/routes/supplierOrdersRoutes.js b/src/routes/supplierOrdersRoutes.js index f556d363..d0432383 100644 --- a/src/routes/supplierOrdersRoutes.js +++ b/src/routes/supplierOrdersRoutes.js @@ -85,7 +85,8 @@ module.exports = function (fastify, opts, next) { state: { type: "string", default: null }, zip: { type: "string", default: null }, status: { type: "string" }, - + latitude: { type: 'number' }, + longitude: { type: 'number'} }, }, diff --git a/src/routes/supplierRoute.js b/src/routes/supplierRoute.js index bfc7e82b..d1835df3 100644 --- a/src/routes/supplierRoute.js +++ b/src/routes/supplierRoute.js @@ -161,6 +161,7 @@ module.exports = function (fastify, opts, next) { type: "object", required: ["phone"], properties: { + phoneVerificationCode: { type: "string" }, phone: { type: "string" }, }, }, From 002367524f9a813c5695517f5552ad9ac4876bbc Mon Sep 17 00:00:00 2001 From: Bhaskara Kishore Date: Thu, 6 Apr 2023 11:19:04 +0530 Subject: [PATCH 3/5] added longitude and latitude in user side --- src/controllers/userController.js | 5 +++++ src/index.js | 4 ++++ src/models/User.js | 2 ++ src/routes/usersRoute.js | 2 ++ 4 files changed, 13 insertions(+) diff --git a/src/controllers/userController.js b/src/controllers/userController.js index ee0bd3d9..09099eb8 100644 --- a/src/controllers/userController.js +++ b/src/controllers/userController.js @@ -190,6 +190,9 @@ exports.addUser = async (req, reply) => { address2: req.body.address2, zip: req.body.zip, notes: req.body.notes, + longitude: req.body.longitude, + latitude:req.body.latitude, + }, }; @@ -214,6 +217,8 @@ exports.addUser = async (req, reply) => { user.buildingName = usertobeInserted.buildingName; user.inchargeName = usertobeInserted.inchargeName; user.customerId = usertobeInserted.customer_id; + user.latitude = usertobeInserted.latitude; + user.longitude = usertobeInserted.longitude } diff --git a/src/index.js b/src/index.js index 31dda7cb..2e328572 100644 --- a/src/index.js +++ b/src/index.js @@ -222,6 +222,8 @@ fastify.post("/api/login", { address2: loginObject.user.profile.address2, phoneVerified: loginObject.user.phoneVerified, oneTimePasswordSetFlag: loginObject.user.oneTimePasswordSetFlag, + latitude: loginObject.user.latitude, + longitude: loginObject.user.longitude, type: loginObject.user.profile.role, typeasobj: stringToJsonObject, }, @@ -241,6 +243,8 @@ fastify.post("/api/login", { address2: loginObject.user.profile.address2, phoneVerified: loginObject.user.phoneVerified, oneTimePasswordSetFlag: loginObject.user.oneTimePasswordSetFlag, + latitude: loginObject.user.latitude, + longitude: loginObject.user.longitude, type: loginObject.user.profile.role, typeasobj: stringToJsonObject, }, diff --git a/src/models/User.js b/src/models/User.js index 9bc02448..11a294d1 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -91,6 +91,8 @@ const userSchema = new mongoose.Schema( coordinates: { type: [Number], default: [0, 0] }, }, + latitude: { type: 'number' }, + longitude: { type: 'number'}, isActive: Boolean, tenantId: ObjectId, createdAt: { diff --git a/src/routes/usersRoute.js b/src/routes/usersRoute.js index 98c2eb0b..a58b1103 100644 --- a/src/routes/usersRoute.js +++ b/src/routes/usersRoute.js @@ -155,6 +155,8 @@ module.exports = function (fastify, opts, next) { zip: { type: "string", default: null }, country: { type: "string", default: null }, notes: { type: "string", default: null }, + latitude: { type: 'number' }, + longitude: { type: 'number'} }, }, security: [ From cc36b044358cfd15d35e5339e2d3f1147449a42b Mon Sep 17 00:00:00 2001 From: Bhaskara Kishore Date: Thu, 6 Apr 2023 12:26:45 +0530 Subject: [PATCH 4/5] add field suppliername in deliveryboy side --- src/controllers/supplierOrderController.js | 4 ++++ src/handlers/supplierHandler.js | 2 ++ src/models/supplier.js | 1 + src/routes/supplierOrdersRoutes.js | 1 + 4 files changed, 8 insertions(+) diff --git a/src/controllers/supplierOrderController.js b/src/controllers/supplierOrderController.js index 31ec7e04..1c754643 100644 --- a/src/controllers/supplierOrderController.js +++ b/src/controllers/supplierOrderController.js @@ -63,6 +63,7 @@ exports.orderNow = async (req, reply) => { // console.log("This is the reply in the handler after the validations", reply); deliveryData = { supplierId: supplierId, + suppliername: req.body.suppliername, name: req.body.Name, phone: req.body.phone, alternativeContactNumber: req.body.alternativeContactNumber, @@ -91,6 +92,7 @@ exports.orderNow = async (req, reply) => { usertobeInserted = checkFormEncoding.agent; console.log("thsi true url string"); agent.supplierId = usertobeInserted.supplierId + agent.suppliername = usertobeInserted.suppliername agent.name = usertobeInserted.name; agent.phone = usertobeInserted.phone; agent.alternativeContactNumber = usertobeInserted.alternativeContactNumber; @@ -105,6 +107,8 @@ exports.orderNow = async (req, reply) => { } const insertedagent = await agent.save(); + + console.log("inster...", insertedagent) return insertedagent; diff --git a/src/handlers/supplierHandler.js b/src/handlers/supplierHandler.js index db6e0cd0..e9f20238 100644 --- a/src/handlers/supplierHandler.js +++ b/src/handlers/supplierHandler.js @@ -336,6 +336,7 @@ exports.loginDeliveryBoy = async(request, reply) =>{ phoneVerified: loginObject.delivery.phoneVerified, oneTimePasswordSetFlag: loginObject.delivery.oneTimePasswordSetFlag, supplierId: loginObject.delivery.supplierId, + suppliername: loginObject.delivery.suppliername, longitude:loginObject.delivery. longitude, latitude:loginObject.delivery.latitude, }, @@ -354,6 +355,7 @@ exports.loginDeliveryBoy = async(request, reply) =>{ phoneVerified: loginObject.delivery.phoneVerified, oneTimePasswordSetFlag: loginObject.delivery.oneTimePasswordSetFlag, supplierId: loginObject.delivery.supplierId, + suppliername: loginObject.delivery.suppliername, longitude:loginObject.delivery. longitude, latitude:loginObject.delivery.latitude, }, diff --git a/src/models/supplier.js b/src/models/supplier.js index b7617102..da313600 100644 --- a/src/models/supplier.js +++ b/src/models/supplier.js @@ -108,6 +108,7 @@ const supplierSchema = new mongoose.Schema( const deliveryBoySchema = new mongoose.Schema({ supplierId:{ type: String, default: null }, + suppliername:{ type: String, default: null }, name: { type: String, default: null }, phone: { type: String, default: null,unique:true }, alternativeContactNumber : { type : String,default: null }, diff --git a/src/routes/supplierOrdersRoutes.js b/src/routes/supplierOrdersRoutes.js index d0432383..9a6d6d29 100644 --- a/src/routes/supplierOrdersRoutes.js +++ b/src/routes/supplierOrdersRoutes.js @@ -77,6 +77,7 @@ module.exports = function (fastify, opts, next) { body: { type: "object", properties: { + suppliername: { type: "string"}, Name: { type: "string" }, phone: { type: "string" }, alternativeContactNumber : { type : "string" }, From 79839e8c7ecf1dfcd47e12210170ed510110db1a Mon Sep 17 00:00:00 2001 From: Bhaskara Kishore Date: Thu, 6 Apr 2023 16:05:07 +0530 Subject: [PATCH 5/5] longitude and latitude added user --- src/controllers/userController.js | 9 +++++---- src/models/User.js | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/controllers/userController.js b/src/controllers/userController.js index 09099eb8..f8e2ecc0 100644 --- a/src/controllers/userController.js +++ b/src/controllers/userController.js @@ -190,10 +190,9 @@ exports.addUser = async (req, reply) => { address2: req.body.address2, zip: req.body.zip, notes: req.body.notes, - longitude: req.body.longitude, - latitude:req.body.latitude, - }, + longitude: req.body.longitude, + latitude:req.body.latitude, }; @@ -250,13 +249,15 @@ exports.addUser = async (req, reply) => { customerId: insertedUser.customerId, inchargeName: insertedUser.inchargeName, buildingName: insertedUser.buildingName, - + emails: [ { email: insertedUser.emails[0].email, }, ], profile: insertedUser.profile, + longitude: insertedUser.longitude, + latitude:insertedUser.latitude, }, status_code: 200, }; diff --git a/src/models/User.js b/src/models/User.js index 11a294d1..8373d39a 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -91,8 +91,8 @@ const userSchema = new mongoose.Schema( coordinates: { type: [Number], default: [0, 0] }, }, - latitude: { type: 'number' }, - longitude: { type: 'number'}, + longitude: { type : Number}, + latitude: {type: Number}, isActive: Boolean, tenantId: ObjectId, createdAt: {