Skip to content

Commit

Permalink
Feature/#101 (#102)
Browse files Browse the repository at this point in the history
* [test] 테스트 custom returnValueHandler 적용

* [refactor] user 응답 필드 네이밍 isActive로 변경

* [test] add UserFixture

* [test] UserController 리팩토링

* [test] update UserFixture

* [feat] add field "itemId"

* [feat] 삭제된 아이템들도 가져오기

* [test] ItemFavoriteFixture 수정으로 인한 변경

* [test] 유저 관련 도메인들 fixture

* [test] user 도메인 facade test

* [feat] 도메인 객체 생성 시 updateDate 객체 생성 시점으로 변경

* [feat] save 반환타입 객체로 변경

* [feat] save 반환타입 객체로 변경

* [test] UserFixture 생성 시 시간 받기

* [test] UserFixture 생성 시 시간 받기

* [test] 로그인 기능 테스트

* [feat] 동등성 비교 추가

* [test] UserService 테스트 리팩토링

* [test] UserService 테스트 리팩토링

* [feat] TradeDto 정보 객체 내에서 가져오기

* [feat] add trade, sale fixture

* [test] 사용하지 않는 빈 제거

* [feat] boolean json에 보낼 이름 변경

* [refactor] 네이밍 수정

* [refactor] 네이밍 수정

* [test] trade controller 테스트 리팩토링

* [feat] 로그인한 유저 검증 제외

* [feat] 할인된 가격 로직 수정

* [fix] 예외처리의 잘못된 HttpStatus 수정

* [test] trade 테스트 리팩토링

* Feature/#101 sale 테스트 리팩토링 (#103)

* [refactor] isBought to json naming

* [refactor] 생성 메서드 파라미터 수정

* [refactor] 네이밍 수정

* [feat] 사용자 판매상품 중 사용된 상품 조회 기능

* [test] sale 도메인 테스트 리팩토링

