File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'use server';
import { revalidatePath } from 'next/cache';
import { verifySession } from '@/lib/auth/dal';
import { updateStudentMemberUseYn } from '@/lib/data/repositories/student-member-repository';
import { STUDENT_MEMBERS_PATH } from '@/lib/domain/student-member-query';
export type UpdateStudentActiveStatusState =
| { status: 'idle' }
| { status: 'error'; error: string }
| { status: 'success' };
const INVALID_INPUT_ERROR = '요청 값이 올바르지 않습니다.';
/**
* 학생 회원 사용여부 변경 Server Action.
*
* PUT /api/v1/mngr/user/{userId}/{useYn}
*
* 백엔드에 값도 변경 API도 없어 한동안 막아 두었던 경로다. edupay-backend develop 4d98756에서
* 목록 응답에 `useYn`이 실리고 변경 API가 생기면서 되살렸다.
*
* 인증 확인을 본문 맨 앞에 둔다 — Server Action은 UI를 거치지 않고 직접 POST될 수 있어 이
* 확인이 유일한 최종 방어선이다. 실패 사유는 일반화된 문구만 화면으로 보낸다(백엔드 message
* 원문에는 내부 정보가 실릴 수 있다).
*/
export async function updateStudentActiveStatus(
_prevState: UpdateStudentActiveStatusState,
formData: FormData
): Promise<UpdateStudentActiveStatusState> {
await verifySession();
const id = formData.get('id');
if (typeof id !== 'string' || id.trim() === '') {
return { status: 'error', error: INVALID_INPUT_ERROR };
}
// 체크박스는 켜졌을 때만 값이 실린다 — 없으면 꺼진 것이다.
const isActive = formData.get('isActive') !== null;
const result = await updateStudentMemberUseYn(id, isActive);
if (!result.ok) {
return { status: 'error', error: result.message };
}
// 목록의 사용여부 열이 방금 바꾼 값을 반영해야 한다.
revalidatePath(STUDENT_MEMBERS_PATH);
return { status: 'success' };
}