package kr.co.vividnext.sodalive.event import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.member.Member import org.springframework.security.access.prepost.PreAuthorize import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.DeleteMapping import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PutMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController import org.springframework.web.multipart.MultipartFile @RestController @RequestMapping("/event") class EventController(private val service: EventService) { @GetMapping fun getEventList( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { ApiResponse.ok( service.getEventList( memberId = member?.id, memberRole = member?.role ) ) } @GetMapping("/popup") fun getEventPopup( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = ApiResponse.ok(service.getEventPopup(memberId = member?.id)) @PostMapping @PreAuthorize("hasRole('ADMIN')") fun createEvent( @RequestParam("thumbnail") thumbnail: MultipartFile, @RequestParam(value = "detail", required = false) detail: MultipartFile? = null, @RequestParam(value = "popup", required = false) popup: MultipartFile? = null, @RequestParam(value = "link", required = false) link: String? = null, @RequestParam(value = "title", required = false) title: String? = null, @RequestParam(value = "isAdult", required = false) isAdult: Boolean? = null, @RequestParam(value = "isPopup") isPopup: Boolean, @RequestParam(value = "startDate") startDate: String, @RequestParam(value = "endDate") endDate: String ) = ApiResponse.ok( service.save(thumbnail, detail, popup, link, title, isAdult, isPopup, startDate, endDate), "등록되었습니다." ) @PutMapping @PreAuthorize("hasRole('ADMIN')") fun updateEvent( @RequestParam(value = "id") id: Long, @RequestParam(value = "thumbnail", required = false) thumbnail: MultipartFile? = null, @RequestParam(value = "detail", required = false) detail: MultipartFile? = null, @RequestParam(value = "popup", required = false) popup: MultipartFile? = null, @RequestParam(value = "link", required = false) link: String? = null, @RequestParam(value = "title", required = false) title: String? = null, @RequestParam(value = "isAdult", required = false) isAdult: Boolean? = null, @RequestParam(value = "isPopup", required = false) isPopup: Boolean? = null, @RequestParam(value = "startDate", required = false) startDate: String? = null, @RequestParam(value = "endDate", required = false) endDate: String? = null ) = ApiResponse.ok( service.update(id, thumbnail, detail, popup, link, title, isAdult, isPopup, startDate, endDate), "수정되었습니다." ) @DeleteMapping("/{id}") @PreAuthorize("hasRole('ADMIN')") fun deleteEvent(@PathVariable id: Long) = ApiResponse.ok(service.delete(id), "삭제되었습니다.") }