announcement sort fix

This commit is contained in:
ROSHAN GARG 2024-10-14 10:06:13 +05:30
parent d15bddf3e1
commit a18f5d42ee
4 changed files with 137 additions and 0 deletions

9
app.js
View File

@ -202,6 +202,9 @@ import RDOrderRoute from "./resources/RD_Ordes/rdOrderRoutes.js"
import TaskRoute from "./resources/Task/TaskRoute.js"; import TaskRoute from "./resources/Task/TaskRoute.js";
// visit RD and PD // visit RD and PD
import VisitRDandPDRoute from "./resources/VisitRD&PD/VisitRD&PDRoute.js"; import VisitRDandPDRoute from "./resources/VisitRD&PD/VisitRD&PDRoute.js";
// announcement
import AnnouncementRoute from './resources/Announcement/announcementRouter.js'
//Stock //Stock
import Stock from "./resources/Stock/StockRoute.js"; import Stock from "./resources/Stock/StockRoute.js";
app.use("/api/v1", user); app.use("/api/v1", user);
@ -286,6 +289,12 @@ app.use("/api",RDRoute)
app.use("/api",RDOrderRoute) app.use("/api",RDOrderRoute)
// visit RD and PD // visit RD and PD
app.use("/api", VisitRDandPDRoute); app.use("/api", VisitRDandPDRoute);
// Announcemnt
app.use('/api',AnnouncementRoute)
//config specialty //config specialty
// app.use("/api/config/specialty", SpecialtiesRouter); // app.use("/api/config/specialty", SpecialtiesRouter);
//specialties //specialties

View 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" });
}
};

View 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
);

View 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;