import { Request, Response } from "express"; import { getIO } from "../libs/socket"; import CheckSettingsHelper from "../helpers/CheckSettings"; import AppError from "../errors/AppError"; import CreateUserService from "../services/UserServices/CreateUserService"; import ListUsersService from "../services/UserServices/ListUsersService"; import UpdateUserService from "../services/UserServices/UpdateUserService"; import ShowUserService from "../services/UserServices/ShowUserService"; import DeleteUserService from "../services/UserServices/DeleteUserService"; import ListUserParamiterService from "../services/UserServices/ListUserParamiterService" import User from "../models/User"; import { startWhoIsOnlineMonitor, stopWhoIsOnlineMonitor } from "../helpers/WhoIsOnlineMonitor" import UserOnlineTIme from '../models/UserOnlineTime' type IndexQuery = { searchParam: string; pageNumber: string; profile?: string; }; export const index = async (req: Request, res: Response): Promise => { const { searchParam, pageNumber, profile } = req.query as IndexQuery; const { users, count, hasMore } = await ListUsersService({ searchParam, pageNumber, profile }); if (req.user.profile !== 'master') { let auxUsers: Array = []; for (var user of users) { if (user.profile !== 'master') { auxUsers.push(user) } } return res.json({ users: auxUsers, count, hasMore }); } return res.json({ users, count, hasMore }); // const { users, count, hasMore } = await ListUsersService({ // searchParam, // pageNumber // }); // if(req.user.profile!=='master'){ // let auxUsers: Array = []; // for (var user of users) { // if(user.profile!=='master'){ // auxUsers.push(user) // } // } // return res.json({ users: auxUsers, count, hasMore }); // } // return res.json({ users, count, hasMore }); }; export const store = async (req: Request, res: Response): Promise => { const { email, password, name, profile, queueIds } = req.body; if (req.url === "/signup" && (await CheckSettingsHelper("userCreation")) === "disabled") { throw new AppError("ERR_USER_CREATION_DISABLED", 403); } else if (req.url !== "/signup" && req.user.profile !== "master") { throw new AppError("ERR_NO_PERMISSION", 403); } const user = await CreateUserService({ email, password, name, profile, queueIds }); const io = getIO(); io.emit("user", { action: "create", user }); // await stopWhoIsOnlineMonitor() await startWhoIsOnlineMonitor() return res.status(200).json(user); }; export const show = async (req: Request, res: Response): Promise => { const { userId } = req.params; const user = await ShowUserService(userId); return res.status(200).json(user); }; export const logoutUser = async (req: Request, res: Response): Promise => { const { userId } = req.params; await stopWhoIsOnlineMonitor() let onlineTime = { userId: userId, status: 'logout...' } const io = getIO(); io.emit("onlineStatus", { action: "logout", userOnlineTime: onlineTime }); await startWhoIsOnlineMonitor() // return res.status(200).json({}); }; export const update = async ( req: Request, res: Response ): Promise => { if (req.user.profile !== "admin" && req.user.profile !== "master") { throw new AppError("ERR_NO_PERMISSION", 403); } const { userId } = req.params; const userData = req.body; const user = await UpdateUserService({ userData, userId }); const io = getIO(); io.emit("user", { action: "update", user }); return res.status(200).json(user); }; export const remove = async ( req: Request, res: Response ): Promise => { const { userId } = req.params; if (req.user.profile !== "master") { throw new AppError("ERR_NO_PERMISSION", 403); } await DeleteUserService(userId); const io = getIO(); io.emit("user", { action: "delete", userId }); //test del await stopWhoIsOnlineMonitor() io.emit("onlineStatus", { action: "delete", userOnlineTime: userId }); await startWhoIsOnlineMonitor() // return res.status(200).json({ message: "User deleted" }); };