diff --git a/src/backend/controllers/pages.ts b/src/backend/controllers/pages.ts index 1eb7d2e..5329552 100644 --- a/src/backend/controllers/pages.ts +++ b/src/backend/controllers/pages.ts @@ -3,7 +3,7 @@ import Alias from '../models/alias'; import PagesOrder from './pagesOrder'; import PageOrder from '../models/pageOrder'; import HttpException from '../exceptions/httpException'; -import flatArray from '../models/flatArray'; +import PagesFlatArray from '../models/pagesFlatArray'; type PageDataFields = keyof PageData; @@ -196,7 +196,7 @@ class Pages { pagesAvailable[index] = null; pagesAvailable = Pages.removeChildren(pagesAvailable, item._id); }); - flatArray.generate(); + PagesFlatArray.regenerate(); return pagesAvailable; } @@ -223,7 +223,7 @@ class Pages { alias.save(); } - await flatArray.generate(); + await PagesFlatArray.regenerate(); return insertedPage; } catch (e) { @@ -267,7 +267,7 @@ class Pages { Alias.markAsDeprecated(previousUri); } } - await flatArray.generate(); + await PagesFlatArray.regenerate(); return updatedPage; } @@ -291,7 +291,7 @@ class Pages { await alias.destroy(); } const removedPage = page.destroy(); - await flatArray.generate(); + await PagesFlatArray.regenerate(); return removedPage; } diff --git a/src/backend/controllers/pagesOrder.ts b/src/backend/controllers/pagesOrder.ts index 380dfdd..0227878 100644 --- a/src/backend/controllers/pagesOrder.ts +++ b/src/backend/controllers/pagesOrder.ts @@ -1,6 +1,6 @@ import PageOrder from '../models/pageOrder'; import Page from '../models/page'; -import flatArray from '../models/flatArray'; +import PagesFlatArray from '../models/pagesFlatArray'; /** * @class PagesOrder @@ -63,7 +63,7 @@ class PagesOrder { order.push(childId); await order.save(); - await flatArray.generate(); + await PagesFlatArray.regenerate(); } /** @@ -78,13 +78,13 @@ class PagesOrder { oldParentOrder.remove(targetPageId); await oldParentOrder.save(); - await flatArray.generate(); + await PagesFlatArray.regenerate(); const newParentOrder = await PageOrder.get(newParentId); newParentOrder.push(targetPageId); await newParentOrder.save(); - await flatArray.generate(); + await PagesFlatArray.regenerate(); } /** @@ -129,7 +129,7 @@ class PagesOrder { pageOrder.order = Array.from(new Set([...pageOrder.order, ...unordered])); pageOrder.putAbove(currentPageId, putAbovePageId); await pageOrder.save(); - await flatArray.generate(); + await PagesFlatArray.regenerate(); } /** @@ -144,7 +144,7 @@ class PagesOrder { } await order.destroy(); - await flatArray.generate(); + await PagesFlatArray.regenerate(); } } diff --git a/src/backend/models/flatArray.ts b/src/backend/models/pagesFlatArray.ts similarity index 61% rename from src/backend/models/flatArray.ts rename to src/backend/models/pagesFlatArray.ts index 46c4418..441b6db 100644 --- a/src/backend/models/flatArray.ts +++ b/src/backend/models/pagesFlatArray.ts @@ -5,56 +5,76 @@ import NodeCache from 'node-cache'; // Create cache for flat array const cache = new NodeCache({ stdTTL: 120 }); +const cacheKey = 'pagesFlatArray'; + /** - * @typedef {object} FlatArrayData - * @property {string} id - page id - * @property {string} parentId - page parent id - * @property {string} rootId - page root id - * @property {number} level - page level in sidebar - * @property {string} title - page title - * @property {string} uri - page uri + * Element for pagesFlatArray */ -export interface FlatArrayData { +export interface PagesFlatArrayData { + /** + * Page id + */ id?: string; + + /** + * Page parent id + */ parentId?: string; + + /** + * id of parent with parent id '0' + */ rootId?: string; + + /** + * Page level in sidebar view + */ level?: number; + + /** + * Page title + */ title?: string; + + /** + * Page uri + */ uri?: string; } /** - * @class FlatArray - * @class FlatArray model + * @class PagesFlatArray + * @class PagesFlatArray model - flat array of pages, which are ordered like in sidebar */ -class FlatArray { +class PagesFlatArray { /** * Returns pages flat array * - * @returns {Promise>} + * @returns {Promise>} */ - public static async get(): Promise> { + public static async get(): Promise> { // Get flat array from cache - let arr = cache.get('flatArray') as Array; + let arr = cache.get(cacheKey) as Array; // Check is flat array consists in cache if (!arr) { - arr = await this.generate(); + arr = await this.regenerate(); } return arr; } /** - * Generates flat array, saves it to cache, returns it + * Generates new flat array, saves it to cache, returns it + * Calls, when there is no pages flat array data in cache or when page or pageOrder data updates * - * @returns {Promise>} + * @returns {Promise>} */ - public static async generate(): Promise> { + public static async regenerate(): Promise> { const pages = await Page.getAll(); const pagesOrders = await PageOrder.getAll(); - let arr = new Array(); + let arr = new Array(); // Get root order const rootOrder = pagesOrders.find( order => order.page == '0' ); @@ -70,7 +90,7 @@ class FlatArray { } // Save generated flat array to cache - cache.set('flatArray', arr); + cache.set(cacheKey, arr); return arr; } @@ -79,9 +99,9 @@ class FlatArray { * Returns previous page * * @param pageId - page id - * @returns {Promise} + * @returns {Promise} */ - public static async getPageBefore(pageId: string): Promise { + public static async getPageBefore(pageId: string): Promise { const arr = await this.get(); const pageIndex = arr.findIndex( (item) => item.id == pageId); @@ -99,9 +119,9 @@ class FlatArray { * Returns next page * * @param pageId - page id - * @returns {Promise} + * @returns {Promise} */ - public static async getPageAfter(pageId: string): Promise { + public static async getPageAfter(pageId: string): Promise { const arr = await this.get(); const pageIndex = arr.findIndex( (item) => item.id == pageId ); @@ -122,11 +142,11 @@ class FlatArray { * @param level - page level in sidebar * @param pages - all pages * @param orders - all page orders - * @returns {Promise>} + * @returns {Promise>} */ private static getChildrenFlatArray(pageId: string, level: number, - pages: Array, orders: Array): Array { - let arr: Array = new Array(); + pages: Array, orders: Array): Array { + let arr: Array = new Array(); const page = pages.find( item => item._id == pageId ); @@ -155,4 +175,4 @@ class FlatArray { } } -export default FlatArray; +export default PagesFlatArray; diff --git a/src/backend/routes/aliases.ts b/src/backend/routes/aliases.ts index 35be414..826d2da 100644 --- a/src/backend/routes/aliases.ts +++ b/src/backend/routes/aliases.ts @@ -3,7 +3,7 @@ import Aliases from '../controllers/aliases'; import Pages from '../controllers/pages'; import Alias from '../models/alias'; import verifyToken from './middlewares/token'; -import FlatArray from '../models/flatArray'; +import PagesFlatArray from '../models/pagesFlatArray'; const router = express.Router(); @@ -33,8 +33,8 @@ router.get('*', verifyToken, async (req: Request, res: Response) => { const pageParent = await page.getParent(); - const previousPage = await FlatArray.getPageBefore(alias.id); - const nextPage = await FlatArray.getPageAfter(alias.id); + const previousPage = await PagesFlatArray.getPageBefore(alias.id); + const nextPage = await PagesFlatArray.getPageAfter(alias.id); res.render('pages/page', { page, diff --git a/src/backend/routes/pages.ts b/src/backend/routes/pages.ts index 9b52452..37908b0 100644 --- a/src/backend/routes/pages.ts +++ b/src/backend/routes/pages.ts @@ -3,7 +3,7 @@ import Pages from '../controllers/pages'; import PagesOrder from '../controllers/pagesOrder'; import verifyToken from './middlewares/token'; import allowEdit from './middlewares/locals'; -import FlatArray from '../models/flatArray'; +import PagesFlatArray from '../models/pagesFlatArray'; const router = express.Router(); @@ -63,8 +63,8 @@ router.get('/page/:id', verifyToken, async (req: Request, res: Response, next: N const pageParent = await page.parent; - const previousPage = await FlatArray.getPageBefore(pageId); - const nextPage = await FlatArray.getPageAfter(pageId); + const previousPage = await PagesFlatArray.getPageBefore(pageId); + const nextPage = await PagesFlatArray.getPageAfter(pageId); res.render('pages/page', { page,