diff --git a/.gitignore b/.gitignore
index f7add27..1a63562 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
+downloads/
!**/src/test/**/target/
### STS ###
diff --git a/pom.xml b/pom.xml
index 4c5fcd6..b89e8e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,14 +44,22 @@
org.springframework.boot
spring-boot-starter-webmvc
-
org.projectlombok
lombok
1.18.40
provided
-
+
+ org.flywaydb
+ flyway-database-postgresql
+ 12.0.3
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-flyway
+
org.postgresql
postgresql
@@ -67,6 +75,12 @@
spring-boot-starter-webmvc-test
test
+
+ org.jetbrains
+ annotations
+ 26.1.0
+ compile
+
@@ -75,6 +89,17 @@
org.springframework.boot
spring-boot-maven-plugin
+
+ org.flywaydb
+ flyway-maven-plugin
+ 12.0.1
+
+ jdbc:postgresql://127.0.0.1:5432/videos
+ postgres
+ 5995
+ false
+
+
diff --git a/src/main/java/com/example/video_downloader/VideoDownloaderApplication.java b/src/main/java/com/example/video_downloader/VideoDownloaderApplication.java
index 3b61d97..18b9f0b 100644
--- a/src/main/java/com/example/video_downloader/VideoDownloaderApplication.java
+++ b/src/main/java/com/example/video_downloader/VideoDownloaderApplication.java
@@ -10,4 +10,4 @@ public class VideoDownloaderApplication {
SpringApplication.run(VideoDownloaderApplication.class, args);
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/video_downloader/controllers/VideoController.java b/src/main/java/com/example/video_downloader/controllers/VideoController.java
index 86682cd..7850e91 100644
--- a/src/main/java/com/example/video_downloader/controllers/VideoController.java
+++ b/src/main/java/com/example/video_downloader/controllers/VideoController.java
@@ -1,39 +1,49 @@
package com.example.video_downloader.controllers;
+import com.example.video_downloader.dto.SaveNewPlaylistRequest;
import com.example.video_downloader.dto.SaveNewVideoRequest;
+import com.example.video_downloader.entity.Playlist;
import com.example.video_downloader.entity.Video;
+import com.example.video_downloader.services.PlaylistService;
import com.example.video_downloader.services.VideoService;
+import com.example.video_downloader.services.YTDLPService;
import lombok.Data;
+import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
-import org.springframework.web.server.ResponseStatusException;
+import java.io.IOException;
import java.util.List;
-import java.util.Optional;
@RestController
-@RequestMapping(path="/video")
+@RequestMapping(path="/v2")
@CrossOrigin(origins = "http://localhost:3000")
public class VideoController {
@Autowired
private VideoService videoService;
+ @Autowired
+ private PlaylistService playlistService;
+
+ @Autowired
+ private YTDLPService ytdlpService;
+
+
@Data
- private class Response {
- private Long id;
+ private static class Trigger {
+ private boolean input;
}
@PostMapping(path = "/videos")
- public Response saveNewVideo(@RequestBody SaveNewVideoRequest request){
+ public Video saveNewVideo(@RequestBody SaveNewVideoRequest request){
+ return videoService.saveNewVideo(request);
+ }
- Response response = new Response();
- Video video = videoService.saveNewVideo(request);
- response.setId(video.getId());
-
- return response;
+ @PostMapping(path = "/playlists")
+ public void saveNewPlaylist(@RequestBody SaveNewPlaylistRequest request){
+ Playlist playlist = playlistService.saveNewPlaylist(request);
}
@@ -47,4 +57,17 @@ public class VideoController {
return ResponseEntity.ok(videoService.getVideoById(id));
}
+
+ @PostMapping(path = "/fire")
+ public int getJobDone(@RequestBody @NotNull Trigger trigger) throws IOException, InterruptedException {
+
+ int statusCode = 200;
+ if(trigger.input) {
+ ytdlpService.processPlaylist();
+ ytdlpService.validateVideos();
+ ytdlpService.downloadVideos();
+ }
+ return statusCode;
+
+ }
}
diff --git a/src/main/java/com/example/video_downloader/dto/SaveNewPlaylistRequest.java b/src/main/java/com/example/video_downloader/dto/SaveNewPlaylistRequest.java
new file mode 100644
index 0000000..6768aa8
--- /dev/null
+++ b/src/main/java/com/example/video_downloader/dto/SaveNewPlaylistRequest.java
@@ -0,0 +1,9 @@
+package com.example.video_downloader.dto;
+
+import lombok.Data;
+
+@Data
+public class SaveNewPlaylistRequest {
+ private String playlistName;
+ private String url;
+}
diff --git a/src/main/java/com/example/video_downloader/entity/Creator.java b/src/main/java/com/example/video_downloader/entity/Creator.java
new file mode 100644
index 0000000..7174c01
--- /dev/null
+++ b/src/main/java/com/example/video_downloader/entity/Creator.java
@@ -0,0 +1,20 @@
+package com.example.video_downloader.entity;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@Entity
+public class Creator {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ private String name;
+ private String url;
+
+ @OneToMany(mappedBy = "creator")
+ private List