Merge branch 'main' of https://git.cnapp.co.in/gitadmin/api
This commit is contained in:
commit
5f76483841
9
app.js
9
app.js
@ -202,6 +202,9 @@ import RDOrderRoute from "./resources/RD_Ordes/rdOrderRoutes.js"
|
||||
import TaskRoute from "./resources/Task/TaskRoute.js";
|
||||
// visit RD and PD
|
||||
import VisitRDandPDRoute from "./resources/VisitRD&PD/VisitRD&PDRoute.js";
|
||||
// announcement
|
||||
import AnnouncementRoute from './resources/Announcement/announcementRouter.js'
|
||||
|
||||
//Stock
|
||||
import Stock from "./resources/Stock/StockRoute.js";
|
||||
app.use("/api/v1", user);
|
||||
@ -286,6 +289,12 @@ app.use("/api",RDRoute)
|
||||
app.use("/api",RDOrderRoute)
|
||||
// visit RD and PD
|
||||
app.use("/api", VisitRDandPDRoute);
|
||||
|
||||
// Announcemnt
|
||||
|
||||
app.use('/api',AnnouncementRoute)
|
||||
|
||||
|
||||
//config specialty
|
||||
// app.use("/api/config/specialty", SpecialtiesRouter);
|
||||
//specialties
|
||||
|
60
resources/Announcement/announcementController.js
Normal file
60
resources/Announcement/announcementController.js
Normal file
@ -0,0 +1,60 @@
|
||||
import { AnnouncemntModal } from "./announcementModal.js";
|
||||
|
||||
export const createAnnouncemnet = async (req, res) => {
|
||||
const { sentTo, message } = req.body;
|
||||
|
||||
if (!sentTo || !message) {
|
||||
return res.status(400).send("Send to and message are required");
|
||||
}
|
||||
|
||||
try {
|
||||
const newAnnouncement = new AnnouncemntModal({ sentTo, message });
|
||||
await newAnnouncement.save();
|
||||
res.status(201).json({ message: "Announcement created" });
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
res.status(500).json({ error: "Server error" });
|
||||
}
|
||||
};
|
||||
|
||||
export const getAnnouncements = async (req, res) => {
|
||||
const { page = 1, rowsPerPage = 5 } = req.query;
|
||||
|
||||
try {
|
||||
// Calculate pagination parameters
|
||||
const skip = (page - 1) * rowsPerPage;
|
||||
const limit = parseInt(rowsPerPage, 10);
|
||||
|
||||
// Get total count of announcements
|
||||
const totalAnnouncements = await AnnouncemntModal.countDocuments();
|
||||
|
||||
// Fetch announcements with pagination
|
||||
const announcements = await AnnouncemntModal.find()
|
||||
.skip(skip)
|
||||
.limit(limit)
|
||||
.sort({ createdAt: -1 }); // Sort by timestamp (most recent first)
|
||||
|
||||
res.status(200).json({
|
||||
announcements,
|
||||
totalAnnouncements,
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: "Error fetching announcements", error });
|
||||
}
|
||||
};
|
||||
|
||||
// Get announcements for a specific role (RDs, PDs, SCs, or TMs)
|
||||
// Controller to get announcements for a specific role
|
||||
export const getAnnouncementsByRole = async (req, res) => {
|
||||
try {
|
||||
// Extract role from the URL path, e.g., 'RDs', 'PDs', etc.
|
||||
const role = req.path.split("/").pop();
|
||||
console.log("role");
|
||||
|
||||
const announcements = await AnnouncemntModal.find({ sentTo: role });
|
||||
res.status(200).json(announcements);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
res.status(500).json({ error: "Server error" });
|
||||
}
|
||||
};
|
35
resources/Announcement/announcementModal.js
Normal file
35
resources/Announcement/announcementModal.js
Normal file
@ -0,0 +1,35 @@
|
||||
import mongoose from "mongoose";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
const announcementSchema = new mongoose.Schema(
|
||||
{
|
||||
uniqueId: {
|
||||
type: String,
|
||||
unique: true,
|
||||
},
|
||||
sentTo: {
|
||||
type: [String],
|
||||
enum: ["PDs", "RDs", "SCs", "TMs"],
|
||||
required: true,
|
||||
},
|
||||
message: {
|
||||
type: String,
|
||||
required: true,
|
||||
maxlength: 250,
|
||||
},
|
||||
},
|
||||
{ timestamps: true }
|
||||
);
|
||||
|
||||
// Pre-save middleware to dynamically generate a uniqueId before saving
|
||||
announcementSchema.pre("save", function (next) {
|
||||
if (!this.uniqueId) {
|
||||
this.uniqueId = nanoid(6); // Generate a 6-character unique ID
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
export const AnnouncemntModal = mongoose.model(
|
||||
"Announcements",
|
||||
announcementSchema
|
||||
);
|
33
resources/Announcement/announcementRouter.js
Normal file
33
resources/Announcement/announcementRouter.js
Normal file
@ -0,0 +1,33 @@
|
||||
import express from "express";
|
||||
import { authorizeRoles, isAuthenticatedUser } from "../../middlewares/auth.js";
|
||||
import {
|
||||
createAnnouncemnet,
|
||||
getAnnouncements,
|
||||
getAnnouncementsByRole,
|
||||
} from "./announcementController.js";
|
||||
import { isAuthenticatedRD } from "../../middlewares/rdAuth.js";
|
||||
import { isAuthenticatedSalesCoOrdinator } from "../../middlewares/SalesCoOrdinatorAuth.js";
|
||||
import { isAuthenticatedTerritoryManager } from "../../middlewares/TerritoryManagerAuth.js";
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router
|
||||
.route("/announcement/create")
|
||||
.post(isAuthenticatedUser, authorizeRoles("admin"), createAnnouncemnet);
|
||||
router
|
||||
.route("/announcement/get")
|
||||
.get(isAuthenticatedUser, authorizeRoles("admin"), getAnnouncements);
|
||||
router
|
||||
.route("/announcement/RDs")
|
||||
.get(isAuthenticatedRD, getAnnouncementsByRole);
|
||||
router
|
||||
.route("/announcement/PDs")
|
||||
.get(isAuthenticatedUser, getAnnouncementsByRole);
|
||||
router
|
||||
.route("/announcement/SCs")
|
||||
.get(isAuthenticatedSalesCoOrdinator, getAnnouncementsByRole);
|
||||
router
|
||||
.route("/announcement/TMs")
|
||||
.get(isAuthenticatedTerritoryManager, getAnnouncementsByRole);
|
||||
|
||||
export default router;
|
Loading…
Reference in New Issue
Block a user