forked from wangziqi/gongxue-base
feat: add student learning flow pages
This commit is contained in:
@@ -2,6 +2,15 @@ import type { RequestContext } from '../../core/http.js';
|
||||
import { query } from '../../core/db.js';
|
||||
import { intParam, tenantIdFrom } from '../../core/request.js';
|
||||
|
||||
function stringArrayParam(ctx: RequestContext, name: string, max = 200) {
|
||||
const repeated = ctx.url.searchParams.getAll(name);
|
||||
const csv = ctx.url.searchParams.get(name);
|
||||
const values = [...repeated, ...(csv ? csv.split(',') : [])]
|
||||
.map(value => value.trim())
|
||||
.filter(Boolean);
|
||||
return [...new Set(values)].slice(0, max);
|
||||
}
|
||||
|
||||
function dateOnly(value: unknown) {
|
||||
if (!value) return null;
|
||||
if (value instanceof Date && !Number.isNaN(value.getTime())) return value.toISOString().slice(0, 10);
|
||||
@@ -245,10 +254,15 @@ export async function questionsRoute(ctx: RequestContext) {
|
||||
const entryId = ctx.url.searchParams.get('entryId');
|
||||
const contentNodeId = ctx.url.searchParams.get('contentNodeId');
|
||||
const collectionId = ctx.url.searchParams.get('collectionId');
|
||||
const questionIds = stringArrayParam(ctx, 'questionIds', 300);
|
||||
const limit = intParam(ctx, 'limit', 200, 500);
|
||||
|
||||
const params: unknown[] = [tenantId];
|
||||
const filters = ['q.tenant_id = $1', `q.status = 'published'`];
|
||||
if (questionIds.length) {
|
||||
params.push(questionIds);
|
||||
filters.push(`q.id = any($${params.length}::uuid[])`);
|
||||
}
|
||||
if (subjectId) {
|
||||
params.push(subjectId);
|
||||
filters.push(`q.subject_id = $${params.length}`);
|
||||
|
||||
Reference in New Issue
Block a user