mirror of
https://github.com/codex-team/codex.docs.git
synced 2025-08-08 06:55:26 +02:00
requested changes. Code improvements
This commit is contained in:
parent
e33a8062e7
commit
f16e984f1c
8 changed files with 176 additions and 148 deletions
|
@ -1,12 +1,17 @@
|
|||
const Model = require('../models/pageChildrenOrder');
|
||||
const Model = require('../models/pageOrder');
|
||||
|
||||
/**
|
||||
* @class PagesChildrenOrder
|
||||
* @classdesc PagesChildrenOrder controller
|
||||
* @class PagesOrder
|
||||
* @classdesc PagesOrder controller
|
||||
*
|
||||
* Manipulates with Pages: changes the order, deletes, updates and so on...
|
||||
*/
|
||||
class PagesChildrenOrder {
|
||||
class PagesOrder {
|
||||
/**
|
||||
* @param parentId
|
||||
* Returns Page's order
|
||||
*
|
||||
* @param {string} parentId - of which page we want to get children order
|
||||
* @returns {Promise<PageOrder>}
|
||||
*/
|
||||
static async get(parentId) {
|
||||
const order = await Model.get(parentId);
|
||||
|
@ -19,46 +24,53 @@ class PagesChildrenOrder {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param parentId
|
||||
* @param childId
|
||||
* @return {Promise<void>}
|
||||
* Pushes the child page to the parent's order list
|
||||
*
|
||||
* @param {string} parentId - parent page's id
|
||||
* @param {string} childId - new page pushed to the order
|
||||
*/
|
||||
static async push(parentId, childId) {
|
||||
const order = await Model.get(parentId);
|
||||
|
||||
order.pushChild(childId);
|
||||
order.push(childId);
|
||||
await order.save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Move one page to another Page's order
|
||||
*
|
||||
* @param {string} oldParentId - old parent page's id
|
||||
* @param {string} newParentId - new parent page's id
|
||||
* @param {string} childId - page's id which is changing the parent page
|
||||
*/
|
||||
static async renew(oldParentId, newParentId, childId) {
|
||||
const oldParentOrder = await Model.get(oldParentId);
|
||||
|
||||
oldParentOrder.removeChild(childId);
|
||||
oldParentOrder.remove(childId);
|
||||
oldParentOrder.save();
|
||||
|
||||
const newParentOrder = await Model.get(newParentId);
|
||||
|
||||
newParentOrder.pushChild(childId);
|
||||
newParentOrder.push(childId);
|
||||
await newParentOrder.save();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pages
|
||||
* @param currentPageId
|
||||
* @param parentPageId
|
||||
* @param ignoreSelf
|
||||
* Returns new array with ordered pages
|
||||
*
|
||||
* @param {Array<Page>} pages - list of all available pages
|
||||
* @param {string} currentPageId - page's id around which we are ordering
|
||||
* @param {string} parentPageId - parent page's id that contains page above
|
||||
* @param {Boolean} ignoreSelf - should we ignore current page in list or not
|
||||
* @return Array<Page>
|
||||
*/
|
||||
static async getOrderedChildren(pages, currentPageId, parentPageId, ignoreSelf = false) {
|
||||
const children = await PagesChildrenOrder.get(parentPageId);
|
||||
const children = await PagesOrder.get(parentPageId);
|
||||
const result = [];
|
||||
|
||||
children.order.forEach(pageId => {
|
||||
pages.forEach(page => {
|
||||
if (page._id === pageId && pageId !== currentPageId) {
|
||||
if (page._id === pageId && (pageId !== currentPageId || !ignoreSelf)) {
|
||||
result.push(page);
|
||||
}
|
||||
});
|
||||
|
@ -68,10 +80,9 @@ class PagesChildrenOrder {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param currentPageId
|
||||
* @param parentPageId
|
||||
* @param putAbovePageId
|
||||
* @return {Promise<void>}
|
||||
* @param {string} currentPageId - page's id that changes the order
|
||||
* @param {string} parentPageId - parent page's id that contains both two pages
|
||||
* @param {string} putAbovePageId - page's id above which we put the target page
|
||||
*/
|
||||
static async update(currentPageId, parentPageId, putAbovePageId) {
|
||||
const children = await Model.get(parentPageId);
|
||||
|
@ -93,4 +104,4 @@ class PagesChildrenOrder {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = PagesChildrenOrder;
|
||||
module.exports = PagesOrder;
|
|
@ -1,115 +0,0 @@
|
|||
const {pagesChildrenOrder: db} = require('../utils/database/index');
|
||||
|
||||
/**
|
||||
* PagesChildrenOrder
|
||||
*/
|
||||
class PageChildrenOrder {
|
||||
/**
|
||||
* Returns current Page's children order
|
||||
*
|
||||
* @param pageId
|
||||
*/
|
||||
static async get(pageId) {
|
||||
const childrenOrder = await db.findOne({pageId});
|
||||
|
||||
let data = {};
|
||||
|
||||
if (!childrenOrder) {
|
||||
data.pageId = pageId;
|
||||
} else {
|
||||
data = childrenOrder;
|
||||
}
|
||||
|
||||
return new PageChildrenOrder(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param data
|
||||
*/
|
||||
constructor(data) {
|
||||
if (data === null) {
|
||||
data = {};
|
||||
}
|
||||
|
||||
if (data._id) {
|
||||
this._id = data._id;
|
||||
}
|
||||
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* constructor data setter
|
||||
* @param pagesChildrenOrderData
|
||||
*/
|
||||
set data(pagesChildrenOrderData) {
|
||||
this._pageId = pagesChildrenOrderData.pageId || 0;
|
||||
this._childrenOrder = pagesChildrenOrderData.childrenOrder || [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return Page Children order
|
||||
*/
|
||||
get data() {
|
||||
return {
|
||||
_id: this._id,
|
||||
pageId: '' + this._pageId,
|
||||
childrenOrder: this._childrenOrder
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Pushes to the orders array
|
||||
* @param pageChild
|
||||
*/
|
||||
pushChild(pageChild) {
|
||||
this._childrenOrder.push(pageChild);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes child
|
||||
* @param pageChild
|
||||
*/
|
||||
removeChild(pageChild) {
|
||||
const found = this._childrenOrder.indexOf(pageChild);
|
||||
|
||||
if (found >= 0) {
|
||||
this._childrenOrder.splice(found, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {Array}
|
||||
*/
|
||||
get order() {
|
||||
return this._childrenOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save or update page data in the database
|
||||
*/
|
||||
async save() {
|
||||
if (!this._id) {
|
||||
const insertedRow = await db.insert(this.data);
|
||||
|
||||
this._id = insertedRow._id;
|
||||
} else {
|
||||
await db.update({_id: this._id}, this.data);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove page data from the database
|
||||
*/
|
||||
async destroy() {
|
||||
await db.remove({_id: this._id});
|
||||
|
||||
delete this._id;
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = PageChildrenOrder;
|
132
src/models/pageOrder.js
Normal file
132
src/models/pageOrder.js
Normal file
|
@ -0,0 +1,132 @@
|
|||
const {pagesOrder: db} = require('../utils/database/index');
|
||||
|
||||
/**
|
||||
* @typedef {Object} PageOrderData
|
||||
* @property {string} _id - row unique id
|
||||
* @property {string} page - page id
|
||||
* @property {Array<string>} order - list of ordered pages
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class PageOrder
|
||||
* @classdesc PageOrder
|
||||
*
|
||||
* Creates order for Pages with children
|
||||
*/
|
||||
class PageOrder {
|
||||
/**
|
||||
* Returns current Page's children order
|
||||
*
|
||||
* @param page
|
||||
*/
|
||||
static async get(page) {
|
||||
const order = await db.findOne({page});
|
||||
|
||||
let data = {};
|
||||
|
||||
if (!order) {
|
||||
data.page = page;
|
||||
} else {
|
||||
data = order;
|
||||
}
|
||||
|
||||
return new PageOrder(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
*
|
||||
* @param {PageOrderData} data
|
||||
*/
|
||||
constructor(data) {
|
||||
if (data === null) {
|
||||
data = {};
|
||||
}
|
||||
|
||||
if (data._id) {
|
||||
this._id = data._id;
|
||||
}
|
||||
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* constructor data setter
|
||||
* @param {PageOrderData} pageOrderData
|
||||
*/
|
||||
set data(pageOrderData) {
|
||||
this._page = pageOrderData.page || 0;
|
||||
this._order = pageOrderData.order || [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return Page Children order
|
||||
* @returns {PageOrderData}
|
||||
*/
|
||||
get data() {
|
||||
return {
|
||||
_id: this._id,
|
||||
page: '' + this._page,
|
||||
order: this._order
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Pushes page id to the orders array
|
||||
*
|
||||
* @param {string} pageId
|
||||
*/
|
||||
push(pageId) {
|
||||
this._order.push(pageId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes page id from orders array
|
||||
*
|
||||
* @param {string} pageId
|
||||
*/
|
||||
remove(pageId) {
|
||||
const found = this._order.indexOf(pageId);
|
||||
|
||||
if (found >= 0) {
|
||||
this._order.splice(found, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns ordered list
|
||||
*
|
||||
* @return {Array<string>}
|
||||
*/
|
||||
get order() {
|
||||
return this._order;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save or update page data in the database
|
||||
*/
|
||||
async save() {
|
||||
if (!this._id) {
|
||||
const insertedRow = await db.insert(this.data);
|
||||
|
||||
this._id = insertedRow._id;
|
||||
} else {
|
||||
await db.update({_id: this._id}, this.data);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove page data from the database
|
||||
*/
|
||||
async destroy() {
|
||||
await db.remove({_id: this._id});
|
||||
|
||||
delete this._id;
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = PageOrder;
|
|
@ -2,7 +2,7 @@ const express = require('express');
|
|||
const router = express.Router();
|
||||
const multer = require('multer')();
|
||||
const Pages = require('../../controllers/pages');
|
||||
const PagesChildrenOrder = require('../../controllers/pagesChildrenOrder');
|
||||
const PagesOrder = require('../../controllers/pagesOrder');
|
||||
|
||||
/**
|
||||
* GET /page/:id
|
||||
|
@ -57,7 +57,7 @@ router.put('/page', multer.any(), async (req, res) => {
|
|||
const page = await Pages.insert({title, body, parent});
|
||||
|
||||
/** push to the orders array */
|
||||
await PagesChildrenOrder.push(parent, page._id);
|
||||
await PagesOrder.push(parent, page._id);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
|
@ -84,9 +84,9 @@ router.post('/page/:id', multer.any(), async (req, res) => {
|
|||
let page = await Pages.get(id);
|
||||
|
||||
if (page._parent !== parent) {
|
||||
await PagesChildrenOrder.renew(page._parent, parent, id);
|
||||
await PagesOrder.renew(page._parent, parent, id);
|
||||
} else {
|
||||
await PagesChildrenOrder.update(page._id, page._parent, putAbovePageId);
|
||||
await PagesOrder.update(page._id, page._parent, putAbovePageId);
|
||||
}
|
||||
|
||||
page = await Pages.update(id, {title, body, parent});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const Pages = require('../../controllers/pages');
|
||||
const PagesChildrenOrder = require('../../controllers/pagesChildrenOrder');
|
||||
const pagesOrder = require('../../controllers/pagesOrder');
|
||||
const asyncMiddleware = require('../../utils/asyncMiddleware');
|
||||
|
||||
/**
|
||||
|
@ -11,7 +11,7 @@ async function createMenuTree(pages) {
|
|||
return Promise.all(pages.filter(page => page._parent === '0').map(async page => {
|
||||
const childrenOrdered = [];
|
||||
try {
|
||||
const children = await PagesChildrenOrder.get(page._id);
|
||||
const children = await pagesOrder.get(page._id);
|
||||
children.order.forEach(pageId => {
|
||||
pages.forEach(_page => {
|
||||
if (_page._id === pageId) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const Pages = require('../controllers/pages');
|
||||
const PagesChildrenOrder = require('../controllers/pagesChildrenOrder');
|
||||
const PagesOrder = require('../controllers/pagesOrder');
|
||||
|
||||
/**
|
||||
* Create new page form
|
||||
|
@ -24,7 +24,7 @@ router.get('/page/edit/:id', async (req, res, next) => {
|
|||
try {
|
||||
const page = await Pages.get(pageId);
|
||||
const pagesAvailable = await Pages.getAll();
|
||||
const parentsChildrenOrdered = await PagesChildrenOrder.getOrderedChildren(pagesAvailable, pageId, page._parent, true);
|
||||
const parentsChildrenOrdered = await PagesOrder.getOrderedChildren(pagesAvailable, pageId, page._parent, true);
|
||||
|
||||
res.render('pages/form', {
|
||||
page,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const pages = require('./pages');
|
||||
const pagesChildrenOrder = require('./pagesChildrenOrder');
|
||||
const pagesOrder = require('./pagesOrder');
|
||||
|
||||
/**
|
||||
* @class Database
|
||||
|
@ -144,5 +144,5 @@ class Database {
|
|||
module.exports = {
|
||||
class: Database,
|
||||
pages: new Database(pages),
|
||||
pagesChildrenOrder: new Database(pagesChildrenOrder)
|
||||
pagesOrder: new Database(pagesOrder)
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const Datastore = require('nedb');
|
||||
const config = require('../../../config');
|
||||
|
||||
const db = new Datastore({filename: `./${config.database}/pagesChildrenOrder.db`, autoload: true});
|
||||
const db = new Datastore({filename: `./${config.database}/pagesOrder.db`, autoload: true});
|
||||
|
||||
module.exports = db;
|
Loading…
Add table
Add a link
Reference in a new issue