feat(classes): optimize teacher dashboard ui and implement grade management
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import "server-only"
|
||||
|
||||
import { cache } from "react"
|
||||
import { and, asc, eq, inArray, like, or, sql, type SQL } from "drizzle-orm"
|
||||
import { and, asc, eq, inArray, like, or, sql, isNull, type SQL } from "drizzle-orm"
|
||||
import { createId } from "@paralleldrive/cuid2"
|
||||
|
||||
import { db } from "@/shared/db"
|
||||
@@ -394,3 +394,37 @@ export async function createKnowledgePoint(data: CreateKnowledgePointInput): Pro
|
||||
export async function deleteKnowledgePoint(id: string): Promise<void> {
|
||||
await db.delete(knowledgePoints).where(eq(knowledgePoints.id, id))
|
||||
}
|
||||
|
||||
export async function reorderChapters(chapterId: string, newIndex: number, parentId: string | null): Promise<void> {
|
||||
const [target] = await db.select().from(chapters).where(eq(chapters.id, chapterId)).limit(1)
|
||||
if (!target) throw new Error("Chapter not found")
|
||||
|
||||
const siblings = await db
|
||||
.select()
|
||||
.from(chapters)
|
||||
.where(
|
||||
and(
|
||||
eq(chapters.textbookId, target.textbookId),
|
||||
parentId ? eq(chapters.parentId, parentId) : isNull(chapters.parentId)
|
||||
)
|
||||
)
|
||||
.orderBy(asc(chapters.order))
|
||||
|
||||
const currentSiblings = siblings.filter((c) => c.id !== chapterId)
|
||||
currentSiblings.splice(newIndex, 0, target)
|
||||
|
||||
await db.transaction(async (tx) => {
|
||||
for (let i = 0; i < currentSiblings.length; i++) {
|
||||
const ch = currentSiblings[i]
|
||||
if (ch.order !== i || (ch.id === chapterId && ch.parentId !== parentId)) {
|
||||
await tx
|
||||
.update(chapters)
|
||||
.set({
|
||||
order: i,
|
||||
parentId: ch.id === chapterId ? parentId : ch.parentId
|
||||
})
|
||||
.where(eq(chapters.id, ch.id))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user