UNPKG

burdy

Version:

Open Source Headless Platform

161 lines (160 loc) 7.72 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const auth_middleware_1 = __importDefault(require("../middleware/auth.middleware")); const async_middleware_1 = __importDefault(require("../middleware/async.middleware")); const typeorm_1 = require("typeorm"); const tag_model_1 = __importDefault(require("../models/tag.model")); const yup = __importStar(require("yup")); const bad_request_error_1 = __importDefault(require("../errors/bad-request-error")); const orm_helpers_1 = require("../common/orm-helpers"); const mappers_1 = require("../common/mappers"); const app = (0, express_1.default)(); app.get('/tags', (0, auth_middleware_1.default)(), (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { var _a; const search = (_a = req === null || req === void 0 ? void 0 : req.query) === null || _a === void 0 ? void 0 : _a.search; const tagRepository = (0, typeorm_1.getRepository)(tag_model_1.default); const tagsQb = tagRepository .createQueryBuilder('tag') .leftJoinAndSelect('tag.meta', 'meta') .leftJoinAndSelect('tag.author', 'author') .leftJoinAndSelect('author.meta', 'author.meta'); if ((search === null || search === void 0 ? void 0 : search.length) > 0) { const searchWhere = new typeorm_1.Brackets((qb) => { qb.where('LOWER(tag.name) LIKE :search', { search: `%${search.toLowerCase()}%`, }).orWhere('LOWER(tag.slug) LIKE :search', { search: `%${search.toLowerCase()}%`, }); }); tagsQb.where(searchWhere); } tagsQb.orderBy('tag.name', 'DESC'); const tags = yield tagsQb.getMany(); res.send(tags.map(mappers_1.mapTag)); }))); app.post('/tags', (0, auth_middleware_1.default)(['tags_create']), (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { yield req.validate({ name: yup.string().max(256).required(), slug: yup.string().max(256).required(), }, 'body'); const entityManager = (0, typeorm_1.getManager)(); const params = req.body; let tag; try { yield entityManager.transaction((transactionManager) => __awaiter(void 0, void 0, void 0, function* () { var _b; let parent; if (params.parentId) { parent = yield transactionManager.findOne(tag_model_1.default, { id: params.parentId, }); if (!parent) throw new bad_request_error_1.default('invalid_parent'); } const tagObj = { name: params.name, slug: params.slug, author: (_b = req === null || req === void 0 ? void 0 : req.data) === null || _b === void 0 ? void 0 : _b.user, }; if (parent) { tagObj.parent = parent; tagObj.slugPath = `${parent.slugPath}/${params.slug}`; } else { tagObj.slugPath = params.slug; } tag = yield transactionManager.save(tag_model_1.default, tagObj); })); } catch (err) { if ((err === null || err === void 0 ? void 0 : err.code) === '23505') { throw new bad_request_error_1.default('duplicate_slug'); } throw err; } return res.send((0, mappers_1.mapTag)(tag)); }))); app.delete('/tags', (0, auth_middleware_1.default)(['tags_delete']), (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { var _c; const ids = (_c = req === null || req === void 0 ? void 0 : req.body) !== null && _c !== void 0 ? _c : []; if (!ids || (ids === null || ids === void 0 ? void 0 : ids.length) === 0) return res.send([]); const tagRepository = (0, typeorm_1.getRepository)(tag_model_1.default); const deleted = yield tagRepository.delete({ id: (0, typeorm_1.In)(ids), }); return res.send(deleted); }))); app.put('/tags/:tagId', (0, auth_middleware_1.default)(['tags_update']), (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { const entityManager = (0, typeorm_1.getManager)(); let tag; try { yield entityManager.transaction((transactionManager) => __awaiter(void 0, void 0, void 0, function* () { var _d; const tagRepository = transactionManager.getRepository(tag_model_1.default); tag = yield tagRepository.findOne({ relations: ['meta', 'parent', 'author', 'author.meta'], where: { id: req.params.tagId, }, }); if (!tag) throw new bad_request_error_1.default('invalid_tag'); if (req.body.slug) { const newSlug = req.body.slug; const oldSlugPath = tag === null || tag === void 0 ? void 0 : tag.slugPath; const newSlugPath = (tag === null || tag === void 0 ? void 0 : tag.parent) ? `${(_d = tag === null || tag === void 0 ? void 0 : tag.parent) === null || _d === void 0 ? void 0 : _d.slugPath}/${req.body.slug}` : req.body.slug; tag.slug = newSlug; tag.slugPath = newSlugPath; yield transactionManager.query((0, orm_helpers_1.getReplaceChildrenQuery)('tag', 'slugPath', oldSlugPath, newSlugPath)); } if (req.body.name) { tag.name = req.body.name; } tag.updatedAt = new Date(); yield tagRepository.save(tag); })); } catch (err) { if ((err === null || err === void 0 ? void 0 : err.code) === '23505') { throw new bad_request_error_1.default('duplicate_slug'); } throw err; } res.send((0, mappers_1.mapTag)(tag)); }))); exports.default = app;