Mr. Drew's Assignment Creator — Docker share build

Self-contained Dockerized build for end users. Run via docker compose;
see README.md for setup. Source-only, no sample data or build artifacts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-21 19:58:36 -04:00
co-authored by Claude Opus 4.8
commit 5a51a0f112
33 changed files with 5413 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
import { NextResponse } from "next/server";
import { getAssignment, updateAssignment, deleteAssignment } from "@/lib/store";
export const dynamic = "force-dynamic";
export async function GET(request, { params }) {
const a = getAssignment(params.id);
if (!a) return NextResponse.json({ error: "Assignment not found." }, { status: 404 });
return NextResponse.json(a);
}
export async function PUT(request, { params }) {
try {
const body = await request.json();
const updated = updateAssignment(params.id, body);
if (!updated) return NextResponse.json({ error: "Assignment not found." }, { status: 404 });
return NextResponse.json(updated);
} catch (e) {
return NextResponse.json({ error: String(e.message || e) }, { status: 400 });
}
}
export async function DELETE(request, { params }) {
const ok = deleteAssignment(params.id);
if (!ok) return NextResponse.json({ error: "Assignment not found." }, { status: 404 });
return NextResponse.json({ ok: true });
}
+19
View File
@@ -0,0 +1,19 @@
import { NextResponse } from "next/server";
import { listAssignments, createAssignment } from "@/lib/store";
export const dynamic = "force-dynamic";
export async function GET() {
return NextResponse.json({ assignments: listAssignments() });
}
export async function POST(request) {
try {
const body = await request.json();
if (!body || typeof body !== "object") throw new Error("Missing assignment body.");
const record = createAssignment(body);
return NextResponse.json(record, { status: 201 });
} catch (e) {
return NextResponse.json({ error: String(e.message || e) }, { status: 400 });
}
}