From 1cb292f96a0ec7400b3272013ad3a6844cecc5a1 Mon Sep 17 00:00:00 2001 From: Doeun Jeong Date: Tue, 11 Mar 2025 15:26:08 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20/api/dogam/upload=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/BungDogamController.java | 28 +++++++++++++++++++ .../service/FileStorageService.java | 16 ----------- src/main/resources/application.yml | 20 ++++++------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/main/java/swyp_8th/bungmakase_backend/api/BungDogamController.java b/src/main/java/swyp_8th/bungmakase_backend/api/BungDogamController.java index 7f6fed5..9668435 100644 --- a/src/main/java/swyp_8th/bungmakase_backend/api/BungDogamController.java +++ b/src/main/java/swyp_8th/bungmakase_backend/api/BungDogamController.java @@ -6,6 +6,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import swyp_8th.bungmakase_backend.config.JwtConfig; import swyp_8th.bungmakase_backend.domain.BungDogam; import swyp_8th.bungmakase_backend.domain.UserBungDogam; @@ -17,6 +18,7 @@ import swyp_8th.bungmakase_backend.globals.response.ResponseTemplate; import swyp_8th.bungmakase_backend.repository.UserBungDogamRepository; import swyp_8th.bungmakase_backend.service.BungDogamService; +import swyp_8th.bungmakase_backend.service.FileStorageService; import java.util.*; import java.util.stream.Collectors; @@ -30,6 +32,7 @@ public class BungDogamController { private final BungDogamService bungDogamService; private final JwtConfig jwtConfig; + private final FileStorageService fileStorageService; @GetMapping("/list") public ResponseEntity>> getAllBungDogam() { @@ -120,6 +123,31 @@ public ResponseEntity> getBungDogam( } } + @PostMapping(value = "/upload", consumes = {"multipart/form-data"}) + public ResponseEntity>> uploadImage(@RequestPart("image") MultipartFile image) { + + if (image.isEmpty()) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(new ResponseTemplate<>(FailureCode.BAD_REQUEST_400, null)); + } + + try { + // S3에 이미지 업로드 + String imageUrl = fileStorageService.uploadFile(image); + + Map responseData = new HashMap<>(); + responseData.put("imageUrl", imageUrl); + + return ResponseEntity.status(HttpStatus.OK) + .body(new ResponseTemplate<>(SuccessCode.SUCCESS_200, responseData)); + + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ResponseTemplate<>(FailureCode.SERVER_ERROR_500, null)); + } + } + + /*@Operation( summary = "유저 붕어빵 도감 추가용 임시 API", description = "특정 유저의 붕어빵 도감에 새로운 붕어빵을 추가 (bungId는 1~11)" diff --git a/src/main/java/swyp_8th/bungmakase_backend/service/FileStorageService.java b/src/main/java/swyp_8th/bungmakase_backend/service/FileStorageService.java index 5ae4224..0d2447e 100644 --- a/src/main/java/swyp_8th/bungmakase_backend/service/FileStorageService.java +++ b/src/main/java/swyp_8th/bungmakase_backend/service/FileStorageService.java @@ -33,22 +33,6 @@ public class FileStorageService { // 파일 업로드 및 URL 반환 public String uploadFile(MultipartFile file) { -// String fileName = file.getOriginalFilename(); -// -// try { -// ObjectMetadata metadata = new ObjectMetadata(); -// metadata.setContentLength(file.getSize()); // 파일 크기 설정 -// metadata.setContentType(file.getContentType()); // MIME 타입 설정 -// -// amazonS3.putObject( -// new PutObjectRequest(bucket, fileName, file.getInputStream(), metadata) // metadata 적용 -// .withCannedAcl(CannedAccessControlList.PublicRead) // 퍼블릭 읽기 권한 부여 -// ); -// -// return amazonS3.getUrl(bucket, fileName).toString(); -// } catch (IOException e) { -// throw new RuntimeException("파일 업로드 중 오류가 발생했습니다.", e); -// } try { String fileName = file.getOriginalFilename(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4a82ad3..f79d18c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -66,13 +66,13 @@ ncp: server: - port: 443 - ssl: - key-store: classpath:keystore.p12 - key-store-password: bungmakase - key-store-type: PKCS12 - enabled: true - tomcat: - threads: - max: 200 # 최대 스레드 수 - min-spare: 20 # 최소 대기 스레드 수 \ No newline at end of file + port: 8080 +# ssl: +# key-store: classpath:keystore.p12 +# key-store-password: bungmakase +# key-store-type: PKCS12 +# enabled: true +# tomcat: +# threads: +# max: 200 # 최대 스레드 수 +# min-spare: 20 # 최소 대기 스레드 수 \ No newline at end of file From 27dad78e64e24e239bec563ab37dd40e06feec54 Mon Sep 17 00:00:00 2001 From: Doeun Jeong Date: Tue, 11 Mar 2025 15:54:10 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EB=B6=95=20=EB=A0=88=EB=B2=A8=20?= =?UTF-8?q?=EC=83=81=EC=8A=B9=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bungmakase_backend/service/BungLogService.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/swyp_8th/bungmakase_backend/service/BungLogService.java b/src/main/java/swyp_8th/bungmakase_backend/service/BungLogService.java index ada39b1..0e977dc 100644 --- a/src/main/java/swyp_8th/bungmakase_backend/service/BungLogService.java +++ b/src/main/java/swyp_8th/bungmakase_backend/service/BungLogService.java @@ -40,6 +40,7 @@ public void addDailyBungLog(UUID userId, BungLogRequestDto bungLogData, List= 350) return 10L; + if (bungCount >= 250) return 9L; + if (bungCount >= 170) return 8L; + if (bungCount >= 120) return 7L; + if (bungCount >= 80) return 6L; + if (bungCount >= 50) return 5L; + if (bungCount >= 30) return 4L; + if (bungCount >= 14) return 3L; + if (bungCount >= 7) return 2L; + return 1L; + } + @Transactional public void suggestBung(SuggestBungRequest request) { // 입력값 검증 From d8a7e10bd829ce32696ca058a30bf18b72e5ee5f Mon Sep 17 00:00:00 2001 From: Doeun Jeong Date: Tue, 11 Mar 2025 16:02:05 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EC=B5=9C=EA=B7=BC=20=EB=B6=95?= =?UTF-8?q?=EC=96=B4=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EB=A7=A4=EC=A3=BC=20?= =?UTF-8?q?=EC=9B=94=EC=9A=94=EC=9D=BC=20=EC=9E=90=EC=A0=95=EC=97=90=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bungmakase_backend/repository/UserRepository.java | 8 ++++++++ .../bungmakase_backend/service/ProfileService.java | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/swyp_8th/bungmakase_backend/repository/UserRepository.java b/src/main/java/swyp_8th/bungmakase_backend/repository/UserRepository.java index 92a73d1..838fb7d 100644 --- a/src/main/java/swyp_8th/bungmakase_backend/repository/UserRepository.java +++ b/src/main/java/swyp_8th/bungmakase_backend/repository/UserRepository.java @@ -2,7 +2,10 @@ import jdk.jfr.Registered; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import swyp_8th.bungmakase_backend.domain.Users; import java.time.LocalDateTime; @@ -32,4 +35,9 @@ public interface UserRepository extends JpaRepository { List findTop3ByOrderByLevelDescRecentCountDesc(); + @Transactional + @Modifying + @Query("UPDATE Users u SET u.recentCount = 0") + void resetRecentCounts(); + } diff --git a/src/main/java/swyp_8th/bungmakase_backend/service/ProfileService.java b/src/main/java/swyp_8th/bungmakase_backend/service/ProfileService.java index a089ab3..edef4f7 100644 --- a/src/main/java/swyp_8th/bungmakase_backend/service/ProfileService.java +++ b/src/main/java/swyp_8th/bungmakase_backend/service/ProfileService.java @@ -3,6 +3,7 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import swyp_8th.bungmakase_backend.config.JwtConfig; @@ -37,6 +38,14 @@ public class ProfileService { private final UserBungImageRepository userBungImageRepository; + // 모든 유저의 recentCount 일주일마다 초기화 + @Scheduled(cron = "0 0 0 * * MON", zone = "Asia/Seoul") + public void resetRecentCounts() { + + userRepository.resetRecentCounts(); + + } + public UserProfileResponseDto getProfile(String token) {