import {Router} from "express"; import {create, del, getAll, getById, getStats, toggleSubscription, update} from "../controllers/channel.controller.js"; import {isTokenValid} from "../middlewares/jwt.middleware.js"; import { Channel, ChannelCreate, doChannelExists, doChannelNameExists, doUserHaveChannel, isOwner } from "../middlewares/channel.middleware.js"; import validator from "../middlewares/error.middleware.js"; import {doUserExistsBody, isOwnerBody} from "../middlewares/user.middleware.js"; import {addLogger} from "../middlewares/logger.middleware.js"; const router = Router(); /** * @swagger * tags: * name: Channels * description: API for managing channels * /: * post: * summary: Create a new channel * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * name: * type: string * description: * type: string * owner: * type: string * responses: * 201: * description: Channel created successfully * content: * application/json: * schema: * type: object * properties: * id: * type: string * name: * type: string * description: * type: string * owner: * type: string */ router.post("/", [addLogger, isTokenValid, ChannelCreate.name, ChannelCreate.description, ChannelCreate.owner, validator, doUserExistsBody, doUserHaveChannel, isOwnerBody, doChannelNameExists], create); // GET CHANNEL BY ID router.get("/:id", [addLogger, Channel.id, validator, doChannelExists], getById); // GET ALL CHANNEL router.get("/", [addLogger, isTokenValid], getAll); // UPDATE CHANNEl router.put("/:id", [addLogger, isTokenValid, Channel.id, ChannelCreate.name, ChannelCreate.description, validator, doChannelExists, isOwner], update); // DELETE CHANNEL router.delete("/:id", [addLogger, isTokenValid, Channel.id, validator, doChannelExists, isOwner], del); // TOGGLE SUBSCRIPTION router.post("/:id/subscribe", [addLogger, isTokenValid, Channel.id, validator, doChannelExists], toggleSubscription); // GET TOTAL VIEWS AND SUBSCRIBERS OF THE CHANNEL router.get("/:id/stats", [addLogger, isTokenValid, Channel.id, validator, doChannelExists, isOwner], getStats); export default router;