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