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