Skip to content

Commit

Permalink
#82 category curd api 추가 (#84)
Browse files Browse the repository at this point in the history
* #82 category curd api 추가

* #82 test code 오류 수정

* #82 코드 정리

* #82 test code 추가

---------

Co-authored-by: hanjoo96.cho <[email protected]>
  • Loading branch information
chohanjoo and hanjoo96.cho authored Dec 4, 2024
1 parent 2f017ec commit 4774f2f
Show file tree
Hide file tree
Showing 24 changed files with 857 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.ssu.commerce.book.controller;

import com.ssu.commerce.book.dto.CategoryDto;
import com.ssu.commerce.book.dto.param.ChangeCategoryParamDto;
import com.ssu.commerce.book.dto.param.CreateCategoryParamDto;
import com.ssu.commerce.book.dto.param.GetCategoryListParamDto;
import com.ssu.commerce.book.dto.request.ChangeCategoryRequestDto;
import com.ssu.commerce.book.dto.request.CreateCategoryRequestDto;
import com.ssu.commerce.book.dto.response.ChangeCategoryResponseDto;
import com.ssu.commerce.book.dto.response.CreateCategoryResponseDto;
import com.ssu.commerce.book.dto.response.DeleteCategoryResponseDto;
import com.ssu.commerce.book.dto.response.GetCategoryResponseDto;
import com.ssu.commerce.book.service.CategoryService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.lang.Nullable;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.UUID;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/category")
public class CategoryController {
private final CategoryService categoryService;

@GetMapping
public Page<GetCategoryResponseDto> getCategoryList(
@Nullable @RequestParam final String name,
final Pageable pageable
) {
log.debug("[getCategoryList]name={}", name);

final Page<CategoryDto> categoryPage = categoryService.getCategoryList(
GetCategoryListParamDto.builder()
.name(name)
.pageable(pageable)
.build()
);

return categoryPage.map(GetCategoryResponseDto::new);
}

@PostMapping
public CreateCategoryResponseDto registerCategory(
@Valid @RequestBody final CreateCategoryRequestDto requestDto
) {
log.debug("[registerCategory]requestDto={}", requestDto);

return CreateCategoryResponseDto.builder()
.categoryId(categoryService.registerCategory(new CreateCategoryParamDto(requestDto)))
.build();
}

@PutMapping
public ChangeCategoryResponseDto changeCategory(
@Valid @RequestBody final ChangeCategoryRequestDto requestDto
) {
log.debug("[changeCategory]requestDto={}", requestDto);

return ChangeCategoryResponseDto.builder()
.categoryId(
categoryService.changeCategory(new ChangeCategoryParamDto(requestDto))
.getCategoryId()
)
.build();
}

@DeleteMapping("/{id}")
public DeleteCategoryResponseDto deleteCategory(
@Valid @PathVariable final UUID id
) {
log.debug("[deleteCategory]id={}", id);

return DeleteCategoryResponseDto.builder()
.categoryId(categoryService.deleteCategory(id))
.build();
}
}
25 changes: 25 additions & 0 deletions api/src/main/java/com/ssu/commerce/book/dto/CategoryDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.ssu.commerce.book.dto;

import com.ssu.commerce.book.model.Category;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.util.UUID;

