import {Router} from "express"; import { register, login, getById, getByUsername, update, deleteUser, getChannel, getHistory, isSubscribed, verifyEmail, searchByUsername, getAllSubscriptions, getAllSubscriptionVideos } from "../controllers/user.controller.js"; import { UserRegister, doEmailExists, doUsernameExists, doUserExists, isOwner, UserLogin, User, UserRequest, UserSearch } from "../middlewares/user.middleware.js"; import validator from "../middlewares/error.middleware.js"; import {isTokenValid} from "../middlewares/jwt.middleware.js"; import {addLogger} from "../middlewares/logger.middleware.js"; import {profileUpload} from "../middlewares/file.middleware.js"; import {Channel} from "../middlewares/channel.middleware.js"; const router = Router(); // REGISTER A USER router.post("/", [profileUpload.single("profile"), addLogger, UserRegister.email, UserRegister.username, UserRegister.password, validator, doEmailExists, doUsernameExists], register); // LOGIN A USER router.post("/login", [addLogger, UserLogin.username, UserLogin.password, validator], login) // SEARCH BY USERNAME router.get("/search", [addLogger, isTokenValid, UserSearch.username, validator], searchByUsername); // GET USER BY ID router.get("/:id", [addLogger, isTokenValid, User.id, validator], getById) // GET USER BY USERNAME router.get("/username/:username", [addLogger, isTokenValid, UserRequest.username, validator], getByUsername); // UPDATE USER router.put("/:id", [addLogger, isTokenValid, User.id, UserRegister.email, UserRegister.username, validator, doUserExists, isOwner], update); // DELETE USER router.delete("/:id", [addLogger, isTokenValid, User.id, validator, doUserExists, isOwner], deleteUser); // GET USER CHANNEL router.get("/:id/channel", [addLogger, isTokenValid, User.id, validator], getChannel); // GET USER HISTORY router.get("/:id/history", [addLogger, isTokenValid, User.id, validator], getHistory); // CHECK IF SUBSCRIBED TO CHANNEL router.get("/:id/channel/subscribed", [addLogger, isTokenValid, User.id, Channel.id, validator], isSubscribed) // VERIFY EMAIL router.post("/verify-email", [addLogger, validator], verifyEmail); // GET ALL SUBSCRIPTIONS router.get("/:id/subscriptions", [addLogger, isTokenValid, User.id, validator, doUserExists], getAllSubscriptions); // GET ALL SUBSCRIPTIONS VIDEOS router.get("/:id/subscriptions/videos", [addLogger, isTokenValid, User.id, validator, doUserExists], getAllSubscriptionVideos); export default router;