announcement sort fix
This commit is contained in:
parent
d15bddf3e1
commit
a18f5d42ee
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";
|
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
|
||||||
|
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