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
package kr.itn.itnhub.system;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.List;
import java.util.Map;
@RestController
public class SystemResetController {
/** 실행 확인 문구. 사용자가 그대로 입력해야만 초기화가 돈다. */
static final String CONFIRM_PHRASE = "채널 초기화";
private final SystemResetService resetService;
public SystemResetController(SystemResetService resetService) {
this.resetService = resetService;
}
@GetMapping("/api/system/reset/preview")
public List<ResetTarget> preview() {
return resetService.preview();
}
/**
* 되돌리기 번거로운 작업이라 확인 문구를 본문으로 받는다. 버튼 오클릭만으로는 절대
* 실행되지 않게 하기 위한 것이다(프런트의 확인창과 이중 방어).
*/
@PostMapping("/api/system/reset/channels")
public ResetReport reset(@RequestBody ConfirmRequest request) {
if (!CONFIRM_PHRASE.equals(request.confirm())) {
throw new InvalidConfirmException("확인 문구가 일치하지 않습니다: \"%s\" 를 입력해야 합니다."
.formatted(CONFIRM_PHRASE));
}
return resetService.reset();
}
public record ConfirmRequest(String confirm) {
}
static class InvalidConfirmException extends RuntimeException {
InvalidConfirmException(String message) {
super(message);
}
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(InvalidConfirmException.class)
public Map<String, String> handleInvalidConfirm(InvalidConfirmException e) {
return Map.of("message", e.getMessage());
}
}