diff --git a/src/controllers/write/categories.js b/src/controllers/write/categories.js index bb4ec84090..32510c50ad 100644 --- a/src/controllers/write/categories.js +++ b/src/controllers/write/categories.js @@ -1,107 +1,109 @@ -'use strict'; - -const categories = require('../../categories'); -const meta = require('../../meta'); -const api = require('../../api'); - -const helpers = require('../helpers'); - -const Categories = module.exports; - -Categories.list = async (req, res) => { - helpers.formatApiResponse(200, res, await api.categories.list(req)); +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; }; - -Categories.get = async (req, res) => { - helpers.formatApiResponse(200, res, await api.categories.get(req, req.params)); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.delete = exports.setModerator = exports.setPrivilege = exports.getPrivileges = exports.setWatchState = exports.getTopics = exports.getChildren = exports.getPosts = exports.getTopicCount = exports.deleteCategories = exports.update = exports.create = exports.get = exports.list = void 0; +const categories_1 = __importDefault(require("../../categories")); +const meta_1 = __importDefault(require("../../meta")); +const api_1 = __importDefault(require("../../api")); +const helpers_1 = __importDefault(require("../helpers")); +const list = async (req, res) => { + await helpers_1.default.formatApiResponse(200, res, await api_1.default.categories.list(req)); }; - -Categories.create = async (req, res) => { - const response = await api.categories.create(req, req.body); - helpers.formatApiResponse(200, res, response); +exports.list = list; +const get = async (req, res) => { + await helpers_1.default.formatApiResponse(200, res, await api_1.default.categories.get(req, req.params)); }; - -Categories.update = async (req, res) => { - await api.categories.update(req, { - cid: req.params.cid, - values: req.body, - }); - - const categoryObjs = await categories.getCategories([req.params.cid]); - helpers.formatApiResponse(200, res, categoryObjs[0]); +exports.get = get; +const create = async (req, res) => { + const response = await api_1.default.categories.create(req, req.body); + await helpers_1.default.formatApiResponse(200, res, response); }; - -Categories.delete = async (req, res) => { - await api.categories.delete(req, { cid: req.params.cid }); - helpers.formatApiResponse(200, res); +exports.create = create; +const update = async (req, res) => { + await api_1.default.categories.update(req, { + cid: req.params.cid, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + values: req.body, + }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + const categoryObjs = await categories_1.default.getCategories([req.params.cid]); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + await helpers_1.default.formatApiResponse(200, res, categoryObjs[0]); }; - -Categories.getTopicCount = async (req, res) => { - helpers.formatApiResponse(200, res, await api.categories.getTopicCount(req, { ...req.params })); +exports.update = update; +const deleteCategories = async (req, res) => { + await api_1.default.categories.delete(req, { cid: req.params.cid }); + await helpers_1.default.formatApiResponse(200, res); }; - -Categories.getPosts = async (req, res) => { - const posts = await api.categories.getPosts(req, { ...req.params }); - helpers.formatApiResponse(200, res, { posts }); +exports.deleteCategories = deleteCategories; +exports.delete = exports.deleteCategories; +const getTopicCount = async (req, res) => { + await helpers_1.default.formatApiResponse(200, res, await api_1.default.categories.getTopicCount(req, Object.assign({}, req.params))); }; - -Categories.getChildren = async (req, res) => { - const { cid } = req.params; - const { start } = req.query; - helpers.formatApiResponse(200, res, await api.categories.getChildren(req, { cid, start })); +exports.getTopicCount = getTopicCount; +const getPosts = async (req, res) => { + const posts = await api_1.default.categories.getPosts(req, Object.assign({}, req.params)); + await helpers_1.default.formatApiResponse(200, res, { posts }); }; - -Categories.getTopics = async (req, res) => { - const { cid } = req.params; - const result = await api.categories.getTopics(req, { ...req.query, cid }); - - helpers.formatApiResponse(200, res, result); +exports.getPosts = getPosts; +const getChildren = async (req, res) => { + const { cid } = req.params; + const { start } = req.query; + await helpers_1.default.formatApiResponse(200, res, await api_1.default.categories.getChildren(req, { cid, start })); }; - -Categories.setWatchState = async (req, res) => { - const { cid } = req.params; - let { uid, state } = req.body; - - if (req.method === 'DELETE') { - // DELETE is always setting state to system default in acp - state = categories.watchStates[meta.config.categoryWatchState]; - } else if (Object.keys(categories.watchStates).includes(state)) { - state = categories.watchStates[state]; // convert to integer for backend processing - } else { - throw new Error('[[error:invalid-data]]'); - } - - const { cids: modified } = await api.categories.setWatchState(req, { cid, state, uid }); - - helpers.formatApiResponse(200, res, { modified }); +exports.getChildren = getChildren; +const getTopics = async (req, res) => { + const { cid } = req.params; + const result = await api_1.default.categories.getTopics(req, Object.assign(Object.assign({}, req.query), { cid })); + await helpers_1.default.formatApiResponse(200, res, result); }; - -Categories.getPrivileges = async (req, res) => { - const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid }); - helpers.formatApiResponse(200, res, privilegeSet); +exports.getTopics = getTopics; +const setWatchState = async (req, res) => { + const { cid } = req.params; + let { uid, state } = req.body; + if (req.method === 'DELETE') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + state = categories_1.default.watchStates[meta_1.default.config.categoryWatchState]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument + } + else if (Object.keys(categories_1.default.watchStates).includes(state)) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + state = categories_1.default.watchStates[state]; + } + else { + throw new Error('[[error:invalid-data]]'); + } + const { cids: modified } = await api_1.default.categories.setWatchState(req, { cid, state, uid }); + await helpers_1.default.formatApiResponse(200, res, { modified }); }; - -Categories.setPrivilege = async (req, res) => { - const { cid, privilege } = req.params; - - await api.categories.setPrivilege(req, { - cid, - privilege, - member: req.body.member, - set: req.method === 'PUT', - }); - - const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid }); - helpers.formatApiResponse(200, res, privilegeSet); +exports.setWatchState = setWatchState; +const getPrivileges = async (req, res) => { + const privilegeSet = await api_1.default.categories.getPrivileges(req, { cid: req.params.cid }); + await helpers_1.default.formatApiResponse(200, res, privilegeSet); }; - -Categories.setModerator = async (req, res) => { - await api.categories.setModerator(req, { - cid: req.params.cid, - member: req.params.uid, - set: req.method === 'PUT', - }); - - const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid }); - helpers.formatApiResponse(200, res, privilegeSet); +exports.getPrivileges = getPrivileges; +const setPrivilege = async (req, res) => { + const { cid, privilege } = req.params; + await api_1.default.categories.setPrivilege(req, { + cid, + privilege, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + member: req.body.member, + set: req.method === 'PUT', + }); + const privilegeSet = await api_1.default.categories.getPrivileges(req, { cid: req.params.cid }); + await helpers_1.default.formatApiResponse(200, res, privilegeSet); }; +exports.setPrivilege = setPrivilege; +const setModerator = async (req, res) => { + await api_1.default.categories.setModerator(req, { + cid: req.params.cid, + member: req.params.uid, + set: req.method === 'PUT', + }); + const privilegeSet = await api_1.default.categories.getPrivileges(req, { cid: req.params.cid }); + await helpers_1.default.formatApiResponse(200, res, privilegeSet); +}; +exports.setModerator = setModerator; diff --git a/src/controllers/write/categories.ts b/src/controllers/write/categories.ts new file mode 100644 index 0000000000..4df5394be0 --- /dev/null +++ b/src/controllers/write/categories.ts @@ -0,0 +1,129 @@ +import categories from '../../categories'; +import meta from '../../meta'; +import api from '../../api'; +import helpers from '../helpers'; +// Interfaces + +interface Params { + cid: string; + privilege?: string; + uid?: string; +} + +interface Request { + params: Params; + body: any; + query: { start?: number }; + method: string; +} + +interface Response { + status: (code: number) => void; + json: (data: any) => void; +} + +interface WatchStateRequest extends Request { + body: { + uid: string; + state: string; + }; +} + +export const list = async (req: Request, res: Response) => { + await helpers.formatApiResponse(200, res, await api.categories.list(req)); +}; + +export const get = async (req: Request, res: Response): Promise => { + await helpers.formatApiResponse(200, res, await api.categories.get(req, req.params)); +}; + +export const create = async (req: Request, res: Response): Promise => { + const response: unknown = await api.categories.create(req, req.body); + await helpers.formatApiResponse(200, res, response); +}; + +export const update = async (req: Request, res: Response): Promise => { + await api.categories.update(req, { + cid: req.params.cid, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + values: req.body, + }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + const categoryObjs = await categories.getCategories([req.params.cid]); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + await helpers.formatApiResponse(200, res, categoryObjs[0]); +}; + +export const deleteCategories = async (req: Request, res: Response): Promise => { + await api.categories.delete(req, { cid: req.params.cid }); + await helpers.formatApiResponse(200, res); +}; + +export const getTopicCount = async (req: Request, res: Response): Promise => { + await helpers.formatApiResponse(200, res, await api.categories.getTopicCount(req, { ...req.params })); +}; + +export const getPosts = async (req: Request, res: Response): Promise => { + const posts: unknown = await api.categories.getPosts(req, { ...req.params }); + await helpers.formatApiResponse(200, res, { posts }); +}; + +export const getChildren = async (req: Request, res: Response): Promise => { + const { cid } = req.params; + const { start } = req.query; + await helpers.formatApiResponse(200, res, await api.categories.getChildren(req, { cid, start })); +}; + +export const getTopics = async (req: Request, res: Response): Promise => { + const { cid } = req.params; + const result: unknown = await api.categories.getTopics(req, { ...req.query, cid }); + await helpers.formatApiResponse(200, res, result); +}; + +export const setWatchState = async (req: WatchStateRequest, res: Response): Promise => { + const { cid } = req.params; + let { uid, state } = req.body; + + if (req.method === 'DELETE') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + state = categories.watchStates[meta.config.categoryWatchState]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument + } else if (Object.keys(categories.watchStates).includes(state)) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + state = categories.watchStates[state]; + } else { + throw new Error('[[error:invalid-data]]'); + } + + const { cids: modified } = await api.categories.setWatchState(req, { cid, state, uid }); + await helpers.formatApiResponse(200, res, { modified }); +}; + +export const getPrivileges = async (req: Request, res: Response): Promise => { + const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid }); + await helpers.formatApiResponse(200, res, privilegeSet); +}; + +export const setPrivilege = async (req: Request, res: Response): Promise => { + const { cid, privilege } = req.params; + await api.categories.setPrivilege(req, { + cid, + privilege, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + member: req.body.member, + set: req.method === 'PUT', + }); + const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid }); + await helpers.formatApiResponse(200, res, privilegeSet); +}; + +export const setModerator = async (req: Request, res: Response): Promise => { + await api.categories.setModerator(req, { + cid: req.params.cid, + member: req.params.uid, + set: req.method === 'PUT', + }); + const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid }); + await helpers.formatApiResponse(200, res, privilegeSet); +}; +export { deleteCategories as delete }; diff --git a/src/dummy.js b/src/dummy.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tsconfig.json b/tsconfig.json index 10aeeef7e6..529edaed8d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,17 +1,17 @@ { "compilerOptions": { "allowJs": false, - "target": "es6", + "target": "es2017", "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, }, "include": [ "public/src/**/*", - "src/**/*", + "src/**/*", "test/**/*", ], - "exclude":[ + "exclude": [ "node_modules", ] } \ No newline at end of file