Skip to content
Merged
Show file tree
Hide file tree
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,6 @@
package com.Dodutch_Server.domain.dutch.controller;

import com.Dodutch_Server.domain.auth.util.SecurityUtil;
import com.Dodutch_Server.domain.dutch.dto.DutchDTO;
import com.Dodutch_Server.domain.dutch.entity.Dutch;
import com.Dodutch_Server.domain.dutch.repository.DutchRepository;
Expand Down Expand Up @@ -34,8 +35,11 @@ private boolean isValidTrip(Long tripId) {

@GetMapping("/dutch")
public ResponseEntity<?> getAllDutchList() {
List<DutchResponseDTO> responseDTOs = dutchRepository.findAll(Sort.by(Sort.Order.desc("createdAt")))
.stream()
Long memberId = SecurityUtil.getCurrentUserId();

List<Dutch> dutchList = dutchRepository.findByPayerIdOrPayeeId(memberId, memberId);

List<DutchResponseDTO> responseDTOs = dutchList.stream()
.map(DutchResponseDTO::fromEntity)
.collect(Collectors.toList());
return ResponseEntity.ok().body(
Expand All @@ -51,8 +55,15 @@ public ResponseEntity<?> getDutchList(@PathVariable Long tripId) {
);
}

List<DutchResponseDTO> responseDTOs = dutchRepository.findByTripId(tripId)
.stream()
Long memberId = SecurityUtil.getCurrentUserId();

List<Dutch> dutchList = dutchRepository.findByTripId(tripId).stream()
.filter(dutch -> dutch.getPayer().getId().equals(memberId) ||
dutch.getPayee().getId().equals(memberId))
.collect(Collectors.toList());


List<DutchResponseDTO> responseDTOs = dutchList.stream()
.map(DutchResponseDTO::fromEntity)
.collect(Collectors.toList());
return ResponseEntity.ok().body(
Expand All @@ -69,6 +80,7 @@ public ResponseEntity<?> getDutchDetail(@PathVariable Long tripId, @PathVariable
}

Optional<Dutch> dutch = dutchRepository.findByTripIdAndId(tripId, dutchId);

if (dutch.isPresent()) {
DutchResponseDTO responseDTO = DutchResponseDTO.fromEntity(dutch.get());
return ResponseEntity.ok().body(
Expand Down Expand Up @@ -106,7 +118,7 @@ public ResponseEntity<?> markDutchAsCompleted(@PathVariable Long tripId, @PathVa
}

@PostMapping("/trip/{tripId}/dutch/calculate")
public ResponseEntity<?> calculateDutch(@PathVariable Long tripId) {
public ResponseEntity<?> calculateDutch(@PathVariable("tripId") Long tripId) {
if (!isValidTrip(tripId)) {
return ResponseEntity.status(404).body(
new ApiResponse<>(false, "404", "해당 여행이 존재하지 않습니다", null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ public interface DutchRepository extends JpaRepository<Dutch, Long> {
List<Dutch> findByTripId(Long tripId);
Optional<Dutch> findByTripIdAndId(Long tripId, Long id);
boolean existsByTripIdAndPayerIdAndPayeeIdAndPerCost(Long tripId, Long payerId, Long payeeId, Integer perCost);
List<Dutch> findByPayerIdOrPayeeId(Long payerId, Long payeeId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ public List<DutchDTO> calculateSettlement(Long tripId) {

// 잔액 갱신
payeeBalance -= amountToPay;
payerBalance += amountToPay;

memberBalances.put(payee, payeeBalance);
memberBalances.put(payer, payerBalance);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public ResponseDTO<List<Map<String, Object>>> getExpensesByDate(@PathVariable Lo
public ResponseDTO<ExpenseResponseDTO> getExpensesByTrip(@PathVariable("tripId") Long tripId) {
try {
ExpenseResponseDTO responseData = expenseService.getExpensesByTrip(tripId);

return createSuccessResponse("200", "성공이요", responseData);
} catch (IllegalArgumentException e) {
return createErrorResponse("400", e.getMessage());
Expand All @@ -79,8 +80,8 @@ public ResponseDTO<ExpenseResponseDTO> getExpensesByTrip(@PathVariable("tripId")

@GetMapping("/{tripId}/expense/{expenseId}")
public ResponseDTO<Map<String, Object>> getExpenseById(
@PathVariable Long tripId,
@PathVariable Long expenseId) {
@PathVariable("tripId") Long tripId,
@PathVariable("tripId") Long expenseId) {
try {
Map<String, Object> expenseDetails = expenseService.getExpenseById(tripId, expenseId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class Expense extends BaseEntity {
private Long id;
private String title;
private int amount;

@Enumerated(EnumType.STRING)
private ExpenseCategory expenseCategory;
private LocalDate expenseDate;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public void addExpense(Long tripId, Long payerId,ExpenseRequestDTO request, Mult
.amount(request.getAmount())
.expenseDate(request.getExpenseDate())
.memo(request.getMemo())
//.payer(payer)
.payer(payer)
.trip(trip)
.expenseImageUrl(expenseImageUrl)
.build();
Expand Down Expand Up @@ -174,39 +174,40 @@ public ExpenseResponseDTO getExpensesByTrip(Long tripId) {
Trip trip = tripRepository.findById(tripId)
.orElseThrow(() -> new IllegalArgumentException("해당 여행이 존재하지 않습니다: " + tripId));

// 남은 비용 계산
List<Expense> expenses = expenseRepository.findByTripId(tripId);

Map<ExpenseCategory, Integer> categoryCosts = new HashMap<>();
for (Expense expense : expenses) {
categoryCosts.put(expense.getExpenseCategory(),
categoryCosts.getOrDefault(expense.getExpenseCategory(), 0) + expense.getAmount());
}

int remainingCost = (trip.getBudget() != null ? trip.getBudget() : 0) -
(trip.getTotalCost() != null ? trip.getTotalCost() : 0);

// 카테고리별 비용 계산
List<ExpenseResponseDTO.CategoryCostDTO> categories = expenseRepository.findCategoryCostsByTripId(tripId)
.stream()
.map(result -> {
ExpenseResponseDTO.CategoryCostDTO dto = new ExpenseResponseDTO.CategoryCostDTO();
dto.setExpenseCategory((ExpenseCategory) result.get("category"));
dto.setCost(((Number) result.get("cost")).intValue());
return dto;
})
.collect(Collectors.toList());

// 멤버 정보 조회
List<ExpenseResponseDTO.CategoryCostDTO> categories = categoryCosts.entrySet().stream()
.map(entry -> {
ExpenseResponseDTO.CategoryCostDTO categoryCostDTO = new ExpenseResponseDTO.CategoryCostDTO();
categoryCostDTO.setExpenseCategory(entry.getKey());
categoryCostDTO.setCost(entry.getValue());
return categoryCostDTO;
}).collect(Collectors.toList());

List<ExpenseResponseDTO.MemberDTO> members = tripMemberRepository.findByTripId(tripId).stream()
.map(tripMember -> {
ExpenseResponseDTO.MemberDTO memberDTO = new ExpenseResponseDTO.MemberDTO();
memberDTO.setMemberId(tripMember.getMember().getId());
memberDTO.setNickName(tripMember.getMember().getNickName());
return memberDTO;
})
.collect(Collectors.toList());

ExpenseResponseDTO response = new ExpenseResponseDTO();
response.setRemainingCost(remainingCost);
response.setCategories(categories);
response.setMembers(members);
response.setBudget(trip.getBudget()); //budget 추가함
}).collect(Collectors.toList());

ExpenseResponseDTO responseDTO = new ExpenseResponseDTO();
responseDTO.setBudget(trip.getBudget());
responseDTO.setRemainingCost(remainingCost);
responseDTO.setCategories(categories);
responseDTO.setMembers(members);

return response;
return responseDTO;
}

public List<Map<String, Object>> getExpensesByDate(Long tripId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public ApiResponse<TripShareResponseDto> getShareTrip(@PathVariable("tripId") Lo
@io.swagger.v3.oas.annotations.responses.ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "OK, 성공")
})
public ApiResponse<Object> updateTrip(@PathVariable Long tripId, @RequestBody TripUpdateRequestDTO request) {
public ApiResponse<Object> updateTrip(@PathVariable("tripId") Long tripId, @RequestBody TripUpdateRequestDTO request) {

tripService.updateTrip(tripId, request);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.Dodutch_Server.domain.trip.dto.response;

import lombok.*;
import org.joda.time.DateTime;

import java.time.LocalDate;
import java.util.List;
Expand Down Expand Up @@ -34,5 +35,9 @@ public static class MemberDTO {
@Setter
public static class PhotoDTO {
private String photoUrl;
private LocalDate expenseDate;
private String title;
private Integer amount;
private String memo;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class TripResponse {
private String place; // 장소
private Long budget; // 예산
private Integer totalCost; // 추가함
private String memo;
//private String memo;

private List<MemberDTO> members; // 멤버 리스트 추가

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,10 @@ public TripInfoResponseDto convertToTripInfoResponse(Trip trip) {
.map(expense -> {
TripInfoResponseDto.PhotoDTO photoDTO = new TripInfoResponseDto.PhotoDTO();
photoDTO.setPhotoUrl(expense.getExpenseImageUrl());
photoDTO.setExpenseDate(expense.getExpenseDate());
photoDTO.setTitle(expense.getTitle());
photoDTO.setAmount(expense.getAmount());
photoDTO.setMemo(expense.getMemo());
return photoDTO;
})
.collect(Collectors.toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ public class CorsConfig implements WebMvcConfigurer {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS","PATCH")
.allowedHeaders("*")
.allowCredentials(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,16 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

http.cors(corsCustomizer -> corsCustomizer.configurationSource(request -> {
CorsConfiguration config = new CorsConfiguration();
config.setAllowedOrigins(Collections.singletonList("*"));
config.setAllowedMethods(Collections.singletonList("*"));
config.setAllowCredentials(true);
config.setAllowedHeaders(Collections.singletonList("*"));
config.setMaxAge(3600L);
config.setAllowedOrigins(Collections.singletonList("http://localhost:3000")); // 허용할 도메인
config.setAllowedMethods(Collections.singletonList("*")); // 모든 메서드 허용
config.setAllowCredentials(true); // 인증 정보 허용
config.setAllowedHeaders(Collections.singletonList("*")); // 모든 헤더 허용
config.setMaxAge(3600L); // Preflight 요청 캐싱 시간 (초 단위)
return config;
}));




/*
테스트 전 까지 JWT필터 주석처리
*/
Expand Down
Loading