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
Expand Up @@ -49,7 +49,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
API_V1_PREFIX + "/auth/reset-password",
API_V1_PREFIX + "/{link}/receipts",
API_V1_PREFIX + "/{link}/receipts/{receiptId}",
API_V1_PREFIX + "/{link}/receipts/category",
API_V1_PREFIX + "/{link}/receipts/category-expense",
API_V1_PREFIX + "/{link}/receipts/monthly-expense",
"/api-docs",
"/swagger-custom-ui.html",
"/v3/api-docs",
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/com/ClubAccount_BE/core/config/WebConfig.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.ClubAccount_BE.core.config;

import com.ClubAccount_BE.core.config.auth.LoginUserArgumentResolver;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;

@RequiredArgsConstructor
@Configuration
Expand All @@ -22,7 +22,11 @@ public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers)
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:5173", "http://172.20.10.3:5173")
.allowedOrigins(
"http://localhost:5173",
"http://172.20.10.3:5173",
"https://club-account-fe.vercel.app"
)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH")
.allowedHeaders("*")
.exposedHeaders("Authorization", "Set-Cookie")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import com.ClubAccount_BE.core.response.PagingResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.api.FindReceiptApi;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptItemResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptMonthlyExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptResponse;
import com.ClubAccount_BE.receipt.application.port.in.FindReceiptUseCase;
import jakarta.validation.constraints.Positive;
Expand Down Expand Up @@ -47,18 +47,18 @@ public List<ReceiptItemResponse> getReceiptItem(
return findReceiptUseCase.getReceiptItem(link, receiptId);
}

