Skip to content

Commit 6bd181b

Browse files
authored
Merge pull request #232 from prgrms-aibe-devcourse/refactor/v2-analysis
refactor: anylsis 분리 관련 CoderabbitAi 의견 반영
2 parents 91bbe67 + a3a322e commit 6bd181b

10 files changed

Lines changed: 141 additions & 81 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: CI/CD Pipeline to EC2 with Blue/Green
22

33
on:
44
push:
5-
branches: [main, dev, ci/env]
5+
branches: [main, dev]
66

77
# ───────────────────────────────────────────────────────────────
88
concurrency:

src/main/java/store/lastdance/config/SecurityConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
5656
// 기타 공개 경로들
5757
.requestMatchers("/error", "/favicon.ico").permitAll()
5858
.requestMatchers("/api/v1/notifications/stream").permitAll()
59-
// /api/v1/expenses/analyze 요청은 인증이 필요함 AOP 프록시
60-
.requestMatchers("/api/v1/expenses/analyze").authenticated()
59+
// /api/v1/analysis/** 요청은 인증이 필요함 AOP 프록시
60+
.requestMatchers("/api/v1/analysis/**").authenticated()
6161
// 나머지 요청은 인증 필요
6262
.anyRequest().authenticated()
6363
)

src/main/java/store/lastdance/controller/analysis/AnalysisController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import store.lastdance.dto.response.PageWithSummaryResponse;
2020
import store.lastdance.security.oauth.CustomOAuth2User;
2121
import store.lastdance.service.analysis.AnalysisService;
22+
import store.lastdance.domain.analysis.FeedbackType;
2223

2324
import java.util.UUID;
2425

@@ -47,7 +48,7 @@ public ResponseEntity<ApiResponse<AnalyzeExpenseResponseDTO>> analyzeExpenses(
4748
public ResponseEntity<ApiResponse<String>> feedbackAnalyzeExpense(
4849
@Parameter(hidden = true) @AuthenticationPrincipal CustomOAuth2User oAuth2User,
4950
@PathVariable Long historyId,
50-
@RequestParam String type
51+
@RequestParam FeedbackType type
5152
) {
5253
UUID userId = oAuth2User.getUserId();
5354
String result = analysisService.toggleFeedback(historyId, userId, type);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package store.lastdance.converter.analysis;
2+
3+
import org.springframework.stereotype.Component;
4+
import org.springframework.core.convert.converter.Converter;
5+
import store.lastdance.domain.analysis.FeedbackType;
6+
7+
@Component
8+
public class StringToFeedbackTypeConverter implements Converter<String, FeedbackType> {
9+
10+
@Override
11+
public FeedbackType convert(String source) {
12+
if (source == null) {
13+
return null;
14+
}
15+
// 대소문자 구분없이 변환
16+
return FeedbackType.valueOf(source.toUpperCase());
17+
}
18+
}

src/main/java/store/lastdance/domain/analysis/ExpenseAnalysisHistory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
@Entity
1515
@Getter
1616
@Table(name = "expense_analysis_history", indexes = {
17-
@Index(name = "idx_created_at", columnList = "created_at")
17+
@Index(name = "idx_created_at", columnList = "created_at"),
18+
@Index(name = "idx_user_created_at", columnList = "user_id, created_at")
1819
})
1920
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2021
@EntityListeners(AuditingEntityListener.class)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package store.lastdance.domain.analysis;
2+
3+
public enum FeedbackType {
4+
UP,
5+
DOWN
6+
}

src/main/java/store/lastdance/dto/expense/SaveAnalysisResultRequestDTO.java renamed to src/main/java/store/lastdance/dto/analysis/SaveAnalysisResultRequestDTO.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
package store.lastdance.dto.expense;
1+
package store.lastdance.dto.analysis;
22

33
import jakarta.validation.Valid;
44
import jakarta.validation.constraints.NotNull;
5-
import store.lastdance.dto.analysis.AnalyzeExpenseRequestDTO;
6-
import store.lastdance.dto.analysis.AnalyzeExpenseResponseDTO;
75

86
public record SaveAnalysisResultRequestDTO(
97
@NotNull @Valid AnalyzeExpenseRequestDTO requestDTO,

src/main/java/store/lastdance/repository/analysis/ExpenseAnalysisHistoryRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public interface ExpenseAnalysisHistoryRepository extends JpaRepository<ExpenseA
3030
@EntityGraph(attributePaths = "user")
3131
Page<ExpenseAnalysisHistory> findByUser(User user, Pageable pageable);
3232

33+
@EntityGraph(attributePaths = "user")
34+
Page<ExpenseAnalysisHistory> findByUser_UserId(java.util.UUID userId, Pageable pageable);
35+
3336
List<ExpenseAnalysisHistory> findByCreatedAtBetween(LocalDateTime startDate, LocalDateTime endDate);
3437

3538

src/main/java/store/lastdance/service/analysis/AnalysisService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package store.lastdance.service.analysis;
22

3+
import store.lastdance.domain.analysis.FeedbackType;
4+
35
import org.springframework.data.domain.Pageable;
46
import store.lastdance.dto.analysis.AnalyzeExpenseRequestDTO;
57
import store.lastdance.dto.analysis.AnalyzeExpenseResponseDTO;
@@ -10,6 +12,6 @@
1012

1113
public interface AnalysisService {
1214
AnalyzeExpenseResponseDTO analyzeExpenses(UUID userId, AnalyzeExpenseRequestDTO requestDTO);
13-
String toggleFeedback(Long historyId, UUID userId, String type);
15+
String toggleFeedback(Long historyId, UUID userId, FeedbackType type);
1416
PageWithSummaryResponse<ExpenseAnalysisHistoryDTO> getExpenseAnalysisHistory(UUID userId, Pageable pageable);
1517
}

0 commit comments

Comments
 (0)