sendou.ink/app/features/user-page/actions/u.$identifier.admin.server.ts
Kalle c4c0b6dd50
Some checks are pending
E2E Tests / e2e (push) Waiting to run
Tests and checks on push / run-checks-and-tests (push) Waiting to run
Updates translation progress / update-translation-progress-issue (push) Waiting to run
Migrate repository functions to use user id via ALS
2026-06-06 14:56:43 +03:00

57 lines
1.4 KiB
TypeScript

import type { ActionFunctionArgs } from "react-router";
import * as AdminRepository from "~/features/admin/AdminRepository.server";
import { requireUser } from "~/features/auth/core/user.server";
import * as UserRepository from "~/features/user-page/UserRepository.server";
import { adminTabActionSchema } from "~/features/user-page/user-page-schemas";
import { requireRole } from "~/modules/permissions/guards.server";
import {
badRequestIfFalsy,
notFoundIfFalsy,
parseRequestPayload,
} from "~/utils/remix.server";
import { assertUnreachable } from "~/utils/types";
export const action = async ({ request, params }: ActionFunctionArgs) => {
const loggedInUser = requireUser();
requireRole("STAFF");
const data = await parseRequestPayload({
request,
schema: adminTabActionSchema,
});
const user = notFoundIfFalsy(
await UserRepository.findLayoutDataByIdentifier(params.identifier!),
);
switch (data._action) {
case "ADD_MOD_NOTE": {
await AdminRepository.addModNote({
userId: user.id,
text: data.value,
});
break;
}
case "DELETE_MOD_NOTE": {
const note = badRequestIfFalsy(
await AdminRepository.findModeNoteById(data.noteId),
);
if (note.authorId !== loggedInUser.id) {
throw new Response(null, {
status: 401,
});
}
await AdminRepository.deleteModNote(data.noteId);
break;
}
default: {
assertUnreachable(data);
}
}
return null;
};