NestJS (6 services): implement @RequirePermission decorator with SetMetadata+Reflector, register APP_GUARD globally, fix as assertions to type guards, add explicit return types, fix import type for express, fix /metrics implicit any, replace native Error with ApplicationError, remove typeorm remnants, register LifecycleService. teacher-bff: add logger, ApplicationError, GlobalErrorFilter, forward real userId to downstream, log downstream failures, migrate health controller to shared/health. Go (2 services): interface to any, doc comments, CORS dev whitelist, JWT secret fail-fast, push-gateway internal API auth, metrics and readyz endpoints, remove dead code. Python (2 services): lifespan return type, dev_mode to bool, data-ana APIRouter, ai POST body model, ClickHouse async wrapping.
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { eq } from "drizzle-orm";
|
|
import { getDb } from "../config/database.js";
|
|
import { classes, type Class, type NewClass } from "./classes.schema.js";
|
|
import { DatabaseError } from "../shared/errors/application-error.js";
|
|
|
|
export class ClassesRepository {
|
|
async create(data: NewClass): Promise<Class> {
|
|
const db = getDb();
|
|
await db.insert(classes).values(data);
|
|
const [result] = await db
|
|
.select()
|
|
.from(classes)
|
|
.where(eq(classes.id, data.id));
|
|
if (!result) {
|
|
throw new DatabaseError("Failed to read created class");
|
|
}
|
|
return result;
|
|
}
|
|
|
|
async findById(id: string): Promise<Class | undefined> {
|
|
const db = getDb();
|
|
const [result] = await db.select().from(classes).where(eq(classes.id, id));
|
|
return result;
|
|
}
|
|
|
|
async list(gradeId?: string): Promise<Class[]> {
|
|
const db = getDb();
|
|
if (gradeId) {
|
|
return db.select().from(classes).where(eq(classes.gradeId, gradeId));
|
|
}
|
|
return db.select().from(classes);
|
|
}
|
|
|
|
async update(
|
|
id: string,
|
|
data: Partial<NewClass>,
|
|
): Promise<Class | undefined> {
|
|
const db = getDb();
|
|
await db.update(classes).set(data).where(eq(classes.id, id));
|
|
const [result] = await db.select().from(classes).where(eq(classes.id, id));
|
|
return result;
|
|
}
|
|
|
|
async delete(id: string): Promise<void> {
|
|
const db = getDb();
|
|
await db.delete(classes).where(eq(classes.id, id));
|
|
}
|
|
}
|