@GetMapping("/{link}/receipts/category")
public ReceiptCategoryResponse getReceiptCategoryRatio(
@GetMapping("/{link}/receipts/category-expense")
public ReceiptCategoryExpenseResponse getReceiptCategoryExpense(
@PathVariable(value = "link") UUID link
) {
return findReceiptUseCase.getReceiptCategoryRatio(link);
return findReceiptUseCase.getReceiptCategoryExpense(link);
}

@GetMapping("/{link}/receipts/expense")
public List<ReceiptExpenseResponse> getReceiptExpenseList(
@GetMapping("/{link}/receipts/monthly-expense")
public List<ReceiptMonthlyExpenseResponse> getReceiptMonthlyExpenseList(
@PathVariable(value = "link") UUID link,
@Positive(message = "유효하지 않은 연도입니다.") @RequestParam int year
) {
return findReceiptUseCase.getReceiptExpenseList(link, year);
return findReceiptUseCase.getReceiptMonthlyExpenseList(link, year);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.ClubAccount_BE.receipt.adapter.in.web.api;

import com.ClubAccount_BE.core.response.PagingResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptItemResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptMonthlyExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand Down Expand Up @@ -38,13 +38,13 @@ List<ReceiptItemResponse> getReceiptItem(
@PathVariable("receiptId") Long receiptId
);

@Operation(summary = "영수증 카테고리 비율 조회", description = "등록된 영수증의 카테고리 비율을 조회한다.")
ReceiptCategoryResponse getReceiptCategoryRatio(
@Operation(summary = "영수증 카테고리별 지출 조회", description = "등록된 영수증의 카테고리별 지출을 조회한다.")
ReceiptCategoryExpenseResponse getReceiptCategoryExpense(
@PathVariable(value = "link") UUID link
);

@Operation(summary = "영수증 월별 지출 목록 조회", description = "등록된 영수증의 월별 지출을 조회한다.")
List<ReceiptExpenseResponse> getReceiptExpenseList(
List<ReceiptMonthlyExpenseResponse> getReceiptMonthlyExpenseList(
@PathVariable(value = "link") UUID link,
@Positive(message = "유효하지 않은 연도입니다.") @RequestParam int year
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.ClubAccount_BE.receipt.adapter.in.web.dto.response;

import com.ClubAccount_BE.receipt.domain.ReceiptCategoryExpenseResult;
import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal;
import lombok.Builder;

@Builder
public record ReceiptCategoryExpenseResponse(

Check warning on line 9 in src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptCategoryExpenseResponse.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptCategoryExpenseResponse.java#L9

Added line #L9 was not covered by tests
@Schema(description = "회식비 카테고리 총 지출")
BigDecimal groupDiningExpense,

@Schema(description = "물품 구매비 카테고리 총 지출")
BigDecimal supplyPurchaseExpense,

@Schema(description = "정기 구독비 카테고리 총 지출")
BigDecimal subscriptionExpense,

@Schema(description = "대관비 카테고리 총 지출")
BigDecimal venueRentalExpense,

@Schema(description = "기타 카테고리 총 지출")
BigDecimal otherExpense
) {

public static ReceiptCategoryExpenseResponse of(ReceiptCategoryExpenseResult result) {
return ReceiptCategoryExpenseResponse.builder()
.groupDiningExpense(result.getGroupDiningExpense())
.supplyPurchaseExpense(result.getSupplyPurchaseExpense())
.subscriptionExpense(result.getSubscriptionExpense())
.venueRentalExpense(result.getVenueRentalExpense())
.otherExpense(result.getOtherExpense())
.build();

Check warning on line 33 in src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptCategoryExpenseResponse.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptCategoryExpenseResponse.java#L27-L33

Added lines #L27 - L33 were not covered by tests
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.ClubAccount_BE.receipt.adapter.in.web.dto.response;

import com.ClubAccount_BE.receipt.domain.DetailExpenseResult;
import com.ClubAccount_BE.receipt.domain.ReceiptMonthlyExpenseResult;
import java.math.BigDecimal;
import java.util.UUID;
import lombok.Builder;

@Builder
public record ReceiptExpenseResponse(
public record ReceiptMonthlyExpenseResponse(

Check warning on line 9 in src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptMonthlyExpenseResponse.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptMonthlyExpenseResponse.java#L9

Added line #L9 was not covered by tests
UUID id,
int year,
int month,
BigDecimal totalExpense
) {

public static ReceiptExpenseResponse of(DetailExpenseResult result) {
return ReceiptExpenseResponse.builder()
public static ReceiptMonthlyExpenseResponse of(ReceiptMonthlyExpenseResult result) {
return ReceiptMonthlyExpenseResponse.builder()

Check warning on line 17 in src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptMonthlyExpenseResponse.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/adapter/in/web/dto/response/ReceiptMonthlyExpenseResponse.java#L17

Added line #L17 was not covered by tests
.id(UUID.nameUUIDFromBytes((result.getYear() + "-" + result.getMonth()).getBytes()))
.year(result.getYear())
.month(result.getMonth())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public Receipt getReceipt(User user, Long receiptId) {
}

@Override
public List<Receipt> getReceiptExpenseList(User user, int year) {
public List<Receipt> getReceiptMonthlyExpenseList(User user, int year) {
return receiptRepository
.findByUserIdAndYear(user.getId(), year)
.stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
this.amount = receipt.getAmount();
this.date = receipt.getDate();
this.etc = receipt.getEtc();
this.amountMatched = receipt.isAmountMatched();

Check warning on line 75 in src/main/java/com/ClubAccount_BE/receipt/adapter/out/persistence/entity/ReceiptEntity.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/adapter/out/persistence/entity/ReceiptEntity.java#L75

Added line #L75 was not covered by tests
this.receiptItems.clear();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
List<ReceiptEntity> content = queryFactory
.selectFrom(receiptEntity)
.where(where)
.orderBy(receiptEntity.date.desc())
.orderBy(receiptEntity.date.desc(), receiptEntity.id.desc())

Check warning on line 39 in src/main/java/com/ClubAccount_BE/receipt/adapter/out/persistence/repository/ReceiptCustomRepositoryImpl.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/adapter/out/persistence/repository/ReceiptCustomRepositoryImpl.java#L39

Added line #L39 was not covered by tests
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.ClubAccount_BE.receipt.application.port.in;

import com.ClubAccount_BE.core.response.PagingResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptItemResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptMonthlyExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptResponse;
import java.time.LocalDate;
import java.util.List;
Expand All @@ -12,7 +12,7 @@

public interface FindReceiptUseCase {

ReceiptCategoryResponse getReceiptCategoryRatio(UUID link);
ReceiptCategoryExpenseResponse getReceiptCategoryExpense(UUID link);

PagingResponse<ReceiptResponse> getReceiptList(
UUID link,
Expand All @@ -23,5 +23,5 @@ PagingResponse<ReceiptResponse> getReceiptList(

List<ReceiptItemResponse> getReceiptItem(UUID link, Long receiptId);

List<ReceiptExpenseResponse> getReceiptExpenseList(UUID link, int year);
List<ReceiptMonthlyExpenseResponse> getReceiptMonthlyExpenseList(UUID link, int year);
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ Page<Receipt> getReceiptList(

Receipt getReceipt(User user, Long receiptId);

List<Receipt> getReceiptExpenseList(User user, int year);
List<Receipt> getReceiptMonthlyExpenseList(User user, int year);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@

import com.ClubAccount_BE.core.exception.ApiException;
import com.ClubAccount_BE.core.response.PagingResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptCategoryExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptItemResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptMonthlyExpenseResponse;
import com.ClubAccount_BE.receipt.adapter.in.web.dto.response.ReceiptResponse;
import com.ClubAccount_BE.receipt.application.port.in.FindReceiptUseCase;
import com.ClubAccount_BE.receipt.application.port.out.FindReceiptPort;
import com.ClubAccount_BE.receipt.domain.DetailCategoryResult;
import com.ClubAccount_BE.receipt.domain.DetailExpenseResult;
import com.ClubAccount_BE.receipt.domain.Receipt;
import com.ClubAccount_BE.receipt.domain.ReceiptCategoryExpenseResult;
import com.ClubAccount_BE.receipt.domain.ReceiptMonthlyExpenseResult;
import com.ClubAccount_BE.receipt.domain.service.ReceiptEditor;
import com.ClubAccount_BE.user.application.port.out.FindUserPort;
import com.ClubAccount_BE.user.domain.User;
Expand Down Expand Up @@ -46,13 +46,17 @@
}

@Override
public List<ReceiptExpenseResponse> getReceiptExpenseList(UUID link, int year) {
public List<ReceiptMonthlyExpenseResponse> getReceiptMonthlyExpenseList(UUID link, int year) {

User user = findUserPort.getUserByLink(link);
List<Receipt> receiptList = findReceiptPort.getReceiptExpenseList(user, year);
List<DetailExpenseResult> results = receiptEditor.calculateExpense(receiptList, year);
List<Receipt> receiptList = findReceiptPort.getReceiptMonthlyExpenseList(user, year);
List<ReceiptMonthlyExpenseResult> results = receiptEditor.calculateMonthlyExpense(

Check warning on line 53 in src/main/java/com/ClubAccount_BE/receipt/application/service/FindReceiptService.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/application/service/FindReceiptService.java#L52-L53

Added lines #L52 - L53 were not covered by tests
receiptList,
year
);

return results.stream()
.map(ReceiptExpenseResponse::of)
.map(ReceiptMonthlyExpenseResponse::of)

Check warning on line 59 in src/main/java/com/ClubAccount_BE/receipt/application/service/FindReceiptService.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/application/service/FindReceiptService.java#L59

Added line #L59 was not covered by tests
.toList();
}

Expand All @@ -77,11 +81,11 @@
}

@Override
public ReceiptCategoryResponse getReceiptCategoryRatio(UUID link) {
public ReceiptCategoryExpenseResponse getReceiptCategoryExpense(UUID link) {

User user = findUserPort.getUserByLink(link);
List<Receipt> receiptList = findReceiptPort.getReceiptCategoryList(user);
DetailCategoryResult result = receiptEditor.calculateCategoryRatio(receiptList);
return ReceiptCategoryResponse.of(result);
ReceiptCategoryExpenseResult result = receiptEditor.calculateCategoryExpense(receiptList);
return ReceiptCategoryExpenseResponse.of(result);

Check warning on line 89 in src/main/java/com/ClubAccount_BE/receipt/application/service/FindReceiptService.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/ClubAccount_BE/receipt/application/service/FindReceiptService.java#L88-L89

Added lines #L88 - L89 were not covered by tests
}
}

This file was deleted.

Loading