Skip to content

Commit ae065f9

Browse files
authored
Merge pull request #73 from HSU-capston/feat/#72
[#72]Feat: Flask 요청 시 Level 전달 추가, Flask 응답으로 score점수 받기 및 저장 로직 추가
2 parents 80d76b3 + 8bdccb2 commit ae065f9

3 files changed

Lines changed: 22 additions & 16 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package capstone.SportyUp.SportyUp_Server.domain.enums;
22

33
public enum PoseScore {
4-
BAD, GOOD, EXCELLENT
4+
BAD, COMMON, GOOD, EXCELLENT
55
}

src/main/java/capstone/SportyUp/SportyUp_Server/repository/UserSportsRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package capstone.SportyUp.SportyUp_Server.repository;
22

3+
import capstone.SportyUp.SportyUp_Server.domain.Sports;
34
import capstone.SportyUp.SportyUp_Server.domain.User;
45
import capstone.SportyUp.SportyUp_Server.domain.UserSports;
56
import org.springframework.data.jpa.repository.JpaRepository;
@@ -8,4 +9,5 @@
89

910
public interface UserSportsRepository extends JpaRepository<UserSports, Long> {
1011
Optional<UserSports> findTop1ByUser(User user);
12+
UserSports findTop1ByUserAndSports(User user, Sports sports);
1113
}

src/main/java/capstone/SportyUp/SportyUp_Server/service/AnalyzeService/AnalyzeCommandServiceImpl.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@
55
import capstone.SportyUp.SportyUp_Server.apiPayload.code.status.ErrorStatus;
66
import capstone.SportyUp.SportyUp_Server.aws.s3.S3Uploader;
77
import capstone.SportyUp.SportyUp_Server.converter.AnalyzeConverter;
8-
import capstone.SportyUp.SportyUp_Server.domain.AnalyzeEntity;
9-
import capstone.SportyUp.SportyUp_Server.domain.Game;
10-
import capstone.SportyUp.SportyUp_Server.domain.Sports;
11-
import capstone.SportyUp.SportyUp_Server.domain.User;
8+
import capstone.SportyUp.SportyUp_Server.domain.*;
129
import capstone.SportyUp.SportyUp_Server.domain.enums.PoseScore;
1310
import capstone.SportyUp.SportyUp_Server.repository.AnalyzeRepository;
1411
import capstone.SportyUp.SportyUp_Server.repository.GameRepository;
1512
import capstone.SportyUp.SportyUp_Server.repository.UserRepository;
13+
import capstone.SportyUp.SportyUp_Server.repository.UserSportsRepository;
1614
import capstone.SportyUp.SportyUp_Server.web.DTO.AnalyzeDTO.AnalyzeRequestDTO;
1715
import capstone.SportyUp.SportyUp_Server.web.DTO.AnalyzeDTO.AnalyzeResponseDTO;
1816
import lombok.RequiredArgsConstructor;
@@ -37,6 +35,7 @@ public class AnalyzeCommandServiceImpl implements AnalyzeCommandService {
3735
private final GameRepository gameRepository;
3836
private final AnalyzeRepository analyzeRepository;
3937
private final UserRepository userRepository;
38+
private final UserSportsRepository userSportsRepository;
4039

4140
@Value("${flask}")
4241
private String FLASK_SERVER_URL; // Flask 서버 URL (예시: http://localhost:5000)
@@ -54,6 +53,7 @@ public AnalyzeResponseDTO.AnalyzeResultDTO requestAnalyze(Long userId, Long game
5453
//분석할 영상이 속한 게임 찾기
5554
Game game = gameRepository.findById(gameId).orElseThrow(()->new GameHandler(ErrorStatus.GAME_NOT_FOUND));
5655
Sports sports = game.getSports();
56+
UserSports userSports = userSportsRepository.findTop1ByUserAndSports(user,sports);
5757
//영상찾기
5858
MultipartFile uploadedFile = request.getFile();
5959

@@ -73,24 +73,27 @@ public AnalyzeResponseDTO.AnalyzeResultDTO requestAnalyze(Long userId, Long game
7373
} catch (IOException e){
7474
throw new RuntimeException("S3 업로드 실패", e);
7575
}
76+
String userLevel = userSports.getLevel().toString();
7677

7778
//Flask 요청
78-
Map<String, Object> flaskResponse = processFileWithFlask(sports,uploadedVideoUrl,analyzedKey);
79+
Map<String, Object> flaskResponse = processFileWithFlask(sports,uploadedVideoUrl,analyzedKey,userLevel);
7980

8081
//Flask 응답
8182
String videoUrl = (String) flaskResponse.get("video_url");
8283
String recommendPose = (String) flaskResponse.get("recommend");
8384
String goodPoint = (String) flaskResponse.get("good");
8485
String badPoint = (String) flaskResponse.get("bad");
85-
Double score = ((Number) flaskResponse.get("score")).doubleValue();
86+
PoseScore poseScore = PoseScore.valueOf(flaskResponse.get("grade").toString());
87+
Integer score = ((Number) flaskResponse.get("score")).intValue();
8688

87-
PoseScore poseScore = evaluateScore(score.intValue());
89+
// PoseScore poseScore = evaluateScore(score.intValue());
8890

8991
//AnalyzeEntity 저장
9092
AnalyzeEntity newAnalyzeEntity = AnalyzeEntity.builder()
9193
.user(user)
9294
.game(game)
9395
.videoUrl(videoUrl)
96+
.score(score)
9497
.poseScore(poseScore)
9598
.goodPoint(goodPoint)
9699
.badPoint(badPoint)
@@ -103,12 +106,13 @@ public AnalyzeResponseDTO.AnalyzeResultDTO requestAnalyze(Long userId, Long game
103106
}
104107

105108

106-
private Map<String, Object> sendFileToFlask(String videoUrl, String analyzedKey) throws IOException {
109+
private Map<String, Object> sendFileToFlask(String videoUrl, String analyzedKey, String userLevel) throws IOException {
107110
RestTemplate restTemplate = new RestTemplate();
108111

109112
// Flask 서버에 보낼 파일 설정
110113
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
111114
body.add("video_url", videoUrl);
115+
body.add("user_level", userLevel);
112116
body.add("analyzed_key", analyzedKey);
113117

114118
// HTTP 요청 헤더 설정
@@ -149,10 +153,10 @@ private Map<String, Object> sendFileToFlask(String videoUrl, String analyzedKey)
149153
// }
150154
// }
151155

152-
private Map<String, Object> processFileWithFlask(Sports sports, String videoUrl, String analyzedKey) {
156+
private Map<String, Object> processFileWithFlask(Sports sports, String videoUrl, String analyzedKey, String userLevel) {
153157
if ("볼링".equals(sports.getName())) {
154158
try {
155-
return sendFileToFlask(videoUrl, analyzedKey);
159+
return sendFileToFlask(videoUrl, analyzedKey, userLevel);
156160
} catch (IOException e) {
157161
throw new RuntimeException("Flask 처리 실패", e);
158162
}
@@ -168,9 +172,9 @@ private Map<String, Object> processFileWithFlask(Sports sports, String videoUrl,
168172
);
169173
}
170174

171-
private PoseScore evaluateScore(int score) {
172-
if (score <= 33) return PoseScore.BAD;
173-
if (score <= 66) return PoseScore.GOOD;
174-
return PoseScore.EXCELLENT;
175-
}
175+
// private PoseScore evaluateScore(int score) {
176+
// if (score <= 33) return PoseScore.BAD;
177+
// if (score <= 66) return PoseScore.GOOD;
178+
// return PoseScore.EXCELLENT;
179+
// }
176180
}

0 commit comments

Comments
 (0)