File name
Commit message
Commit date
File name
Commit message
Commit date
09-03
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' };
}