import { getAllRows, getRowsWhereIn, insertRow, updateRow, getRowsWhereEquals, deleteRowsWhereEquals, deleteRowById, } from '../crud' import type { FeedbackDimension, FeedbackCategory, FeedbackCriterionItem } from '../../../src/db/types' export interface FeedbackStructure { dimensions: FeedbackDimension[] categories: FeedbackCategory[] items: FeedbackCriterionItem[] } const byOrder = (rows: T[]) => [...rows].sort((a, b) => a.order - b.order) /** Vollständige, nach `order` sortierte Feedback-Taxonomie. */ export function loadFeedbackStructure(): FeedbackStructure { return { dimensions: byOrder(getAllRows('feedbackDimensions')), categories: byOrder(getAllRows('feedbackCategories')), items: byOrder(getAllRows('feedbackCriterionItems')), } } export const listFeedbackCategoriesOrdered = (): FeedbackCategory[] => byOrder(getAllRows('feedbackCategories')) export const listFeedbackCategoriesAll = (): FeedbackCategory[] => getAllRows('feedbackCategories') export const listFeedbackCriterionItemsAll = (): FeedbackCriterionItem[] => getAllRows('feedbackCriterionItems') export const getFeedbackCriterionItemsByIds = (ids: number[]): FeedbackCriterionItem[] => getRowsWhereIn('feedbackCriterionItems', 'id', ids) export const addFeedbackDimension = (d: Omit): number => insertRow('feedbackDimensions', d) export const updateFeedbackDimension = (id: number, patch: Partial): number => updateRow('feedbackDimensions', id, patch) /** Cascade: Items der Kategorien → Kategorien → Dimension. */ export function deleteFeedbackDimension(id: number): void { const cats = getRowsWhereEquals('feedbackCategories', 'dimensionId', id) for (const cat of cats) { deleteRowsWhereEquals('feedbackCriterionItems', 'categoryId', cat.id!) } deleteRowsWhereEquals('feedbackCategories', 'dimensionId', id) deleteRowById('feedbackDimensions', id) } export const addFeedbackCategory = (c: Omit): number => insertRow('feedbackCategories', c) export const updateFeedbackCategory = (id: number, patch: Partial): number => updateRow('feedbackCategories', id, patch) /** Cascade: Items der Kategorie → Kategorie. */ export function deleteFeedbackCategory(id: number): void { deleteRowsWhereEquals('feedbackCriterionItems', 'categoryId', id) deleteRowById('feedbackCategories', id) } export const addFeedbackCriterionItem = (i: Omit): number => insertRow('feedbackCriterionItems', i) export const updateFeedbackCriterionItem = (id: number, patch: Partial): number => updateRow('feedbackCriterionItems', id, patch) export const deleteFeedbackCriterionItem = (id: number): void => deleteRowById('feedbackCriterionItems', id)