스터디 설정 - 상태 변경 게시글에서 화면은 미리 구현 했으므로 스터디 경로와 스터디이름 수정 로직만 처리하면된다.
스터디 경로/이름 수정요청을 처리하는 핸들러 작성
package me.weekbelt.studyolle.study;
@RequiredArgsConstructor
@RequestMapping("/study/{path}/settings")
@Controller
public class StudySettingsController {
// .............
@PostMapping("/study/path")
public String updateStudyPath(@CurrentAccount Account account, @PathVariable String path,
@RequestParam String newPath, Model model,
RedirectAttributes attributes) {
Study study = studyService.getStudyToUpdateStatus(account, path);
if (!studyService.isValidPath(newPath)) {
model.addAttribute(account);
model.addAttribute(study);
model.addAttribute("studyPathError", "해당 스터디 경로는 사용할 수 없습니다. 다른 값을 입력하세요.");
return "study/settings/study";
}
studyService.updateStudyPath(study, newPath);
attributes.addFlashAttribute("message", "스터디 경로를 수정했습니다.");
return "redirect:/study/" + getPath(newPath) + "/settings/study";
}
@PostMapping("/study/title")
public String updateStudyTitle(@CurrentAccount Account account, @PathVariable String path,
@RequestParam String newTitle, Model model,
RedirectAttributes attributes) {
Study study = studyService.getStudyToUpdateStatus(account, path);
if (!studyService.isValidTitle(newTitle)) {
model.addAttribute(account);
model.addAttribute(study);
model.addAttribute("studyTitleError", "스터디 이름을 다시 입력하세요.");
return "study/settings/study";
}
studyService.updateStudyTitle(study, newTitle);
attributes.addFlashAttribute("message", "스터디 이름을 수정했습니다.");
return "redirect:/study/" + getPath(path) + "/settings/study";
}
}
Controller에서 객체가 아닌 단일 타입으로 값을 받아온 경우 Validator를 못쓰기 때문에 업데이트하는 경로가 유효한지 확인하는 isValidPath메소드와 업데이트하는 스터디명이 유효한지 확인하는 isValideTitle메소드 구현
package me.weekbelt.studyolle.study;
@RequiredArgsConstructor
@Transactional
@Service
public class StudyService {
// ....
public boolean isValidPath(String newPath) {
if (!newPath.matches(VALID_PATH_PATTERN)){
return false;
}
return !studyRepository.existsByPath(newPath);
}
public boolean isValidTitle(String newTitle) {
return newTitle.length() <= 50;
}
}
StudyForm에 올바른 경로인지 체크하는 정규식 VALID_PATH_PATTERN 작성
package me.weekbelt.studyolle.study.form;
@Data
public class StudyForm {
public static final String VALID_PATH_PATTERN = "^[ㄱ-ㅎ가-힣a-z0-9_-]{2,20}$";
// .......
}
경로 / 스터디 이름 수정을 처리하는 updateStudyPath, updateStudyTitle메소드 작성
package me.weekbelt.studyolle.study;
@RequiredArgsConstructor
@Transactional
@Service
public class StudyService {
// .....
public void updateStudyPath(Study study, String newPath) {
study.setPath(newPath);
}
// ......
public void updateStudyTitle(Study study, String newTitle) {
study.setTitle(newTitle);
}
}
참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1#
'스프링과 JPA 기반 웹 어플리케이션 개발 > 4부 스터디' 카테고리의 다른 글
58. 스터디 참여 및 탈퇴 (0) | 2020.04.28 |
---|---|
57. 스터디 설정 - 삭제 (0) | 2020.04.28 |
55. 스터디 설정 - 상태변경 (0) | 2020.04.24 |
54. 스터디 설정 - 태그/지역 (0) | 2020.04.24 |
53. 스터디 설정 - 배너 (0) | 2020.04.24 |