@Getter
@Builder
@EqualsAndHashCode
@AllArgsConstructor
public class CategoryDto {
private UUID categoryId;
private String name;
private String description;

public CategoryDto(Category category) {
categoryId = category.getCategoryId();
name = category.getName();
description = category.getDescription();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.ssu.commerce.book.dto.param;

import com.ssu.commerce.book.dto.request.ChangeCategoryRequestDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import javax.validation.constraints.NotNull;
import java.util.UUID;

@Getter
@EqualsAndHashCode
@Builder
@AllArgsConstructor
public class ChangeCategoryParamDto {
@NotNull
private UUID categoryId;

private String name;

private String description;

public ChangeCategoryParamDto(ChangeCategoryRequestDto requestDto) {
categoryId = requestDto.getCategoryId();
name = requestDto.getName();
description = requestDto.getDescription();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.ssu.commerce.book.dto.param;

import com.ssu.commerce.book.dto.request.CreateCategoryRequestDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import javax.validation.constraints.NotBlank;

@Getter
@EqualsAndHashCode
@Builder
@AllArgsConstructor
public class CreateCategoryParamDto {
@NotBlank
private String name;

private String description;

public CreateCategoryParamDto(CreateCategoryRequestDto requestDto) {
name = requestDto.getName();
description = requestDto.getDescription();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ssu.commerce.book.dto.param;

import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import org.springframework.data.domain.Pageable;

@Getter
@EqualsAndHashCode
@Builder
public class GetCategoryListParamDto {
private String name;
private Pageable pageable;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.ssu.commerce.book.dto.param.query;

import com.ssu.commerce.book.dto.param.GetCategoryListParamDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;

@Getter
@EqualsAndHashCode
@Builder
@AllArgsConstructor
public class SelectCategoryListParamDto {
private String name;

public SelectCategoryListParamDto(GetCategoryListParamDto paramDto) {
name = paramDto.getName();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.ssu.commerce.book.dto.request;

import lombok.*;

import javax.validation.constraints.NotNull;
import java.util.UUID;

@Getter
@EqualsAndHashCode
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ChangeCategoryRequestDto {
@NotNull
private UUID categoryId;

private String name;

private String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.ssu.commerce.book.dto.request;

import lombok.*;

import javax.validation.constraints.NotBlank;

@Getter
@EqualsAndHashCode
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CreateCategoryRequestDto {
@NotBlank
private String name;

private String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ssu.commerce.book.dto.response;

import lombok.*;

import java.util.UUID;

@Getter
@EqualsAndHashCode
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ChangeCategoryResponseDto {
private UUID categoryId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ssu.commerce.book.dto.response;

import lombok.*;

import java.util.UUID;

@Getter
@EqualsAndHashCode
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CreateCategoryResponseDto {
private UUID categoryId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ssu.commerce.book.dto.response;

import lombok.*;

import java.util.UUID;

@Getter
@EqualsAndHashCode
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeleteCategoryResponseDto {
private UUID categoryId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.ssu.commerce.book.dto.response;

import com.ssu.commerce.book.dto.CategoryDto;
import lombok.*;

import java.util.UUID;

@Getter
@EqualsAndHashCode
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GetCategoryResponseDto {
private UUID categoryId;
private String name;
private String description;

public GetCategoryResponseDto(CategoryDto categoryDto) {
categoryId = categoryDto.getCategoryId();
name = categoryDto.getName();
description = categoryDto.getDescription();
}
}
16 changes: 14 additions & 2 deletions api/src/main/java/com/ssu/commerce/book/model/Category.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.ssu.commerce.book.model;

import com.ssu.commerce.book.dto.param.ChangeCategoryParamDto;
import com.ssu.commerce.book.dto.param.CreateCategoryParamDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
Expand All @@ -19,8 +21,6 @@
@NoArgsConstructor
@Table(name = "category")
public class Category {
// category_id, name, description

@Id
@Type(type = "uuid-char")
@GeneratedValue(generator = "uuid2")
Expand All @@ -33,4 +33,16 @@ public class Category {

@Column(name = "description", columnDefinition = "CHAR(100) CHARACTER SET UTF8")
private String description;

public Category(CreateCategoryParamDto paramDto) {
name = paramDto.getName();
description = paramDto.getDescription();
}

public Category update(ChangeCategoryParamDto category) {
name = category.getName();
description = category.getDescription();

return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@

import java.util.UUID;

public interface CategoryRepository extends JpaRepository<Category, UUID> {
public interface CategoryRepository extends JpaRepository<Category, UUID>, CategoryRepositoryCustom {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ssu.commerce.book.persistence;

import com.ssu.commerce.book.dto.param.query.SelectCategoryListParamDto;
import com.ssu.commerce.book.model.Category;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public interface CategoryRepositoryCustom {
Page<Category> selectCategoryPage(
final SelectCategoryListParamDto paramDto,
final Pageable pageable
);
}
Loading

0 comments on commit 4774f2f

Please sign in to comment.