- Clone import: defer FurnitureData.json writes and append all entries in a single batched write instead of one read-modify-write per item, removing the main serialization bottleneck for large batches. - Clone import: raise SSE batch concurrency cap from 5 to 10 and bump the clone client/route default from 2 to 6. - Add a flush hook to runSseBatch so callers can batch deferred work before batch_complete is emitted, and surface flush errors as an error event. - Enable Next.js Cache Components (instant: false opt-out) and silence the related build warnings in next.config.ts. - Switch isomorphic-dompurify to dompurify and refresh dependencies.
26 lines
707 B
TypeScript
26 lines
707 B
TypeScript
// Public REST API — list of currently-online users (username + look only).
|
|
//
|
|
// `online` is stored by the emulator as the string "1" / "0" (see User model).
|
|
// Capped at 100 rows. Returns empty data (never 500) on DB failure.
|
|
|
|
import { eq } from "drizzle-orm";
|
|
import { apiJson } from "@/lib/api";
|
|
import { cached } from "@/lib/cache";
|
|
import { db, User } from "@/lib/db";
|
|
|
|
export async function GET(_req: Request) {
|
|
try {
|
|
const users = await cached("online_users", 10_000, async () =>
|
|
db
|
|
.select({ username: User.username, look: User.look })
|
|
.from(User)
|
|
.where(eq(User.online, "1"))
|
|
.limit(100),
|
|
);
|
|
|
|
return apiJson({ users });
|
|
} catch {
|
|
return apiJson({ users: [] });
|
|
}
|
|
}
|