CG-Feedback-Monitor/server/db/queries/assignmentFeedback.ts
Lars 234f87d408 V2-Dev-Stand: Skala 1-10, Benefits/Concerns, DEV-Isolation und Gitea-Doku.
Bündelt die Neuentwicklung in AssigmentMonitorV2 (eigene Ports/DB), die Umstellung auf numerische Bewertungen, Meeting-Checklisten, KI-Tagging und die geplante Feedback-Kaskade — als Basis für Versionsverwaltung in Gitea.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 17:35:05 +02:00

64 lines
4.2 KiB
TypeScript

import { getAllRows, getRowById, getRowsWhereEquals, insertRow, updateRow, deleteRowById } from '../crud'
import type {
FeedbackDraft, AssignmentFeedback, FeedbackCategoryRating, FeedbackDimensionText, FeedbackCategoryText,
} from '../../../src/db/types'
export const getFeedbackDraft = (assignmentId: number, instituteeId: number): FeedbackDraft | undefined =>
getRowsWhereEquals<FeedbackDraft>('feedbackDrafts', 'assignmentId', assignmentId).find(d => d.instituteeId === instituteeId)
export const addFeedbackDraft = (d: Omit<FeedbackDraft, 'id'>): number => insertRow('feedbackDrafts', d)
export const updateFeedbackDraft = (id: number, patch: Partial<FeedbackDraft>): number => updateRow('feedbackDrafts', id, patch)
export const getAssignmentFeedback = (assignmentId: number, instituteeId: number): AssignmentFeedback | undefined =>
getRowsWhereEquals<AssignmentFeedback>('assignmentFeedbacks', 'assignmentId', assignmentId).find(f => f.instituteeId === instituteeId)
/** Für die Auswertungsübersicht: Feedback-Status (Entwurf/Final) aller Assignments auf einen Schlag, statt N+1-Abfragen pro Zeile. */
export const listAssignmentFeedbacksAll = (): AssignmentFeedback[] => getAllRows<AssignmentFeedback>('assignmentFeedbacks')
export const getAssignmentFeedbackById = (id: number): AssignmentFeedback | undefined =>
getRowById<AssignmentFeedback>('assignmentFeedbacks', id)
export const addAssignmentFeedback = (f: Omit<AssignmentFeedback, 'id'>): number => insertRow('assignmentFeedbacks', f)
export const updateAssignmentFeedback = (id: number, patch: Partial<AssignmentFeedback>): number =>
updateRow('assignmentFeedbacks', id, patch)
export function getOrCreateAssignmentFeedback(assignmentId: number, instituteeId: number): AssignmentFeedback | undefined {
let fb = getAssignmentFeedback(assignmentId, instituteeId)
if (!fb) {
const fbId = addAssignmentFeedback({
assignmentId, instituteeId, status: 'draft', aiModel: '', updatedAt: new Date().toISOString(),
})
fb = getAssignmentFeedbackById(fbId)
}
return fb
}
export const listFeedbackCategoryRatings = (assignmentFeedbackId: number): FeedbackCategoryRating[] =>
getRowsWhereEquals<FeedbackCategoryRating>('feedbackCategoryRatings', 'assignmentFeedbackId', assignmentFeedbackId)
export const addFeedbackCategoryRating = (r: Omit<FeedbackCategoryRating, 'id'>): number => insertRow('feedbackCategoryRatings', r)
export const updateFeedbackCategoryRating = (id: number, patch: Partial<FeedbackCategoryRating>): number =>
updateRow('feedbackCategoryRatings', id, patch)
export const deleteFeedbackCategoryRating = (id: number): void => {
deleteRowById('feedbackCategoryRatings', id)
}
export const listFeedbackDimensionTexts = (assignmentFeedbackId: number): FeedbackDimensionText[] =>
getRowsWhereEquals<FeedbackDimensionText>('feedbackDimensionTexts', 'assignmentFeedbackId', assignmentFeedbackId)
export const getFeedbackDimensionText = (
assignmentFeedbackId: number,
feedbackDimensionId: number,
): FeedbackDimensionText | undefined =>
getRowsWhereEquals<FeedbackDimensionText>('feedbackDimensionTexts', 'assignmentFeedbackId', assignmentFeedbackId)
.find(t => t.feedbackDimensionId === feedbackDimensionId)
export const addFeedbackDimensionText = (t: Omit<FeedbackDimensionText, 'id'>): number => insertRow('feedbackDimensionTexts', t)
export const updateFeedbackDimensionText = (id: number, patch: Partial<FeedbackDimensionText>): number =>
updateRow('feedbackDimensionTexts', id, patch)
export const listFeedbackCategoryTexts = (assignmentFeedbackId: number): FeedbackCategoryText[] =>
getRowsWhereEquals<FeedbackCategoryText>('feedbackCategoryTexts', 'assignmentFeedbackId', assignmentFeedbackId)
export const getFeedbackCategoryText = (
assignmentFeedbackId: number,
feedbackCategoryId: number,
): FeedbackCategoryText | undefined =>
getRowsWhereEquals<FeedbackCategoryText>('feedbackCategoryTexts', 'assignmentFeedbackId', assignmentFeedbackId)
.find(t => t.feedbackCategoryId === feedbackCategoryId)
export const addFeedbackCategoryText = (t: Omit<FeedbackCategoryText, 'id'>): number => insertRow('feedbackCategoryTexts', t)
export const updateFeedbackCategoryText = (id: number, patch: Partial<FeedbackCategoryText>): number =>
updateRow('feedbackCategoryTexts', id, patch)