202 lines
5.7 KiB
JavaScript
202 lines
5.7 KiB
JavaScript
import * as source from '../../mssql/queries/category.js';
|
|
import { translateQueries } from './translate.js';
|
|
import { ARTICLE_LIST_COLUMNS, ARTICLE_LIST_JOINS } from './article.js';
|
|
|
|
const queries = translateQueries(source, 'category');
|
|
export const {
|
|
CREATE, DELETE, GET_BY_PARENT_AND_NAME,
|
|
GET_CATEGORY_ARTICLE_WAREHOUSE_SUMMARIES,
|
|
GET_NEXT_SIBLING_SORT, LIST_CHILD_IDS,
|
|
LIST_CHILD_CATEGORIES,
|
|
MOVE, UPDATE_SORT,
|
|
} = queries;
|
|
|
|
export const GET_CATEGORY_ARTICLE_PICS = `
|
|
SELECT
|
|
a.id AS articleId,
|
|
p.id AS picId,
|
|
p.hash,
|
|
NULL AS buffer
|
|
FROM categoryarticle ca
|
|
INNER JOIN article a ON a.id = ca.article_id
|
|
INNER JOIN pic p ON p.id = (
|
|
SELECT ap.pic_id FROM articlepic ap
|
|
WHERE ap.article_id = a.id
|
|
ORDER BY ap.sort ASC, ap.id ASC
|
|
LIMIT 1
|
|
)
|
|
WHERE ca.category_id = @categoryId
|
|
AND a.parentarticle_id IS NULL
|
|
ORDER BY a.id ASC
|
|
`;
|
|
|
|
export const RESOLVE_CATEGORY_ACCESS = `
|
|
WITH RECURSIVE ancestors AS (
|
|
SELECT id, parent_id
|
|
FROM category
|
|
WHERE id = @categoryId
|
|
|
|
UNION ALL
|
|
|
|
SELECT c.id, c.parent_id
|
|
FROM category c
|
|
INNER JOIN ancestors a ON c.id = a.parent_id
|
|
),
|
|
root AS (
|
|
SELECT id AS rootCategoryId
|
|
FROM ancestors
|
|
WHERE parent_id IS NULL
|
|
LIMIT 1
|
|
)
|
|
SELECT
|
|
p.id AS categoryId,
|
|
r.rootCategoryId,
|
|
co.id AS companyId,
|
|
co.default_language_id AS languageId,
|
|
co.poscustomergroup_id AS posCustomerGroupId,
|
|
cu.id AS companyuserId
|
|
FROM category p
|
|
LEFT JOIN root r ON 1 = 1
|
|
LEFT JOIN company co ON co.root_category_id = r.rootCategoryId
|
|
LEFT JOIN companyuser cu
|
|
ON cu.company_id = co.id AND cu.google_auth_id = @googleAuthId
|
|
WHERE p.id = @categoryId
|
|
`;
|
|
|
|
export const IS_ANCESTOR = `
|
|
WITH RECURSIVE ancestors AS (
|
|
SELECT id, parent_id
|
|
FROM category
|
|
WHERE id = @parentId
|
|
|
|
UNION ALL
|
|
|
|
SELECT c.id, c.parent_id
|
|
FROM category c
|
|
INNER JOIN ancestors a ON c.id = a.parent_id
|
|
)
|
|
SELECT id
|
|
FROM ancestors
|
|
WHERE id = @id
|
|
`;
|
|
|
|
export const GET_CATEGORY_ARTICLES = `
|
|
SELECT ${ARTICLE_LIST_COLUMNS}
|
|
FROM categoryarticle ca
|
|
INNER JOIN article a ON a.id = ca.article_id
|
|
${ARTICLE_LIST_JOINS}
|
|
WHERE ca.category_id = @categoryId
|
|
ORDER BY a.id
|
|
`;
|
|
|
|
export const GET_TREE_FOR_COMPANY = `
|
|
WITH RECURSIVE tree AS (
|
|
SELECT id, parent_id, sort FROM category WHERE id = @rootId
|
|
UNION ALL
|
|
SELECT c.id, c.parent_id, c.sort
|
|
FROM category c INNER JOIN tree t ON c.parent_id = t.id
|
|
)
|
|
SELECT
|
|
t.id, t.parent_id AS parentId, t.sort, ct.name, ct.slug,
|
|
p.hash AS fullHash, p.thumbw AS thumbW, p.thumbh AS thumbH,
|
|
p.thumbhash AS thumbHash,
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM categoryarticle ca
|
|
INNER JOIN article a ON a.id = ca.article_id
|
|
WHERE ca.category_id = t.id AND a.parentarticle_id IS NULL
|
|
) AS articleCount
|
|
FROM tree t
|
|
LEFT JOIN categorytext ct
|
|
ON ct.category_id = t.id AND ct.language_id = @languageId
|
|
LEFT JOIN pic p ON p.id = (
|
|
SELECT cp.pic_id FROM categorypic cp
|
|
WHERE cp.category_id = t.id
|
|
ORDER BY cp.sort, cp.id LIMIT 1
|
|
)
|
|
ORDER BY t.sort, t.id
|
|
`;
|
|
|
|
export const COUNT_ARTICLES_IN_TREE = `
|
|
WITH RECURSIVE tree AS (
|
|
SELECT id FROM category WHERE id = @rootId
|
|
UNION ALL
|
|
SELECT c.id FROM category c INNER JOIN tree t ON c.parent_id = t.id
|
|
)
|
|
SELECT COUNT(DISTINCT ca.article_id) AS total
|
|
FROM categoryarticle ca
|
|
INNER JOIN article a ON a.id = ca.article_id
|
|
WHERE ca.category_id IN (SELECT id FROM tree)
|
|
AND a.parentarticle_id IS NULL
|
|
`;
|
|
|
|
export const TOUCH_SUBTREE_CATEGORIES = `
|
|
WITH RECURSIVE cats AS (
|
|
SELECT id FROM category WHERE id = @id
|
|
UNION ALL
|
|
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
|
)
|
|
UPDATE category
|
|
SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
WHERE id IN (SELECT id FROM cats)
|
|
`;
|
|
|
|
export const TOUCH_SUBTREE_ARTICLES = `
|
|
WITH RECURSIVE cats AS (
|
|
SELECT id FROM category WHERE id = @id
|
|
UNION ALL
|
|
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
|
)
|
|
UPDATE article
|
|
SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
WHERE id IN (
|
|
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
|
UNION
|
|
SELECT child.id FROM article child
|
|
WHERE child.parentarticle_id IN (
|
|
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
|
)
|
|
UNION
|
|
SELECT parent.parentarticle_id FROM article parent
|
|
WHERE parent.id IN (
|
|
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
|
) AND parent.parentarticle_id IS NOT NULL
|
|
)
|
|
`;
|
|
|
|
export const ENQUEUE_SUBTREE_CATEGORIES_SYNC = `
|
|
WITH RECURSIVE cats AS (
|
|
SELECT id FROM category WHERE id = @id
|
|
UNION ALL
|
|
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
|
)
|
|
INSERT INTO posterminalsyncqueue (posterminal_id, entity_type, entity_id)
|
|
SELECT pt.id, 'category', cats.id
|
|
FROM cats
|
|
INNER JOIN posterminal pt ON pt.company_id = @companyId
|
|
`;
|
|
|
|
export const ENQUEUE_SUBTREE_ARTICLES_SYNC = `
|
|
WITH RECURSIVE cats AS (
|
|
SELECT id FROM category WHERE id = @id
|
|
UNION ALL
|
|
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
|
),
|
|
arts AS (
|
|
SELECT ca.article_id AS id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
|
UNION
|
|
SELECT child.id FROM article child
|
|
WHERE child.parentarticle_id IN (
|
|
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
|
)
|
|
UNION
|
|
SELECT parent.parentarticle_id AS id FROM article parent
|
|
WHERE parent.id IN (
|
|
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
|
) AND parent.parentarticle_id IS NOT NULL
|
|
)
|
|
INSERT INTO posterminalsyncqueue (posterminal_id, entity_type, entity_id)
|
|
SELECT pt.id, 'article', arts.id
|
|
FROM arts
|
|
INNER JOIN posterminal pt ON pt.company_id = @companyId
|
|
`; |