Skip to content

Commit

Permalink
Ad_view 기록 쌓기
Browse files Browse the repository at this point in the history
  • Loading branch information
chobeebee committed Jul 7, 2024
1 parent ea0e3ec commit aa1159b
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 63 deletions.
12 changes: 7 additions & 5 deletions src/main/java/com/sparta/binplay/controller/VideoController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

import com.sparta.binplay.dto.request.StreamRequestDto;
import com.sparta.binplay.dto.request.VideoRequestDto;
import com.sparta.binplay.dto.response.AdViewResponseDto;
import com.sparta.binplay.dto.response.StreamResponseDto;
import com.sparta.binplay.dto.response.VideoAdResponseDto;
import com.sparta.binplay.dto.response.VideoResponseDto;
import com.sparta.binplay.entity.CustomOAuth2User;
import com.sparta.binplay.entity.Videos;
import com.sparta.binplay.service.AdViewService;
import com.sparta.binplay.service.StreamService;
import com.sparta.binplay.service.VideoAdService;
import com.sparta.binplay.service.VideoService;
Expand All @@ -25,6 +26,7 @@ public class VideoController {
private final VideoService videoService;
private final VideoAdService videoAdService;
private final StreamService streamService;
private final AdViewService adViewService;

//모든 비디오 조회 (필요없지 않나)
@GetMapping
Expand All @@ -44,7 +46,7 @@ public ResponseEntity<List<VideoResponseDto>> getMyVideos() throws Exception {
@PostMapping("/create")
public ResponseEntity<VideoResponseDto> createVideo(@RequestBody VideoRequestDto videoRequestDto) throws Exception {
VideoResponseDto videoResponseDto = videoService.createVideo(videoRequestDto);
videoService.matchAd(videoRequestDto);
//videoService.matchAd(videoRequestDto);
return ResponseEntity.status(HttpStatus.OK).body(videoResponseDto);
}

Expand Down Expand Up @@ -73,10 +75,10 @@ public ResponseEntity<StreamResponseDto> videoPlay(@PathVariable("video-id") Lon
public ResponseEntity<StreamResponseDto> videoStop(@PathVariable("video-id") Long videoId, @RequestBody int stopTime, @AuthenticationPrincipal CustomOAuth2User user) {
return ResponseEntity.ok().body(streamService.stopPosition(videoId, stopTime, user.getUsername()));
}

//광고 시청
@PostMapping("/play/ads/{video-ad-id}")
public ResponseEntity<VideoAdResponseDto> viewAd(@PathVariable("video-ad-id") Long videoAdId) {
return ResponseEntity.ok().body(videoAdService.updateAdCount(videoAdId));
public ResponseEntity<AdViewResponseDto> viewAd(@PathVariable("video-ad-id") Long videoAdId) {
return ResponseEntity.ok().body(adViewService.saveAdView(videoAdId));
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
package com.sparta.binplay.dto.request;

import com.sparta.binplay.entity.AdViews;
import com.sparta.binplay.entity.Ads;
import com.sparta.binplay.entity.Videos;
import lombok.Builder;
import lombok.Getter;

@Getter
public class VideoAdRequestDto {
private long viewCount;
private boolean statIs;
private Videos video;
private AdViews adViews;
private Ads ad;

@Builder
public VideoAdRequestDto(Ads ad, int viewCount, Videos video, boolean statIs) {
this.ad = ad;
this.viewCount = viewCount;
this.video = video;
this.statIs = statIs;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ public class VideoAdResponseDto {
public static VideoAdResponseDto from(VideoAd videoAd) {
return VideoAdResponseDto.builder()
.videoAdId(videoAd.getVideoAdId())
.adViews(videoAd.getAdView())
.build();
}
}
22 changes: 11 additions & 11 deletions src/main/java/com/sparta/binplay/entity/VideoAd.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sparta.binplay.entity;

import com.sparta.binplay.dto.request.VideoAdRequestDto;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -23,7 +24,7 @@ public class VideoAd {
private long viewCount;

@Column(name="stat_is")
private boolean stat_is;
private boolean statIs;

@ManyToOne
@JoinColumn(name = "video_id", nullable = false)
Expand All @@ -33,20 +34,19 @@ public class VideoAd {
@JoinColumn(name = "ad_id", nullable = false)
private Ads ad;

@ManyToOne
@JoinColumn(name = "ad_view_id", nullable = false)
private AdViews adView;

// 생성자
public VideoAd(Ads ad, Videos video, int viewCount, boolean stat_is, AdViews adView) {
public VideoAd(Ads ad, Videos video, int viewCount, boolean statIs) {
this.ad = ad;
this.video = video;
this.viewCount = viewCount;
this.stat_is = stat_is;
this.adView = adView;
this.statIs = statIs;
}

public void setAdView(AdViews adView) {
this.adView = adView;
public static VideoAd of(VideoAdRequestDto videoAdRequestDto) {
return VideoAd.builder()
.ad(videoAdRequestDto.getAd())
.viewCount(videoAdRequestDto.getViewCount())
.video(videoAdRequestDto.getVideo())
.statIs(videoAdRequestDto.isStatIs())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@
@Repository
public interface VideoAdRepository extends JpaRepository<VideoAd, Long> {
List<VideoAd> findByVideo(Videos video);
List<VideoAd> findByVideo_VideoId(Long videoId);
}
17 changes: 2 additions & 15 deletions src/main/java/com/sparta/binplay/service/VideoAdService.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,13 @@
package com.sparta.binplay.service;

import com.sparta.binplay.dto.response.VideoAdResponseDto;
import com.sparta.binplay.entity.VideoAd;
import com.sparta.binplay.repository.AdRepository;
import com.sparta.binplay.repository.AdViewRepository;
import com.sparta.binplay.repository.VideoAdRepository;
import com.sparta.binplay.repository.VideoRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class VideoAdService {
private final VideoAdRepository videoAdRepository;
private final VideoRepository videoRepository;
private final AdRepository adRepository;

// 특정 광고 재생 횟수 업데이트
public VideoAdResponseDto updateAdCount(Long videoAdId) {
VideoAd videoAd = videoAdRepository.findById(videoAdId).orElseThrow(() -> new RuntimeException("영상을 찾을 수 없습니다."));

videoAdRepository.save(videoAd);

return VideoAdResponseDto.from(videoAd);
}
private final AdViewRepository adViewRepository;
}
76 changes: 47 additions & 29 deletions src/main/java/com/sparta/binplay/service/VideoService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sparta.binplay.service;

import com.sparta.binplay.dto.request.VideoAdRequestDto;
import com.sparta.binplay.dto.request.VideoRequestDto;
import com.sparta.binplay.dto.response.VideoResponseDto;
import com.sparta.binplay.entity.*;
Expand Down Expand Up @@ -43,10 +44,33 @@ public VideoResponseDto createVideo(VideoRequestDto videoRequestDto) throws Exce
// Videos 엔티티를 먼저 저장
Videos saveVideo = videoRepository.save(Videos.of(user, videoRequestDto));

// 광고 개수 계산 및 저장
int numberOfAds = (int) (saveVideo.getVideoLength() / (5 * 60)); // 5분마다 1개의 광고 (5분 = 300초)
List<Ads> adsList = adRepository.findAll();

Random random = new Random();

for (int i = 0; i < numberOfAds; i++) {
int randomAdIndex = random.nextInt(adsList.size());
Ads ad = adsList.get(randomAdIndex);

// VideoAdRequestDto 생성
VideoAdRequestDto videoAdRequestDto = VideoAdRequestDto.builder()
.ad(ad)
.viewCount(0)
.video(saveVideo)
.statIs(false)
.build();

// VideoAd 생성 및 저장
VideoAd videoAd = VideoAd.of(videoAdRequestDto);
VideoAd savedVideoAd = videoAdRepository.save(videoAd);
}

return VideoResponseDto.from(saveVideo);
}

@Transactional
/*@Transactional
public void matchAd(VideoRequestDto videoRequestDto) throws Exception {
Users user = getAuthenticatedUser();
Videos savedVideo = videoRepository.save(Videos.of(user, videoRequestDto));
Expand All @@ -61,26 +85,29 @@ public void matchAd(VideoRequestDto videoRequestDto) throws Exception {
int randomAdIndex = random.nextInt(adsList.size());
Ads ad = adsList.get(randomAdIndex);
// AdViews 생성
AdViews adView = new AdViews();
AdViews savedAdView = adViewRepository.save(adView);

// VideoAd 생성 및 저장
VideoAd videoAd = VideoAd.builder()
// VideoAdRequestDto 생성
VideoAdRequestDto videoAdRequestDto = VideoAdRequestDto.builder()
.ad(ad)
.viewCount(0)
.video(savedVideo)
.stat_is(false)
.adView(savedAdView)
.statIs(false)
.build();
// VideoAd 생성 및 저장
VideoAd videoAd = VideoAd.of(videoAdRequestDto);
VideoAd savedVideoAd = videoAdRepository.save(videoAd);
// AdViews와 VideoAd 연결
savedAdView.setVideoAd(savedVideoAd);
adViewRepository.save(savedAdView);
// AdViewsRequestDto 생성
AdViewRequestDto adViewsRequestDto = AdViewRequestDto.builder()
.createdAt(LocalDate.now()) // 예시로 현재 날짜 사용
.videoAd(savedVideoAd)
.build();
// AdViews 생성 및 저장
AdViews adView = AdViews.of(adViewsRequestDto);
AdViews saveAdView = adViewRepository.save(adView);
}
}
}*/

//비디오 조회
public List<VideoResponseDto> getVideoList() throws Exception {
Expand Down Expand Up @@ -108,22 +135,13 @@ public VideoResponseDto updateVideo(Long videoId, VideoRequestDto videoRequestDt
// 비디오 삭제
@Transactional
public void deleteVideo(Long videoId) throws Exception {
// Videos video = videoRepository.findById(videoId)
// .orElseThrow(() -> new Exception("Video not found"));
//
// // VideoAd 엔티티의 관계를 해제
// List<VideoAd> videoAds = videoAdRepository.findByVideo(video);
// for (VideoAd videoAd : videoAds) {
// AdViews adView = videoAd.getAdViews();
// if (adView != null) {
// adView.setVideoAd(null); // 관계 해제
// adViewRepository.delete(adView);
// }
// videoAdRepository.delete(videoAd);
// }
//
// // Video 엔티티 삭제
// videoRepository.delete(video);
Videos video = getVideos(videoId);
Users user = video.getUser();
user.getVideos().remove(video); // User의 비디오 리스트에서 비디오 제거
videoRepository.delete(video);

// Video 엔티티 삭제
videoRepository.delete(video);
}

//회원 찾기
Expand Down

0 comments on commit aa1159b

Please sign in to comment.