*/domain/content/controller
import com.codeit.playlist.domain.content.dto.data.ContentDto;
import com.codeit.playlist.domain.content.dto.request.ContentCreateRequest;
import com.codeit.playlist.domain.content.dto.request.ContentCursorRequest;
import com.codeit.playlist.domain.content.dto.request.ContentUpdateRequest;
import com.codeit.playlist.domain.content.dto.response.CursorResponseContentDto;
import com.codeit.playlist.domain.content.service.basic.BasicContentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/contents")
public class ContentController {
private final BasicContentService contentService;
@PreAuthorize("hasRole('ADMIN')")
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ContentDto> create(@RequestPart ContentCreateRequest request,
@RequestPart MultipartFile thumbnail) {
ContentDto contents = contentService.create(request, thumbnail);
return ResponseEntity.status(HttpStatus.CREATED).body(contents);
}
@PreAuthorize("hasRole('ADMIN')")
@PatchMapping(value = "/{contentId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ContentDto> update(@PathVariable UUID contentId,
@RequestPart("request") ContentUpdateRequest request,
@RequestPart(value = "thumbnail", required = false) MultipartFile thumbnail) {
ContentDto updateContents = contentService.update(contentId, request, thumbnail);
return ResponseEntity.ok(updateContents);
}
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{contentId}")
public ResponseEntity<Void> delete(@PathVariable UUID contentId) {
contentService.delete(contentId);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
@GetMapping
public ResponseEntity<CursorResponseContentDto> get(@ModelAttribute ContentCursorRequest request) {
CursorResponseContentDto response = contentService.get(request);
return ResponseEntity.ok(response);
}
@GetMapping("/{contentId}")
public ResponseEntity<ContentDto> searchById(@PathVariable UUID contentId) {
ContentDto content = contentService.search(contentId);
return ResponseEntity.ok(content);
}
}'Playlist > Content' 카테고리의 다른 글
| ContentException, ErrorCode (0) | 2025.12.17 |
|---|---|
| Content, DTO (0) | 2025.12.17 |
| ContentService (0) | 2025.12.17 |
| Service : BasicContentService (0) | 2025.11.25 |
| Entity : Content (0) | 2025.11.25 |