Files
outline/server/routes/api/developer/developer.ts
T
Tom Moor cc591ebc66 Conversion of User to event system (#9741)
* Conversion of User to event system

* fix

* warning

* fixes

* Skip lastActiveAt in changeset

* fix: Skip count in view changeset

* refactor: Remove userDestroyer

* refactor: Remove userSuspender

* refactor: Remove userUnsuspender

* tests
2025-07-27 13:15:21 -04:00

63 lines
1.7 KiB
TypeScript

import { Context, Next } from "koa";
import Router from "koa-router";
import { randomString } from "@shared/random";
import userInviter, { Invite } from "@server/commands/userInviter";
import env from "@server/env";
import Logger from "@server/logging/Logger";
import auth from "@server/middlewares/authentication";
import validate from "@server/middlewares/validate";
import { presentUser } from "@server/presenters";
import { APIContext } from "@server/types";
import * as T from "./schema";
const router = new Router();
function dev() {
return async function checkDevelopmentMiddleware(ctx: Context, next: Next) {
if (env.ENVIRONMENT !== "development") {
throw new Error("Attempted to access development route in production");
}
return next();
};
}
router.post(
"developer.create_test_users",
dev(),
auth(),
validate(T.CreateTestUsersSchema),
async (ctx: APIContext<T.CreateTestUsersReq>) => {
const { count = 10 } = ctx.input.body;
const invites = Array(Math.min(count, 100))
.fill(0)
.map(() => {
const rando = randomString(10);
return {
email: `${rando}@example.com`,
name: `${rando.slice(0, 5)} Tester`,
role: "member",
} as Invite;
});
Logger.info("utils", `Creating ${count} test users`, invites);
// Generate a bunch of invites
const response = await userInviter(ctx, { invites });
// Convert from invites to active users by marking as active
await Promise.all(
response.users.map((user) => user.updateActiveAt(ctx, true))
);
ctx.body = {
data: {
users: response.users.map((user) => presentUser(user)),
},
};
}
);
export default router;