Skip to content
Merged
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.example.backend.dashboard.service;

import com.amazonaws.HttpMethod;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.example.backend.common.domain.CaseEntity;
import com.example.backend.common.domain.CctvEntity;
import com.example.backend.common.domain.OfficeEntity;
Expand All @@ -9,10 +12,13 @@
import com.example.backend.search.repository.CctvRepository;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.concurrent.TimeUnit;

@Service
@Transactional
Expand All @@ -22,6 +28,10 @@ public class CaseDetectService {
private final DashboardRepository caseRepository;
private final CctvRepository cctvRepository; // CCTV 정보(주소) 조회용

@Value("${cloud.aws.bucket}")
private String bucket;
private final AmazonS3 s3Client;

public CaseDetectResponse saveCase(CaseDetectRequest request) {
// 1) CCTV 정보 조회 (주소 포함)
CctvEntity cctvEntity = cctvRepository.findById(request.getCctvId())
Expand All @@ -48,7 +58,23 @@ public CaseDetectResponse saveCase(CaseDetectRequest request) {

CaseEntity saved = caseRepository.save(caseEntity);

CaseDetectResponse detect_case = CaseDetectResponse.fromEntity(saved);

// Presigned URL 유효기간 설정 (30분)
Date expiration = new Date();
long expTime = expiration.getTime();
expTime += TimeUnit.MINUTES.toMillis(30); // 30 minute
expiration.setTime(expTime);

GeneratePresignedUrlRequest presignRequest =
new GeneratePresignedUrlRequest(bucket, detect_case.getVideo())
.withMethod(HttpMethod.GET)
.withExpiration(expiration);

String url = s3Client.generatePresignedUrl(presignRequest).toString();
detect_case.setVideo(url);

// 3) DTO 변환: 기존에 정의한 fromEntity 메서드를 사용하여 응답 객체 생성
return CaseDetectResponse.fromEntity(saved);
return detect_case;
}
}
Loading