Skip to content

Commit

Permalink
Merge pull request #25 from One-armed-boy/feat/user_video_relation
Browse files Browse the repository at this point in the history
Member - Video 간 릴레이션 설정
  • Loading branch information
One-armed-boy authored Mar 1, 2024
2 parents 274023d + 08eb6c8 commit 2bca322
Show file tree
Hide file tree
Showing 25 changed files with 438 additions and 100 deletions.
18 changes: 14 additions & 4 deletions src/main/java/com/stream/controller/UploadController.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,34 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.stream.domain.video.dto.UploadVideoDto;
import com.stream.controller.dto.upload.UploadVideoRequest;
import com.stream.domain.video.dto.upload.UploadVideoCommand;
import com.stream.facade.UploadFacade;
import com.stream.security.SecurityContextHelper;

import jakarta.validation.Valid;

@RestController
public class UploadController {
private final UploadFacade uploadFacade;
private final SecurityContextHelper securityContextHelper;

@Autowired
public UploadController(UploadFacade uploadFacade) {
public UploadController(UploadFacade uploadFacade, SecurityContextHelper securityContextHelper) {
this.uploadFacade = uploadFacade;
this.securityContextHelper = securityContextHelper;
}

@PostMapping(path = "/videos/upload")
public ResponseEntity uploadVideo(@Valid @RequestPart(value = "videoMetadata") UploadVideoDto videoMetadata,
public ResponseEntity uploadVideo(@Valid @RequestPart(value = "videoMetadata") UploadVideoRequest request,
@RequestPart(value = "videoFile") MultipartFile videoFile) {
uploadFacade.uploadVideoSync(videoMetadata, videoFile);
var member = securityContextHelper.getMember();
uploadFacade.uploadVideoSync(UploadVideoCommand.builder()
.fileName(request.getFileName())
.extension(request.getExtension())
.description(request.getDescription())
.member(member)
.build(), videoFile);
return ResponseEntity.ok().build();
}
}
4 changes: 1 addition & 3 deletions src/main/java/com/stream/controller/VideoController.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ public VideoController(VideoService videoService) {
@GetMapping(path = "/videos")
public ResponseEntity<ListVideoResponse> listVideo() {
return ResponseEntity.ok()
.body(ListVideoResponse.builder()
.videos(videoService.listVideo())
.build());
.body(ListVideoResponse.create(videoService.listVideo()));
}

@GetMapping(path = "/videos", params = "id")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.stream.domain.video.dto;
package com.stream.controller.dto.upload;

import jakarta.validation.constraints.NotNull;
import lombok.Builder;
Expand All @@ -7,15 +7,15 @@

@Getter
@ToString
public class UploadVideoDto {
public class UploadVideoRequest {
@NotNull(message = "확장자를 제외한 파일명을 입력해주세요. (ex. ~)")
private String fileName;
@NotNull(message = "확장자를 입력해주세요. (ex. MOV)")
private String extension;
private String description;

@Builder
public UploadVideoDto(String fileName, String extension, String description) {
public UploadVideoRequest(String fileName, String extension, String description) {
this.fileName = fileName;
this.extension = extension;
this.description = description;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,31 @@ public class GetVideoResponse {
private long size;
private String description;
private Date createdAt;
private String member;

@Builder
public GetVideoResponse(long id, String fileTag, String extension, long size, String description, Date createdAt) {
public GetVideoResponse(long id, String fileTag, String extension, String member, long size, String description,
Date createdAt) {
this.id = id;
this.fileTag = fileTag;
this.extension = extension;
this.size = size;
this.description = description;
this.createdAt = createdAt;
this.member = member;
}

public static GetVideoResponse convertDtoToResponse(VideoDto videoDto) {
var member = videoDto.getMember();
var memberEmail = member != null ? member.getEmail() : null;
return GetVideoResponse.builder()
.id(videoDto.getId())
.fileTag(videoDto.getFileTag())
.extension(videoDto.getExtension())
.size(videoDto.getSize())
.description(videoDto.getDescription())
.createdAt(videoDto.getCreatedAt())
.member(memberEmail)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,63 @@
package com.stream.controller.dto.video;

import java.util.Date;
import java.util.List;

import com.stream.domain.video.dto.VideoDto;

import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@NoArgsConstructor
@EqualsAndHashCode
public class ListVideoResponse {
private List<VideoDto> videos;
private List<Element> videos;

@Builder
public ListVideoResponse(List<VideoDto> videos) {
private ListVideoResponse(List<Element> videos) {
this.videos = videos;
}

public static ListVideoResponse create(List<VideoDto> videos) {
return new ListVideoResponse(videos.stream().map(videoDto -> {
var member = videoDto.getMember();
var memberEmail = member != null ? member.getEmail() : null;
return Element.builder()
.id(videoDto.getId())
.fileTag(
videoDto.getFileTag())
.extension(videoDto.getExtension())
.size(videoDto.getSize())
.member(memberEmail)
.createdAt(videoDto.getCreatedAt())
.build();
}).toList());
}

@Getter
@ToString
@NoArgsConstructor
@EqualsAndHashCode
public static class Element {
private long id;
private String fileTag;
private String extension;
private long size;
private Date createdAt;
private String member;

@Builder
public Element(long id, String fileTag, String extension, String member, long size, Date createdAt) {
this.id = id;
this.fileTag = fileTag;
this.extension = extension;
this.size = size;
this.createdAt = createdAt;
this.member = member;
}
}
}
13 changes: 12 additions & 1 deletion src/main/java/com/stream/domain/member/Member.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
package com.stream.domain.member;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.annotations.CreationTimestamp;

import com.stream.domain.role.Role;
import com.stream.domain.video.Video;

import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
Expand All @@ -26,7 +33,7 @@
@Getter
public class Member {
@Id
@Column(name = "id", nullable = false, updatable = false)
@Column(name = "member_id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

Expand All @@ -37,6 +44,7 @@ public class Member {
private String password;

@ManyToOne
@JoinColumn(name = "role_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private Role role;

@CreationTimestamp
Expand All @@ -48,6 +56,9 @@ public class Member {
@Column(name = "last_login_at")
private Date lastLoginAt;

@OneToMany(mappedBy = "member")
private List<Video> videoList = new ArrayList<>();

@Builder
public Member(long id, String email, String password, Role role) {
this.id = id;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/stream/domain/role/Role.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
@Getter
public class Role {
@Id
@Column(name = "id", nullable = false, updatable = false)
@Column(name = "role_id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

Expand Down
27 changes: 25 additions & 2 deletions src/main/java/com/stream/domain/video/Video.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,17 @@
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import com.stream.domain.member.Member;

import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
Expand All @@ -24,7 +30,7 @@
@Getter
public class Video {
@Id
@Column(name = "id", nullable = false, updatable = false)
@Column(name = "video_id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

Expand Down Expand Up @@ -53,13 +59,30 @@ public class Video {
@Column(name = "updated_at", nullable = false)
private Date updatedAt;

@ManyToOne
@JoinColumn(name = "member_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private Member member;

@Builder
public Video(long id, String fileTag, String extension, String path, long size, String description) {
public Video(long id, String fileTag, String extension, String path, long size, String description, Member member) {
this.id = id;
this.fileTag = fileTag;
this.extension = extension;
this.path = path;
this.size = size;
this.description = description;
this.setMember(member);
}

public void setMember(Member member) {
if (this.member != null) {
this.member.getVideoList().remove(this);
}
this.member = member;
if (member == null) {
return;
}
this.member.getVideoList().add(this);
}
}

22 changes: 19 additions & 3 deletions src/main/java/com/stream/domain/video/VideoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.stream.domain.member.Member;
import com.stream.domain.member.MemberService;
import com.stream.domain.video.dto.CreateVideoCommand;
import com.stream.domain.video.dto.VideoDto;
import com.stream.domain.video.exception.VideoNotFoundException;

Expand All @@ -14,9 +17,12 @@
public class VideoService {
private final VideoRepository videoRepository;

private final MemberService memberService;

@Autowired
public VideoService(VideoRepository videoRepository) {
public VideoService(VideoRepository videoRepository, MemberService memberService) {
this.videoRepository = videoRepository;
this.memberService = memberService;
}

public List<VideoDto> listVideo() {
Expand All @@ -41,7 +47,17 @@ private Video getVideoById(long id) {
}

@Transactional
public List<Video> createVideo(Video... video) {
return videoRepository.saveAll(List.of(video));
public Video createVideo(CreateVideoCommand command) {
var email = command.getMemberEmail();
Member member =
email == null ? null : memberService.getMemberByEmail(email);
return videoRepository.save(Video.builder()
.member(member)
.fileTag(command.getFileTag())
.extension(command.getExtension())
.path(command.getPath())
.size(command.getSize())
.description(command.getDescription())
.build());
}
}
27 changes: 27 additions & 0 deletions src/main/java/com/stream/domain/video/dto/CreateVideoCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.stream.domain.video.dto;

import lombok.Builder;
import lombok.Getter;
import lombok.ToString;

@Getter
@ToString
public class CreateVideoCommand {
private String fileTag;
private String extension;
private String path;
private long size;
private String description;
private String memberEmail;

@Builder
public CreateVideoCommand(String fileTag, String extension, String path, long size, String description,
String memberEmail) {
this.fileTag = fileTag;
this.extension = extension;
this.path = path;
this.size = size;
this.description = description;
this.memberEmail = memberEmail;
}
}
Loading

0 comments on commit 2bca322

Please sign in to comment.