burdy
Version:
Open Source Headless Platform
161 lines (160 loc) • 7.72 kB
JavaScript
;
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;