Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
e53be33
Feat : ์—…๋กœ๋“œ ์š”์ฒญ์„ ๋‹ด์„ dto ์ž‘์„ฑ
tlswltjq Sep 26, 2025
cd03917
Chore : ๋ถˆํ•„์š”ํ•œ ํŠธ๋žœ์žญ์…”๋„ ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ
tlswltjq Sep 26, 2025
e37fac9
Chore : ํŒจํ‚ค์ง€ ์œ„์น˜๋ณ€๊ฒฝ
tlswltjq Sep 26, 2025
1be32ce
Chore : ํ•„์š”์—†๋Š” ํด๋ž˜์Šค ์‚ญ์ œ
tlswltjq Sep 26, 2025
6c38525
Refactor : VideoService๋กœ ๋ถ€ํ„ฐ S3๊ธฐ๋Šฅ ๋ถ„๋ฆฌ
tlswltjq Sep 26, 2025
c92a01c
Chore : ํŒจํ‚ค์ง€ ์œ„์น˜ ๋ณ€๊ฒฝ
tlswltjq Sep 26, 2025
444000c
Feat : ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ
tlswltjq Sep 26, 2025
41cf8bb
Feat : UUID ์™ธ๋ถ€์—์„œ ๊ฒฐ์ •๋˜์–ด ์ „๋‹ฌ๋˜๋„๋ก ์ˆ˜์ •
tlswltjq Sep 26, 2025
a7a3afd
Refactor : Video์—”ํ‹ฐํ‹ฐ ์ˆ˜์ •
tlswltjq Sep 26, 2025
e845990
Test : Video์—”ํ‹ฐํ‹ฐ ์ˆ˜์ •์— ๋”ฐ๋ฅธ ๋ณ€๊ฒฝ
tlswltjq Sep 26, 2025
aefd997
Test : ํ…Œ์ŠคํŠธ ๋ถ„๋ฆฌ
tlswltjq Sep 26, 2025
c5c82f7
Refactor : Instant -> LocalDateTime์œผ๋กœ ๋ณ€๊ฒฝ
tlswltjq Sep 26, 2025
e6e4dba
Feat : ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ
tlswltjq Sep 26, 2025
7b7b5ba
Feat : ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ Url ๋ฐœ๊ธ‰
tlswltjq Sep 26, 2025
991bdc8
Refactor : ๋ฐ˜ํ™˜ํƒ€์ž… ๋ณ€๊ฒฝ
tlswltjq Sep 27, 2025
f1a3000
Refactor : ์—๋Ÿฌํƒ€์ž… ์ˆ˜์ •, generateDashUrls Deprecate, ์—”๋“œํฌ์ธํŠธ ๋ฐ˜ํ™˜ํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
94d9aa7
Refactor : ํ•„๋“œ๋ช… ์ˆ˜์ •
tlswltjq Sep 28, 2025
8352b36
Refactor : ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋ฉ”์„œ๋“œ์ถ”๊ฐ€ ๋ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
tlswltjq Sep 28, 2025
58fa1de
Feat : ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
tlswltjq Sep 28, 2025
8821140
Test : ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
tlswltjq Sep 28, 2025
b07d547
Chore : ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
408bf60
Refactor : ์—๋Ÿฌ ๋ฐ˜ํ™˜ํƒ€์ž… ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
110c629
Chore : ๋ฉ”์‹œ์ง€ ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
a308841
Feat : ์—…๋ฐ์ดํŠธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
tlswltjq Sep 28, 2025
a6da2ea
Test : ํ”ฝ์Šค์ณ ํด๋ž˜์Šค ๋ฐ ํ…Œ์ŠคํŠธ ์ˆ˜์ •
tlswltjq Sep 28, 2025
99fab0b
Test : ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
tlswltjq Sep 28, 2025
2d45082
Chore : ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ
tlswltjq Sep 28, 2025
bfee749
Refactor : ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
b5318cb
Refactor : isExist()๊ฐœ์„  ๋ฐ validateRequest()์ถ”๊ฐ€
tlswltjq Sep 28, 2025
48a5214
Test : ๋ณ€๊ฒฝ๋œ ๊ฒ€์ฆ๋กœ์ง์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ์ˆ˜์ •
tlswltjq Sep 28, 2025
e33b141
Chore : ์‚ฌ์šฉํ•˜์ง€์•Š์„ ๋ฉ”์„œ๋“œ์™€ ํ…Œ์ŠคํŠธ ์‚ญ์ œ
tlswltjq Sep 28, 2025
11bb82c
Refactor : ์ˆœ์„œ ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
5972719
Refactor : ๋ฐ˜ํ™˜ ์—๋Ÿฌ ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
e2864f9
Test : ๋ถˆํ•„์š”ํ•ด์ง„ ์Šคํ„ฐ๋น™ ์ œ๊ฑฐ
tlswltjq Sep 28, 2025
d12e3f7
Test : ํ…Œ์ŠคํŠธ ์ˆ˜์ •
tlswltjq Sep 28, 2025
0b3cc3e
Refactor : ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์ž ์‚ญ์ œ
tlswltjq Sep 28, 2025
a00576e
Refactor : ์˜ˆ์™ธํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
6929532
Refactor : ์˜ˆ์™ธํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
e56037a
Refactor : ์˜ˆ์™ธํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
91b8133
Refactor : ์˜ˆ์™ธํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
bc30fa2
Chore : ์ด๋ฆ„ ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
74da691
Refactor : ๋žŒ๋‹ค ํ™œ์šฉํ•ด ์ˆ˜์ •
tlswltjq Sep 28, 2025
6a38022
Refactor : ์ด๋ฆ„ ๋ณ€๊ฒฝ
tlswltjq Sep 28, 2025
243f7fe
Refactor : ์ž˜๋ชป ๋ณ€๊ฒฝ๋œ ๋กœ์ง ์ˆ˜์ •
tlswltjq Sep 28, 2025
18a0385
Feat : ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€
tlswltjq Sep 28, 2025
6d122a2
Refactor : ์˜ˆ์™ธํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
02b2176
Test : ์˜ˆ์™ธํƒ€์ž… ์ˆ˜์ •
tlswltjq Sep 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

