Files
dashlibstorage/src/providers/sqlite3/queries/category.js
2026-10-30 06:43:49 +01:00

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
`;