Files
ostandari/server/controllers/adminLogController.js
T
2024-11-18 18:56:14 +03:30

82 lines
2.4 KiB
JavaScript

const { validationResult, query } = require("express-validator");
const Logger = require("../models/Logger");
const { paginationOptions } = require("../plugins/pagination");
// get admin login logs with optional filtering and pagination
module.exports.getAdminLoginLogs = [
[
query("page")
.optional()
.isInt({ min: 1 })
.withMessage("Page must be a positive integer."),
query("limit")
.optional()
.isInt({ min: 1 })
.withMessage("Limit must be a positive integer."),
query("sort")
.optional()
.isIn(["asc", "desc"])
.withMessage('Sort must be either "asc" or "desc".'),
query("fromDate")
.optional()
.isISO8601()
.withMessage("From date must be a valid date."),
query("toDate")
.optional()
.isISO8601()
.withMessage("To date must be a valid date."),
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty())
return res.status(422).json({ validation: errors.mapped() });
try {
const {
page = 1,
limit = 10,
sort = "desc",
fromDate,
toDate,
} = req?.query;
const filters = {};
if (fromDate) filters.LastLogin = { $gte: new Date(fromDate) };
if (toDate)
filters.LastLogin = { ...filters.LastLogin, $lte: new Date(toDate) };
const options = paginationOptions({ page, limit, sort });
const logs = await Logger.find(filters)
.populate({ path: "user", select: { password: 0 } })
.sort({ updated_at: sort === "desc" ? -1 : 1 })
.skip(options.skip)
.limit(options.limit);
const totalLogs = await Logger.countDocuments(filters);
const totalPages = Math.ceil(totalLogs / options.limit);
return res.status(200).json({
logs: logs.map((log) => {
log.LastLogin = new Date(log.LastLogin).toLocaleString("fa-IR", {
timeZone: "Asia/Tehran",
// hour: "2-digit",
// minute: "2-digit",
// day: "2-digit",
// month: "2-digit",
// weekday: "short",
// year: "2-digit",
// timeZoneName: "long",
});
return log;
}),
page: options.page,
totalPages,
totalLogs,
});
} catch (error) {
console.error("Error fetching admin login logs:", error);
return res.status(500).json({ message: "Server error occurred." });
}
},
];