Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
0068e4a
이전 주차 코드 옮김
donghyuun Jul 3, 2024
7fc9c89
지난 주차 과제 리뷰를 반영한 개선 코드
donghyuun Jul 3, 2024
ae11502
feat: 에러 메시지들을 하나의 문자열로 합쳐서 응답에 포함시킴
donghyuun Jul 3, 2024
6ec621d
feat: 수정 모달 창에 th:required 옵션 추가
donghyuun Jul 3, 2024
58b414c
feat: 상품 속성 값 유효성 검증(에러 메시지 여러 개 동시 발생 가능)
donghyuun Jul 3, 2024
c70b875
feat: '카카오' 포함 여부 검증(커스텀 어노테이션 사용)
donghyuun Jul 3, 2024
cf85e66
etc: 줄 바꿈, 상태 출력 코드 제거
donghyuun Jul 3, 2024
878503b
feat: 상품 추가/수정 시 이름 중복 여부 검증
donghyuun Jul 3, 2024
9d8dc3b
comment: validator 주석 추가
donghyuun Jul 4, 2024
00d9e27
docs: README 작성
donghyuun Jul 4, 2024
7804a04
지난 주차 과제 리뷰를 반영한 개선 코드
donghyuun Jul 4, 2024
4649ed1
feat: 상품의 이름 및 기타 속성값의 유효성 검증
donghyuun Jul 4, 2024
de965fb
feat: 상품 생성/수정 시 기존 상품 이름과 중복되는지 검증
donghyuun Jul 4, 2024
7a1a556
refactor: 폴더 및 파일 명, 폴더 구조 변경
donghyuun Jul 4, 2024
c46919f
refactor: product 엔티티 위치 이동
donghyuun Jul 4, 2024
3e51ee6
chore: lombok 의존성 추가
donghyuun Jul 4, 2024
7c76dda
chore: lombok 버전 명시 X, Jwt 의존성 추가
donghyuun Jul 5, 2024
75c7244
feat: 회원 가입 및 로그인(성공 시 jwt 발급)
donghyuun Jul 5, 2024
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# spring-gift-wishlist
# spring-gift-wishlist
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,19 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'

runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

implementation 'org.springframework.boot:spring-boot-starter-validation'

// lombok
implementation 'org.projectlombok:lombok'

// jwt
implementation 'io.jsonwebtoken:jjwt:0.12.6'

}

tasks.named('test') {
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/gift/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}


}
41 changes: 0 additions & 41 deletions src/main/java/gift/DTO/ProductDTO.java

This file was deleted.

22 changes: 0 additions & 22 deletions src/main/java/gift/Global/Exception/BusinessException.java

This file was deleted.

38 changes: 0 additions & 38 deletions src/main/java/gift/Global/Response/ErrorCode.java

This file was deleted.

7 changes: 0 additions & 7 deletions src/main/java/gift/Global/Response/ErrorResponseDto.java

This file was deleted.

44 changes: 0 additions & 44 deletions src/main/java/gift/Global/Response/ResponseMaker.java

This file was deleted.

38 changes: 0 additions & 38 deletions src/main/java/gift/Global/Response/ResultCode.java

This file was deleted.

16 changes: 0 additions & 16 deletions src/main/java/gift/Global/Response/ResultResponseDto.java

This file was deleted.

12 changes: 0 additions & 12 deletions src/main/java/gift/Global/Response/SimpleResultResponseDto.java

This file was deleted.

21 changes: 0 additions & 21 deletions src/main/java/gift/Global/Validation/Validation.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package gift.Model;
package gift.domain.product;

public class Product {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
package gift.Controller;
package gift.domain.product;

import gift.Global.Response.ErrorCode;
import gift.Global.Response.ErrorResponseDto;
import gift.Global.Response.ResponseMaker;
import gift.Global.Response.ResultCode;
import gift.Global.Response.ResultResponseDto;
import gift.Global.Response.SimpleResultResponseDto;
import gift.Service.ProductService;
import gift.DTO.ProductDTO;
import gift.Model.Product;
import gift.global.response.ResponseMaker;
import gift.global.response.ResultResponseDto;
import gift.global.response.SimpleResultResponseDto;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;
import javax.swing.text.StyledEditorKit.BoldAction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
Expand All @@ -24,11 +16,10 @@
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/api/products")
@RequestMapping("/api/products")
public class ProductController {

private final ProductService productService;
Expand All @@ -45,21 +36,22 @@ public ProductController(ProductService productService) {
* @return 결과 메시지
*/
@PostMapping
public ResponseEntity<SimpleResultResponseDto> postProduct(@Valid @ModelAttribute ProductDTO productDTO) {
productService.postProduct(productDTO);
return ResponseMaker.createSimpleResponse(ResultCode.CREATE_PRODUCT_SUCCESS);
public ResponseEntity<SimpleResultResponseDto> createProduct(
@Valid @ModelAttribute ProductDTO productDTO) {
productService.createProduct(productDTO);
return ResponseMaker.createSimpleResponse(HttpStatus.CREATED, "상품이 추가되었습니다.");
}

/**
* 전체 상품 목록 조회
*
* @return products (상품 목록)
* @return 결과 메시지, products (상품 목록)
*/
@GetMapping
public ResponseEntity<ResultResponseDto<List<Product>>> getProducts() {
List<Product> products = productService.getProducts();
// 성공 시
return ResponseMaker.createResponse(ResultCode.GET_ALL_PRODUCTS_SUCCESS, products);
return ResponseMaker.createResponse(HttpStatus.OK, "전체 목록 상품을 조회했습니다.", products);
}


Expand All @@ -72,9 +64,9 @@ public ResponseEntity<ResultResponseDto<List<Product>>> getProducts() {
*/
@PutMapping("/{id}")
public ResponseEntity<SimpleResultResponseDto> updateProduct(@PathVariable("id") Long id,
@RequestBody ProductDTO productDTO) {
@Valid @RequestBody ProductDTO productDTO) {
productService.updateProduct(id, productDTO);
return ResponseMaker.createSimpleResponse(ResultCode.UPDATE_PRODUCT_SUCCESS);
return ResponseMaker.createSimpleResponse(HttpStatus.OK, "상품을 수정했습니다.");
}


Expand All @@ -87,7 +79,7 @@ public ResponseEntity<SimpleResultResponseDto> updateProduct(@PathVariable("id")
@DeleteMapping
public ResponseEntity<?> deleteSelectedProducts(@RequestBody List<Long> productIds) {
productService.deleteProductsByIds(productIds);
return ResponseMaker.createSimpleResponse(ResultCode.DELETE_PRODUCTS_SUCCESS);
return ResponseMaker.createSimpleResponse(HttpStatus.OK, "선택된 상품들을 삭제했습니다.");
}

/**
Expand All @@ -99,7 +91,7 @@ public ResponseEntity<?> deleteSelectedProducts(@RequestBody List<Long> productI
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteProduct(@PathVariable("id") Long id) {
productService.deleteProduct(id);
return ResponseMaker.createSimpleResponse(ResultCode.DELETE_PRODUCT_SUCCESS);
return ResponseMaker.createSimpleResponse(HttpStatus.OK, "상품이 삭제되었습니다.");
}


Expand Down
Loading