From e93ccd2ecda23183ce0760b3ec1e941c2ce72de2 Mon Sep 17 00:00:00 2001 From: ThisBirchWood Date: Wed, 25 Jun 2025 19:07:38 +0200 Subject: [PATCH] ADD Clip database insertion & UPDATE schema --- .../vodsystem/controllers/EditController.java | 1 + .../java/com/ddf/vodsystem/entities/Clip.java | 6 ++-- .../vodsystem/security/CustomOAuth2User.java | 36 +++++++++++++++++++ .../security/CustomOAuth2UserService.java | 34 +++++++++--------- .../ddf/vodsystem/services/EditService.java | 34 +++++++++++++++--- src/main/resources/db/data.sql | 22 ++++++------ src/main/resources/db/schema.sql | 6 ++-- 7 files changed, 101 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/ddf/vodsystem/security/CustomOAuth2User.java diff --git a/src/main/java/com/ddf/vodsystem/controllers/EditController.java b/src/main/java/com/ddf/vodsystem/controllers/EditController.java index 4c6c2ca..d341902 100644 --- a/src/main/java/com/ddf/vodsystem/controllers/EditController.java +++ b/src/main/java/com/ddf/vodsystem/controllers/EditController.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import com.ddf.vodsystem.entities.APIResponse; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/ddf/vodsystem/entities/Clip.java b/src/main/java/com/ddf/vodsystem/entities/Clip.java index f58d6ea..bf655cb 100644 --- a/src/main/java/com/ddf/vodsystem/entities/Clip.java +++ b/src/main/java/com/ddf/vodsystem/entities/Clip.java @@ -36,13 +36,13 @@ public class Clip { private Integer height; @Column(name = "fps", nullable = false) - private Integer fps; + private Float fps; @Column(name = "duration", nullable = false) - private Integer duration; + private Float duration; @Column(name = "file_size", nullable = false) - private Long fileSize; + private Float fileSize; @Column(name = "video_path", nullable = false, length = 255) private String videoPath; diff --git a/src/main/java/com/ddf/vodsystem/security/CustomOAuth2User.java b/src/main/java/com/ddf/vodsystem/security/CustomOAuth2User.java new file mode 100644 index 0000000..e724d14 --- /dev/null +++ b/src/main/java/com/ddf/vodsystem/security/CustomOAuth2User.java @@ -0,0 +1,36 @@ +package com.ddf.vodsystem.security; + +import com.ddf.vodsystem.entities.User; +import lombok.Getter; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.oauth2.core.user.OAuth2User; + +import java.util.Collection; +import java.util.Map; + +public class CustomOAuth2User implements OAuth2User { + + private final OAuth2User oauth2User; + @Getter + private final User user; + + public CustomOAuth2User(OAuth2User oauth2User, User user) { + this.oauth2User = oauth2User; + this.user = user; + } + + @Override + public Map getAttributes() { + return oauth2User.getAttributes(); + } + + @Override + public Collection getAuthorities() { + return oauth2User.getAuthorities(); + } + + @Override + public String getName() { + return oauth2User.getName(); + } +} diff --git a/src/main/java/com/ddf/vodsystem/security/CustomOAuth2UserService.java b/src/main/java/com/ddf/vodsystem/security/CustomOAuth2UserService.java index 2cf1212..a611b0a 100644 --- a/src/main/java/com/ddf/vodsystem/security/CustomOAuth2UserService.java +++ b/src/main/java/com/ddf/vodsystem/security/CustomOAuth2UserService.java @@ -4,16 +4,16 @@ import com.ddf.vodsystem.repositories.UserRepository; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; import java.time.LocalDateTime; -import java.util.Optional; @Service -public class CustomOAuth2UserService extends DefaultOAuth2UserService { +public class CustomOAuth2UserService implements OAuth2UserService { private final UserRepository userRepository; @@ -22,26 +22,26 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService { } @Override - public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { - OAuth2User oAuth2User = super.loadUser(userRequest); + public CustomOAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { + var delegate = new DefaultOAuth2UserService(); + var oAuth2User = delegate.loadUser(userRequest); String email = oAuth2User.getAttribute("email"); String name = oAuth2User.getAttribute("name"); String googleId = oAuth2User.getAttribute("sub"); - Optional existingUser = userRepository.findByGoogleId(googleId); + User user = userRepository.findByGoogleId(googleId) + .orElseGet(() -> { + User newUser = new User(); + newUser.setEmail(email); + newUser.setName(name); + newUser.setGoogleId(googleId); + newUser.setUsername(email); + newUser.setRole(0); + newUser.setCreatedAt(LocalDateTime.now()); + return userRepository.save(newUser); + }); - if (existingUser.isEmpty()) { - User user = new User(); - user.setEmail(email); - user.setName(name); - user.setGoogleId(googleId); - user.setUsername(email); - user.setRole(0); - user.setCreatedAt(LocalDateTime.now()); - userRepository.save(user); - } - - return oAuth2User; + return new CustomOAuth2User(oAuth2User, user); } } diff --git a/src/main/java/com/ddf/vodsystem/services/EditService.java b/src/main/java/com/ddf/vodsystem/services/EditService.java index 83b4caf..3f13bb1 100644 --- a/src/main/java/com/ddf/vodsystem/services/EditService.java +++ b/src/main/java/com/ddf/vodsystem/services/EditService.java @@ -1,16 +1,22 @@ package com.ddf.vodsystem.services; -import com.ddf.vodsystem.entities.VideoMetadata; -import com.ddf.vodsystem.entities.Job; -import com.ddf.vodsystem.entities.JobStatus; +import com.ddf.vodsystem.entities.*; +import com.ddf.vodsystem.repositories.ClipRepository; +import com.ddf.vodsystem.security.CustomOAuth2User; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; + @Service public class EditService { private final JobService jobService; + private final ClipRepository clipRepository; - public EditService(JobService jobService) { + public EditService(JobService jobService, ClipRepository clipRepository) { this.jobService = jobService; + this.clipRepository = clipRepository; } public void edit(String uuid, VideoMetadata videoMetadata) { @@ -21,6 +27,26 @@ public class EditService { public void process(String uuid) { jobService.jobReady(uuid); + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + + if (auth != null && auth.isAuthenticated() && auth.getPrincipal() instanceof CustomOAuth2User oAuth2user) { + VideoMetadata videoMetadata = jobService.getJob(uuid).getOutputVideoMetadata(); + User user = oAuth2user.getUser(); + + Clip clip = new Clip(); + clip.setTitle("test"); + clip.setUser(user); + clip.setDescription("This is a test"); + clip.setCreatedAt(LocalDateTime.now()); + clip.setWidth(videoMetadata.getWidth()); + clip.setHeight(videoMetadata.getHeight()); + clip.setFps(videoMetadata.getFps()); + clip.setDuration(videoMetadata.getEndPoint() - + videoMetadata.getStartPoint()); + clip.setFileSize(videoMetadata.getFileSize()); + clip.setVideoPath("test"); + clipRepository.save(clip); + } } public float getProgress(String uuid) { diff --git a/src/main/resources/db/data.sql b/src/main/resources/db/data.sql index ddb0c87..8b831b3 100644 --- a/src/main/resources/db/data.sql +++ b/src/main/resources/db/data.sql @@ -11,15 +11,15 @@ VALUES ( 'google-uid-009', 'detective', 'holmes@bakerstreet.uk', 'Sherlock Holmes'), ( 'google-uid-010', 'timey', 'docbrown@delorean.net', 'Dr. Emmett Brown'); -INSERT INTO clips (id, user_id, title, description, width, height, fps, duration, file_size, video_path) +INSERT INTO clips (user_id, title, description, width, height, fps, duration, file_size, video_path) VALUES - (1, 4, 'Fireworks Over Hobbiton', 'A magical display of fireworks by Gandalf.', 1920, 1080, 30, 120, 104857600, '/videos/fireworks_hobbiton.mp4'), - (2, 5, 'Catnap Chronicles', 'Sir Whiskers McFluff naps in 12 different positions.', 1280, 720, 24, 60, 52428800, '/videos/catnap_chronicles.mp4'), - (3, 6, 'Bite My Shiny Metal...', 'Bender shows off his new upgrades.', 1920, 1080, 60, 45, 73400320, '/videos/bender_upgrades.mp4'), - (4, 7, 'Rainbow Dash', 'Princess Sparklehoof gallops across a double rainbow.', 1920, 1080, 30, 90, 67108864, '/videos/rainbow_dash.mp4'), - (5, 8, 'Pirate Karaoke Night', 'Blackbeard sings sea shanties with his crew.', 1280, 720, 25, 180, 157286400, '/videos/pirate_karaoke.mp4'), - (6, 9, 'The Case of the Missing Sandwich', 'Sherlock Holmes investigates a lunchtime mystery.', 1920, 1080, 30, 75, 50331648, '/videos/missing_sandwich.mp4'), - (7, 10, '88 Miles Per Hour', 'Doc Brown demonstrates time travel with style.', 1920, 1080, 60, 30, 41943040, '/videos/88mph.mp4'), - (8, 1, 'Alice in Videoland', 'Alice explores a surreal digital wonderland.', 1280, 720, 30, 150, 94371840, '/videos/alice_videoland.mp4'), - (9, 2, 'Bob''s Building Bonanza', 'Bob constructs a house out of cheese.', 1920, 1080, 24, 200, 209715200, '/videos/bob_cheesehouse.mp4'), - (10, 3, 'Carol''s Coding Catastrophe', 'Carol debugs a spaghetti codebase.', 1280, 720, 30, 100, 73400320, '/videos/carol_coding.mp4'); \ No newline at end of file + (4, 'Fireworks Over Hobbiton', 'A magical display of fireworks by Gandalf.', 1920, 1080, 30, 120, 104857600, '/videos/fireworks_hobbiton.mp4'), + (5, 'Catnap Chronicles', 'Sir Whiskers McFluff naps in 12 different positions.', 1280, 720, 24, 60, 52428800, '/videos/catnap_chronicles.mp4'), + (6, 'Bite My Shiny Metal...', 'Bender shows off his new upgrades.', 1920, 1080, 60, 45, 73400320, '/videos/bender_upgrades.mp4'), + (7, 'Rainbow Dash', 'Princess Sparklehoof gallops across a double rainbow.', 1920, 1080, 30, 90, 67108864, '/videos/rainbow_dash.mp4'), + ( 8, 'Pirate Karaoke Night', 'Blackbeard sings sea shanties with his crew.', 1280, 720, 25, 180, 157286400, '/videos/pirate_karaoke.mp4'), + ( 9, 'The Case of the Missing Sandwich', 'Sherlock Holmes investigates a lunchtime mystery.', 1920, 1080, 30, 75, 50331648, '/videos/missing_sandwich.mp4'), + ( 10, '88 Miles Per Hour', 'Doc Brown demonstrates time travel with style.', 1920, 1080, 60, 30, 41943040, '/videos/88mph.mp4'), + ( 1, 'Alice in Videoland', 'Alice explores a surreal digital wonderland.', 1280, 720, 30, 150, 94371840, '/videos/alice_videoland.mp4'), + ( 2, 'Bob''s Building Bonanza', 'Bob constructs a house out of cheese.', 1920, 1080, 24, 200, 209715200, '/videos/bob_cheesehouse.mp4'), + ( 3, 'Carol''s Coding Catastrophe', 'Carol debugs a spaghetti codebase.', 1280, 720, 30, 100, 73400320, '/videos/carol_coding.mp4'); \ No newline at end of file diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql index bb261e5..64160d3 100644 --- a/src/main/resources/db/schema.sql +++ b/src/main/resources/db/schema.sql @@ -19,9 +19,9 @@ CREATE TABLE IF NOT EXISTS clips ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, width INTEGER NOT NULL, height INTEGER NOT NULL, - fps INTEGER NOT NULL, - duration INTEGER NOT NULL, - file_size BIGINT NOT NULL, + fps FLOAT NOT NULL, + duration FLOAT NOT NULL, + file_size FLOAT NOT NULL, video_path VARCHAR(255) NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); \ No newline at end of file