diff --git a/src/controllers/departmentController.js b/src/controllers/departmentController.js index 5e2fefc3..c15c7f2d 100644 --- a/src/controllers/departmentController.js +++ b/src/controllers/departmentController.js @@ -10,7 +10,7 @@ const fastify = require("fastify")({ }); const { Counter} = require('../models/User') -const {Department} = require('../models/Department') +const {Department, Desgination} = require('../models/Department') const generateDepartmentId = async () => { const result = await Counter.findOneAndUpdate( @@ -20,6 +20,14 @@ const generateDepartmentId = async () => { ); return result.seq; }; + const generateDesginationId = async () => { + const result = await Counter.findOneAndUpdate( + { _id: 'desgination_id' }, + { $inc: { seq: 1 } }, + { upsert: true, new: true } + ); + return result.seq; + }; exports.addDepartment = async (request, reply) => { try { @@ -178,4 +186,165 @@ exports.addDepartment = async (request, reply) => { } catch (err) { reply.status(500).send({ message: err.message }); } - }; \ No newline at end of file + }; + + + exports.addDesgination = async (request, reply) => { + try { + const d_id = await generateDepartmentId(); + const desginationId = `AWDES${d_id}`; + + const { + phone, + city, + state, + password, + country, + zone, + address1, + address2, + pincode, + desginationName, + createdBy, + updatedBy, + } = request.body; + + + const existingStore = await Desgination.findOne({ phone }); + if (existingStore) { + return reply.status(400).send({ message: 'Phone is already registered' }); + } + + const hashedPassword = await bcrypt.hash(password, 10); + + const department = new Desgination({ + desginationId: desginationId, + city, + phone, + address1, + address2, + services: { password: { bcrypt: hashedPassword } }, + state, + zone, + country, + pincode, + desginationName, + createdBy, + updatedBy, + }); + + await department.save(); + + reply.send({department, message: 'Account Created Successfully' }); + } catch (err) { + reply.status(500).send({ message: err.message }); + } + }; + + + exports.getSinledesginationData = async (req, reply) => { + try { + const { desginationId } = req.params; + + const department = await Desgination.findOne({ desginationId: desginationId }); + + if (!department) { + return reply.code(404).send({ + success: false, + message: 'Department not found.' + }); + } + + reply.code(200).send({ + success: true, + message: 'Designation data retrieved successfully.', + data: department + }); + } catch (error) { + console.error('Error fetching department data:', error); + reply.code(500).send({ + success: false, + message: 'Failed to retrieve department data.', + error: error.message, + }); + } + }; + + exports.getalldesgination = async (req, reply) => { + try { + await Desgination.find() + .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); + } + }; + + exports.deletedesginationInfo = async (req, reply) => { + try { + const desginationId = req.params.desginationId; + + const department = await Desgination.findOneAndDelete({ desginationId:desginationId }); + + reply.send({ status_code: 200, message: 'Delete Sucessfully', department}); + } catch (err) { + throw boom.boomify(err); + } + }; + + + exports.editdesgination = async (request, reply) => { + try { + const { desginationId } = request.params; + const { + + phone, + city, + state, + country, + zone, + address1, + address2, + pincode, + desginationName + + } = request.body; + + + const existing = await Desgination.findOne({ desginationId }); + if (!existing) { + return reply.status(404).send({ message: 'Designation not found' }); + } + + const phoneExists = await Desgination.findOne({ phone, desginationId: { $ne: desginationId } }); + if (phoneExists) { + return reply.status(400).send({ message: 'Phone is already registered to another user' }); + } + + + existing.phone = phone || existing.phone; + existing.city = city || existing.city; + existing.state = state || existing.state; + existing.country = country || existing.country; + existing.zone = zone || existing.zone; + existing.desginationName = desginationName || existing.desginationName; + existing.pincode = pincode || existing.pincode; + + existing.address1 = address1 || existing.address1; + existing.address2 = address2 || existing.address2; + + + + await existing.save(); + + reply.send({ message: 'Designation user updated successfully' }); + } catch (err) { + reply.status(500).send({ message: err.message }); + } + }; diff --git a/src/models/Department.js b/src/models/Department.js index b44fddcd..ecd3fc8d 100644 --- a/src/models/Department.js +++ b/src/models/Department.js @@ -36,7 +36,40 @@ const departmentSchema = new mongoose.Schema( ); + const desginationSchema = new mongoose.Schema( + { + desginationId:{type:String}, + desginationName: { type: String }, + phone: { type: String, unique: true, trim: true }, + address1: String, + address2: String, + pincode: { type: String }, + zone: { type: String }, + city: { type: String }, + state: String, + country: String, + services: { password: { bcrypt: String } }, + createdAt: { + type: Date, + default: function () { + return Date.now(); + }, + }, + createdBy: ObjectId, + updatedAt: { + type: Date, + default: function () { + return Date.now(); + }, + }, + updatedBy: ObjectId, + }, + { versionKey: false } + ); + + const Department = mongoose.model('Department', departmentSchema); + const Desgination = mongoose.model('Desgination', desginationSchema); - module.exports = { Department}; + module.exports = { Department,Desgination}; diff --git a/src/routes/departmentRoute.js b/src/routes/departmentRoute.js index 397fefbe..4ac5d025 100644 --- a/src/routes/departmentRoute.js +++ b/src/routes/departmentRoute.js @@ -131,6 +131,136 @@ module.exports = function (fastify, opts, next) { }, handler: departmentController.editdepartment, }); + + + fastify.route({ + method: "POST", + url: "/api/desginationSignup", + schema: { + tags: ["Department"], + description: "This is for creating a new Desgination Account", + summary: "This is for creating a new Desgination Account", + body: { + type: "object", + //required: ["phone", "username", "password", "role"], // Add role to required fields + properties: { + phone: { type: "string" }, + password: { type: "string" }, + city: { type: "string" }, + state: { type: "string" }, + country: { type: "string" }, + address1: { type: "string" }, + address2: { type: "string" }, + zone: { type: "string" }, + pincode: { type: "string" }, + desginationName: { type: "string" }, + + }, + }, + security: [ + { + basicAuth: [], + }, + ], + }, + handler: departmentController.addDesgination, + }); + + fastify.get("/api/getSingledesginationData/:desginationId", { + schema: { + tags: ["Department"], + description: "This is for Get Single desginationId Data", + summary: "This is to Get Single desginationId Data", + params: { + type: "object", + properties: { + desginationId: { + type: "string", + description: "desginationId", + }, + }, + }, + + security: [ + { + basicAuth: [], + }, + ], + }, + handler: departmentController.getSinledesginationData, + }); + + fastify.get("/api/getalldesginations", { + schema: { + tags: ["Department"], + description: "This is for Get all designation Data", + summary: "This is for to Get all designation Data", + + security: [ + { + basicAuth: [], + }, + ], + }, + //preHandler: fastify.auth([fastify.authenticate]), + handler: departmentController.getalldesgination, + }); + + fastify.delete("/api/deletedesignation/:desginationId", { + schema: { + description: "Delete a desgination by desginationId", + tags: ["Department"], + summary: "Delete a user by desginationId", + params: { + type: "object", + properties: { + desginationId: { type: "string" }, + }, + required: ["desginationId"], + }, + response: { + 200: { + type: "object", + properties: { + success: { type: "boolean" }, + message: { type: "string" }, + } + } + } + }, + handler: departmentController.deletedesginationInfo, + }); + + fastify.put('/api/editdesgination/:desginationId', { + schema: { + description: "Edit Desgination details by desginationId", + tags: ["Department"], + summary: "Edit Desgination details.", + params: { + type: "object", + properties: { + desginationId: { type: "string" }, + }, + required: ["desginationId"], + }, + body: { + type: "object", + properties: { + phone: { type: "string" }, + city: { type: "string" }, + state: { type: "string" }, + country: { type: "string" }, + address1: { type: "string" }, + address2: { type: "string" }, + zone: { type: "string" }, + pincode: { type: "string" }, + desginationName: { type: "string" }, + + }, + } + }, + handler: departmentController.editdesgination, + }); next(); }; \ No newline at end of file