전체과정
예약폼 -> 프론트 -> 예약 컨트롤러 -> 서비스 -> DB저장
controller createEventForm controller service repository
createRequestDto
List<MultipartFile> files List<MultipartFile> List<String> EventImage
files eventImageUrls
files로 받아옴 -> List<MultipartFile> files
-> RequestDto에 저장
# EventCreateRequestDto
@Data
public class EventCreateRequestDto {
private String eventName;
private EventCategory eventCategory;
private String eventStartDate;
private String eventEndDate;
private String eventInfo;
private Integer eventPrice;
private List<MultipartFile> files; // 프론트에서 받아서 저장
private Long cafeNumber;
}
# EventController
// 이벤트 예약 폼
@Secured("ROLE_NORMAL")
@GetMapping("/events/registration")
public String createEventForm(User loginUser, Model model, @RequestParam Long cafeId) {
if (loginUser != null) {
model.addAttribute("userNick", loginUser.getUserNickname());
model.addAttribute("userId", loginUser.getId());
model.addAttribute("cafeId", cafeId);
}
model.addAttribute("eventCreateRequestDto", new EventCreateRequestDto());
return "event/createEventForm";
}
// 이벤트 예약
@PostMapping("/events")
public String createEvent(User loginUser, @Validated @ModelAttribute EventCreateRequestDto requestDto, BindingResult result) {
eventService.saveEvent(requestDto, loginUser); // saveEvent
if (result.hasErrors()) {
return "event/createEventForm";
} else {
return "redirect:/events";
}
}
# EventService
// 이벤트 예약
@Transactional
public void saveEvent(EventCreateRequestDto requestDto, User securityUser) {
User user = userRepository.getById(securityUser.getId());
Cafe cafe = cafeRepository.findById(requestDto.getCafeNumber()).orElseThrow(
() -> new NullPointerException("해당 카페가 존재하지 않습니다.")
);
Event event = new Event(requestDto);
event.addCafe(cafe);
event.addUser(user);
List<MultipartFile> files = requestDto.getFiles();
List<String> eventImageUrls = s3Service.upload(files, "eventImage");
// 이벤트 이미지 생성
MultipartFile file;
String eventImageUrl;
for (int i = 0; i < files.size(); i++) {
file = files.get(i);
eventImageUrl = eventImageUrls.get(i);
EventImage eventImage = new EventImage(file.getOriginalFilename(), eventImageUrl);
event.addEventImage(eventImage);
}
eventRepository.save(event);
}
문제
해결 방안
<처리 예시>
# Event.java
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<EventImage> eventImages = new ArrayList<>();