Skip to content

Commit

Permalink
Merge pull request #108 from ootd-zip/feature/search-brand
Browse files Browse the repository at this point in the history
feature : 브랜드 조회 시 검색 추가
  • Loading branch information
kkmin223 authored Feb 15, 2024
2 parents 2d3ee1f + 77d52d6 commit d192697
Show file tree
Hide file tree
Showing 9 changed files with 137 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import zip.ootd.ootdzip.brand.controller.request.BrandSearchReq;
import zip.ootd.ootdzip.brand.data.BrandDto;
import zip.ootd.ootdzip.brand.data.BrandSaveReq;
import zip.ootd.ootdzip.brand.service.BrandService;
Expand All @@ -29,8 +30,8 @@ public ApiResponse<BrandDto> saveBrand(@RequestBody BrandSaveReq request) {
}

@GetMapping
public ApiResponse<List<BrandDto>> getAllBrands() {
return new ApiResponse<>(brandService.getAllBrands());
public ApiResponse<List<BrandDto>> getBrands(BrandSearchReq request) {
return new ApiResponse<>(brandService.getBrands(request.toServiceRequest()));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package zip.ootd.ootdzip.brand.controller.request;

import lombok.Setter;
import zip.ootd.ootdzip.brand.service.request.BrandSearchSvcReq;

@Setter
public class BrandSearchReq {

private String brandName;

public BrandSearchSvcReq toServiceRequest() {
return BrandSearchSvcReq.builder()
.name(this.brandName)
.build();
}
}
17 changes: 12 additions & 5 deletions src/main/java/zip/ootd/ootdzip/brand/data/BrandDto.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
package zip.ootd.ootdzip.brand.data;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import zip.ootd.ootdzip.brand.domain.Brand;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class BrandDto {

private Long id;

private String name;

public BrandDto(Brand brand) {
this.id = brand.getId();
this.name = brand.getName();
@Builder
private BrandDto(Long id, String name) {
this.id = id;
this.name = name;
}

public static BrandDto of(Brand brand) {
return BrandDto.builder()
.id(brand.getId())
.name(brand.getName())
.build();
}
}
15 changes: 13 additions & 2 deletions src/main/java/zip/ootd/ootdzip/brand/data/BrandSaveReq.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
package zip.ootd.ootdzip.brand.data;

import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Data
@Setter
@NoArgsConstructor
@Getter
public class BrandSaveReq {

@NotBlank(message = "브랜드 이름을 입력해주세요.")
public String name;

@Builder
public BrandSaveReq(String name) {
this.name = name;
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package zip.ootd.ootdzip.brand.repository;

import java.util.List;

import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand All @@ -9,4 +12,6 @@
public interface BrandRepository extends JpaRepository<Brand, Long> {

Boolean existsByName(String name);

List<Brand> findByNameStartsWith(String name, Sort sort);
}
10 changes: 6 additions & 4 deletions src/main/java/zip/ootd/ootdzip/brand/service/BrandService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import zip.ootd.ootdzip.brand.data.BrandSaveReq;
import zip.ootd.ootdzip.brand.domain.Brand;
import zip.ootd.ootdzip.brand.repository.BrandRepository;
import zip.ootd.ootdzip.brand.service.request.BrandSearchSvcReq;
import zip.ootd.ootdzip.common.exception.CustomException;
import zip.ootd.ootdzip.common.exception.code.ErrorCode;

Expand All @@ -35,15 +36,16 @@ public BrandDto saveBrand(BrandSaveReq request) {

Brand saveBrand = brandRepository.save(brand);

return new BrandDto(saveBrand);
return BrandDto.of(brand);
}

public List<BrandDto> getAllBrands() {
List<Brand> brands = brandRepository.findAll(Sort.by(Sort.Direction.ASC, "name"));
public List<BrandDto> getBrands(BrandSearchSvcReq request) {
List<Brand> brands = brandRepository.findByNameStartsWith(request.getName(),
Sort.by(Sort.Direction.ASC, "name"));

return brands
.stream()
.map(BrandDto::new)
.map(BrandDto::of)
.toList();

}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package zip.ootd.ootdzip.brand.service.request;

import lombok.Builder;
import lombok.Getter;

@Getter
public class BrandSearchSvcReq {

private final String name;

@Builder
private BrandSearchSvcReq(String name) {
this.name = name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public static FindClothesRes of(Clothes clothes) {
.id(clothes.getId())
.name(clothes.getName())
.userName(clothes.getUser().getName())
.brand(new BrandDto(clothes.getBrand()))
.brand(BrandDto.of(clothes.getBrand()))
.isOpen(clothes.getIsOpen())
.category(DetailCategory.builder()
.id(clothes.getCategory().getId())
Expand Down
66 changes: 66 additions & 0 deletions src/test/java/zip/ootd/ootdzip/brand/service/BrandServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package zip.ootd.ootdzip.brand.service;

import static org.assertj.core.api.Assertions.*;

import java.util.List;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import zip.ootd.ootdzip.IntegrationTestSupport;
import zip.ootd.ootdzip.brand.data.BrandDto;
import zip.ootd.ootdzip.brand.data.BrandSaveReq;
import zip.ootd.ootdzip.brand.service.request.BrandSearchSvcReq;

class BrandServiceTest extends IntegrationTestSupport {

@Autowired
private BrandService brandService;

@DisplayName("브랜드를 저장한다.")
@Test
void saveBrand() {
// given
BrandSaveReq request = BrandSaveReq.builder()
.name("브랜드1")
.build();

// when
BrandDto result = brandService.saveBrand(request);

//then
assertThat(result.getName()).isEqualTo(request.getName());
}

@DisplayName("브랜드를 조회한다.")
@Test
void getBrand() {
// given
BrandSaveReq request1 = BrandSaveReq.builder()
.name("브랜드1")
.build();

BrandDto brand1 = brandService.saveBrand(request1);

BrandSaveReq request2 = BrandSaveReq.builder()
.name("테스트1")
.build();

BrandDto brand2 = brandService.saveBrand(request2);

BrandSearchSvcReq request3 = BrandSearchSvcReq.builder()
.name("브")
.build();

// when
List<BrandDto> brands = brandService.getBrands(request3);

//then
assertThat(brands).hasSize(1)
.extracting("name")
.contains("브랜드1");

}

}

0 comments on commit d192697

Please sign in to comment.