* [test] notification 테스트 리팩토링 (#104)

* [Test] /#101 mail (#105)

* [feat] 로그인 검사 제외할 url 코드 AuthInterceptor -> WebConfig 이동

* [test] mail test 리팩토링

* [Test] #101 item 테스트 리팩토링 (#106)

* [feat] save update 통합

* [feat] 동등성 비교

* [test] item 테스트 리팩토링

* [Test] #101 favorite (#107)

* [feat] save update 통합

* [feat] 동등성 비교

* [test] item 테스트 리팩토링

* [feat] 좋아요 취소 기능 delete -> update is_favorite

* [test] 좋아요 테스트

* Feature/#101 category (#108)

* [feat] 카테고리 전체조회 response 수정

* [test] 카테고리 테스트 리팩토링

* [Test] #101 brand (#109)

* [test] refactor brand controller

* [test] 중복 제거

* [test] brand fixture 상황 추가

* [test] account 테스트 리팩토링 (#110)

* [test] brand service 테스트 리팩토링 (#111)

* [chore] jacoco 제외 추가
  • Loading branch information
JinDDung2 authored Jun 17, 2024
1 parent a1aff59 commit acc7d21
Show file tree
Hide file tree
Showing 91 changed files with 2,676 additions and 1,962 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ jacocoTestReport {
"**/config/*Config*",
"**/aop/**",
"**/annotation/**",
"**/security/**",
"**/dto/*Dto*",
"**/request/*Request*",
"**/response/*Response*",
Expand Down Expand Up @@ -123,6 +124,7 @@ jacocoTestCoverageVerification {
"**/config/*Config*",
"**/annotation/**",
"**/aop/**",
"**/security/**",
"**/dto/*Dto*",
"**/request/*Request*",
"**/response/*Response*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,28 @@ public class WebConfig implements WebMvcConfigurer {
private final AuthInterceptor authInterceptor;

private final String[] EXCLUDE_PATH = {
"/favicon.ico",
"/error",
"/api/v1/users/sign-up",
"/api/v1/users/login",
"/api/v1/mails/send-certification",
"/api/v1/mails/verify",
"/auth/*/callback",
"/api/v1/auth/**",
"/favicon.ico",
"/error"
"/api/v1/auth/**",
"/api/v1/brands/category/**",
"/api/v1/brands/**",
"/api/v1/brands/category",
"/api/v1/categories",
"/api/v1/items/**",
"/api/v1/sales/*",
"/api/v1/sales/items/*"
};

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(EXCLUDE_PATH);
.excludePathPatterns(EXCLUDE_PATH)
.addPathPatterns("/**");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
Expand All @@ -17,50 +15,13 @@ public class AuthInterceptor implements HandlerInterceptor {

private final LoginService loginService;

private final String[] ALLOW_GET_PATH = {
"/api/v1/brands/category/**",
"/api/v1/brands/**",
"/api/v1/brands/category",
"/api/v1/categories",
"/api/v1/items/**",
"/api/v1/sales/**",
"/api/v1/sales/items/**",
};

private final String[] ALLOW_POST_PATH = {
"/api/v1/auth/**"
};

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
log.debug("Login Interceptor preHandler");

if (checkAllowUrl(request)) return true;

return sessionLoginValidate();
}

private boolean checkAllowUrl(HttpServletRequest request) {
String requestURI = request.getRequestURI();

if (request.getMethod().equals(HttpMethod.GET.name())) {
return isPathAllowed(ALLOW_GET_PATH, requestURI);
} else if (request.getMethod().equals(HttpMethod.POST.name())) {
return isPathAllowed(ALLOW_POST_PATH, requestURI);
}
return false;
}

private boolean isPathAllowed(String[] allowedPaths, String requestURI) {
AntPathMatcher antPathMatcher = new AntPathMatcher();
for (String allowPath : allowedPaths) {
if (antPathMatcher.match(allowPath, requestURI)) {
return true;
}
}
return false;
}

private boolean sessionLoginValidate() {
int id = loginService.getLoginUserId();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jinddung2.givemeticon.domain.category.controller;

import com.jinddung2.givemeticon.domain.category.controller.request.CategoryUpdateNameRequest;
import com.jinddung2.givemeticon.domain.category.domain.Category;
import com.jinddung2.givemeticon.domain.category.service.CategoryService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
Expand All @@ -15,7 +16,7 @@ public class CategoryController {
private final CategoryService categoryService;

@GetMapping()
public List<String> getAllCategories() {
public List<Category> getAllCategories() {
return categoryService.getAllCategories();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ void updateName(@Param("id") int id,

void deleteById(int id);

List<String> findAll();
List<Category> findAll();
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class CategoryService {

private final CategoryMapper categoryMapper;

public List<String> getAllCategories() {
public List<Category> getAllCategories() {
return categoryMapper.findAll();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,8 @@ public ItemFavorite(int id, int userId, int itemId, boolean isFavorite) {
this.itemId = itemId;
this.isFavorite = isFavorite;
}

public void cancel() {
this.isFavorite = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ Optional<ItemFavorite> findByIdByUserIDAndItemId(@Param("userId") int userId,

List<ItemFavorite> findFavoritesByUserId(int userId);

void deleteById(int id);
void update(ItemFavorite itemFavorite);
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ public void insertFavorite(int userId, int itemId) {
itemFavoriteMapper.save(itemFavorite);
}


public void cancelItemFavorite(int userId, int itemId) {
ItemFavorite itemFavorite = getItemFavoriteByUserIDAndItemId(userId, itemId)
.orElseThrow(NotPushItemFavorite::new);
itemFavoriteMapper.deleteById(itemFavorite.getId());
itemFavorite.cancel();
itemFavoriteMapper.update(itemFavorite);
}

private Optional<ItemFavorite> getItemFavoriteByUserIDAndItemId(int userId, int itemId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.jinddung2.givemeticon.domain.item.controller.dto.ItemDto;
import com.jinddung2.givemeticon.domain.item.controller.dto.request.ItemCreateRequest;
import com.jinddung2.givemeticon.domain.item.facade.ItemCreationFacade;
import com.jinddung2.givemeticon.domain.item.facade.ItemWriteFacade;
import com.jinddung2.givemeticon.domain.item.service.ItemService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
Expand All @@ -12,13 +12,13 @@
@RequestMapping("/api/v1/items")
public class ItemController {

private final ItemCreationFacade itemCreationFacade;
private final ItemWriteFacade itemWriteFacade;
private final ItemService itemService;

@PostMapping("/brand/{brandId}")
public int createItem(@PathVariable("brandId") int brandId,
@RequestBody ItemCreateRequest request) {
return itemCreationFacade.createItem(brandId, request);
public ItemDto createItem(@PathVariable("brandId") int brandId,
@RequestBody ItemCreateRequest request) {
return itemWriteFacade.createItem(brandId, request);
}

@GetMapping("/{itemId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jinddung2.givemeticon.domain.item.domain.Item;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
public class ItemDto {

private int id;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jinddung2.givemeticon.domain.item.facade;

import com.jinddung2.givemeticon.domain.brand.service.BrandService;
import com.jinddung2.givemeticon.domain.item.controller.dto.ItemDto;
import com.jinddung2.givemeticon.domain.item.controller.dto.request.ItemCreateRequest;
import com.jinddung2.givemeticon.domain.item.domain.Item;
import com.jinddung2.givemeticon.domain.item.service.ItemService;
Expand All @@ -9,17 +10,18 @@

@Service
@RequiredArgsConstructor
public class ItemCreationFacade {
public class ItemWriteFacade {

private final ItemService itemService;
private final BrandService brandService;

public int createItem(int brandId, ItemCreateRequest request) {
public ItemDto createItem(int brandId, ItemCreateRequest request) {
brandService.getBrand(brandId);
Item item = request.toEntity();
item.updateBrandId(brandId);
Item savedItem = itemService.saveOrUpdate(item);

return itemService.save(item);
return ItemDto.of(savedItem);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@
@Mapper
public interface ItemMapper {

int save(Item item);
int saveOrUpdate(Item item);

Optional<Item> findById(int itemId);

int increaseViewCount(int itemId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ public class ItemService {

private final ItemMapper itemMapper;

public int save(Item item) {
return itemMapper.save(item);
public Item saveOrUpdate(Item item) {
int id = itemMapper.saveOrUpdate(item);
return getItem(id);
}

public Item getItem(int itemId) {
Expand All @@ -26,7 +27,8 @@ public Item getItem(int itemId) {
public ItemDto getItemAndIncreaseViewCount(int itemId) {
Item item = getItem(itemId);
item.increaseViewCount();
itemMapper.increaseViewCount(itemId);

itemMapper.saveOrUpdate(item);
return ItemDto.of(item);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@
import com.jinddung2.givemeticon.domain.sale.controller.dto.MySaleDto;
import com.jinddung2.givemeticon.domain.sale.controller.dto.SaleDto;
import com.jinddung2.givemeticon.domain.sale.controller.request.SaleCreateRequest;
import com.jinddung2.givemeticon.domain.sale.facade.SaleCreationFacade;
import com.jinddung2.givemeticon.domain.sale.facade.SaleItemFacade;
import com.jinddung2.givemeticon.domain.sale.facade.SaleItemTradeFacade;
import com.jinddung2.givemeticon.domain.sale.facade.SaleTradeFacade;
import com.jinddung2.givemeticon.domain.sale.service.SaleService;
import com.jinddung2.givemeticon.domain.sale.facade.SaleReadFacade;
import com.jinddung2.givemeticon.domain.sale.facade.SaleWriteFacade;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
Expand All @@ -22,38 +19,35 @@
@RequestMapping("/api/v1/sales")
public class SaleController {

private final SaleCreationFacade saleCreationFacade;
private final SaleService saleService;
private final SaleItemFacade saleItemFacade;
private final SaleTradeFacade saleTradeFacade;
private final SaleItemTradeFacade saleItemTradeFacade;
private final SaleWriteFacade saleWriteFacade;
private final SaleReadFacade saleReadFacade;

@PostMapping("/items/{itemId}")
public int createSale(@PathVariable("itemId") int itemId,
@SessionAttribute(name = LOGIN_USER) int sellerId,
@RequestBody @Validated SaleCreateRequest request) {
return saleCreationFacade.createSale(itemId, sellerId, request);
return saleWriteFacade.createSale(itemId, sellerId, request);
}

@GetMapping("/{saleId}")
public SaleDto getAvailableSaleForItem(@PathVariable("saleId") int saleId) {
return saleService.getAvailableSaleForItem(saleId);
return saleReadFacade.getAvailableSales(saleId);
}

@GetMapping("/items/{itemId}")
public List<SaleDto> getSalesForItem(@PathVariable("itemId") int itemId) {
return saleItemFacade.getSalesForItem(itemId);
return saleReadFacade.getSalesForItem(itemId);
}

@GetMapping("/my")
public List<MySaleDto> getConfirmedSalesBySellerId(@SessionAttribute(name = LOGIN_USER) int userId,
@RequestParam(name = "page", defaultValue = "0") int page) {
return saleItemTradeFacade.getConfirmedSalesBySellerId(userId, page);
return saleReadFacade.getTradedAndConfirmedSales(userId, page);
}

@GetMapping("/my/total-amount")
public BigDecimal getTotalAmountForSales(@SessionAttribute(name = LOGIN_USER) int userId) {
return saleTradeFacade.getTotalAmountForSales(userId);
return saleReadFacade.getTotalAmountForSales(userId);
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package com.jinddung2.givemeticon.domain.sale.controller.dto;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import com.jinddung2.givemeticon.domain.item.domain.Item;
import com.jinddung2.givemeticon.domain.sale.domain.Sale;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;

@Getter
@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class MySaleDto {

private String itemName;
Expand All @@ -27,12 +29,12 @@ public MySaleDto(String itemName, LocalDate expiredDate, Date isBoughtDate, Stri
this.price = price;
}

public static MySaleDto of(String itemName, LocalDate expirationDate, Date isBoughtDate, String barcode, BigDecimal price) {
public static MySaleDto of(Item item, Sale sale, BigDecimal price) {
return MySaleDto.builder()
.itemName(itemName)
.expiredDate(expirationDate)
.isBoughtDate(isBoughtDate)
.barcode(barcode)
.itemName(item.getName())
.expiredDate(sale.getExpirationDate())
.isBoughtDate(sale.getIsBoughtDate())
.barcode(sale.getBarcode())
.price(price)
.build();
}
Expand Down
Loading

0 comments on commit acc7d21

Please sign in to comment.