66 changes: 0 additions & 66 deletions back/src/main/java/com/back/domain/file/entity/Video.java

This file was deleted.

112 changes: 0 additions & 112 deletions back/src/main/java/com/back/domain/file/service/VideoService.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.back.domain.file.video.controller;

import com.back.domain.file.video.dto.controller.UploadUrlGetResponse;
import com.back.domain.file.video.dto.service.PresignedUrlResponse;
import com.back.domain.file.video.service.FileManager;
import com.back.global.rsData.RsData;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class VideoController {
private final FileManager fileManager;

@GetMapping("/videos/upload")
public RsData<UploadUrlGetResponse> getUploadUrl() {
PresignedUrlResponse uploadUrl = fileManager.getUploadUrl();
UploadUrlGetResponse response = new UploadUrlGetResponse(uploadUrl.url(), uploadUrl.expiresAt());
return new RsData<>("200", "์—…๋กœ๋“œ์šฉ URL ์š”์ฒญ์™„๋ฃŒ", response);
}

@GetMapping("/videos/download")
public RsData<UploadUrlGetResponse> getDownloadUrls(@RequestParam String objectKey) {
PresignedUrlResponse downloadUrl = fileManager.getDownloadUrl(objectKey);
UploadUrlGetResponse response = new UploadUrlGetResponse(downloadUrl.url(), downloadUrl.expiresAt());
return new RsData<>("200", "๋‹ค์šด๋กœ๋“œ์šฉ URL ์š”์ฒญ์™„๋ฃŒ", response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.back.domain.file.video.dto.controller;

import java.net.URL;
import java.time.LocalDateTime;

public record UploadUrlGetResponse(
URL url,
LocalDateTime expiresAt
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.back.domain.file.video.dto.service;

import java.net.URL;
import java.time.LocalDateTime;

public record PresignedUrlResponse(
URL url,
LocalDateTime expiresAt
) {
}
60 changes: 60 additions & 0 deletions back/src/main/java/com/back/domain/file/video/entity/Video.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.back.domain.file.video.entity;

import com.back.global.jpa.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Video extends BaseEntity {
@Column(unique = true)
private String uuid;

@JdbcTypeCode(SqlTypes.JSON)
private String status;

private String path;

private Integer duration;

private Long fileSize;

@Builder(access = AccessLevel.PRIVATE)
private Video(String uuid, String status, String path, Integer duration, Long fileSize) {
this.uuid = uuid;
this.status = status;
this.path = path;
this.duration = duration;
this.fileSize = fileSize;
}

public static Video create(String uuid, String status, String path, Integer duration, Long fileSize) {
if (uuid == null || uuid.isBlank()) {
throw new IllegalArgumentException("uuid cannot be null or empty");
}
if (path == null || path.isBlank()) {
throw new IllegalArgumentException("path cannot be null or empty");
}

return Video.builder()
.uuid(uuid)
.status(status)
.path(path)
.duration(duration)
.fileSize(fileSize)
.build();
}
public void updateStatus(String status) {
if (status == null || status.isBlank()) {
throw new IllegalArgumentException("status cannot be null or empty");
}
this.status = status;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.back.domain.file.repository;
package com.back.domain.file.video.repository;

import com.back.domain.file.entity.Video;
import com.back.domain.file.video.entity.Video;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.back.domain.file.video.service;


import com.back.domain.file.video.dto.service.PresignedUrlResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.net.URL;
import java.time.LocalDateTime;
import java.util.UUID;

@Service
@RequiredArgsConstructor
public class FileManager {
private final VideoService videoService;
private final S3Service s3Service;

public PresignedUrlResponse getUploadUrl() {
String uuid = UUID.randomUUID().toString();
Integer expires = 5;
URL url = s3Service.generateUploadUrl("videos", uuid, expires);
LocalDateTime expiresAt = LocalDateTime.now().plusMinutes(expires);
return new PresignedUrlResponse(url, expiresAt);
}

public PresignedUrlResponse getDownloadUrl(String objectKey) {
Integer expires = 60;
URL url = s3Service.generateDownloadUrl("videos", objectKey, expires);
LocalDateTime expiresAt = LocalDateTime.now().plusMinutes(expires);
return new PresignedUrlResponse(url, expiresAt);
}
}
Loading