Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

전남대 BE_안원모 1주차 과제(1단계)(merge요청) #219

Open
wants to merge 10 commits into
base: wonmoan
Choose a base branch
from
28 changes: 27 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,27 @@
# spring-gift-product
# spring-gift-product

## 요구 사항
### 기능 요구 사항
상품을 조회, 추가, 수정, 삭제할 수 있는 간단한 HTTP API를 구현한다.

HTTP 요청과 응답은 JSON 형식으로 주고받는다.
현재는 별도의 데이터베이스가 없으므로 적절한 자바 컬렉션 프레임워크를 사용하여 메모리에 저장한다.

### 1단계 기능 요구 사항
상품을 조회, 추가, 수정, 삭제할 수 있는 간단한 HTTP API를 구현한다.

HTTP 요청과 응답은 JSON 형식으로 주고받는다.
현재는 별도의 데이터베이스가 없으므로 적절한 자바 컬렉션 프레임워크를 사용하여 메모리에 저장한다.

1. 상품 등록 기능
* 상품은 이름,가격,이미지 사진에 대한 정보를 가진다.
* 상품을 구분하기 위해 각 상품은 id값을 가지고 이 값은 반드시 고유한 값이어야한다.
2. 상품 조회 기능
* 상품은 id로 조회할 수 있고, 조회 시 상품의 이름, 가격, 이미지에 대한 정보를 반환한다.
* 존재하지 않는 id를 조회하는 경우 에러메시지를 반환한다.
3. 상품 수정 기능
* 요청하는 정보로 상품 정보를 수정한다.
* 존재하지 않는 id에 대해서 수정 요청 보내는 경우 에러메시지를 반환한다.
4. 상품 삭제 기능
* id를 요청하여 해당 id를 가진 상품을 데이터베이스에서 삭제한다.
* 존재하지 않는 id에 대해서 상품 삭제 요청을 보내는 경우 에러메시지를 반환한다.
1 change: 0 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}
47 changes: 47 additions & 0 deletions src/main/java/gift/Product.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package gift;

public class Product {
private long id;
private String name;
private int price;
private String imageUrl;

public Product(long id, String name, int price, String imageUrl) {
this.id = id;
this.name = name;
this.price = price;
this.imageUrl = imageUrl;
}

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public String getImageUrl() {
return imageUrl;
}

public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
60 changes: 60 additions & 0 deletions src/main/java/gift/ProductController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package gift;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jakarta.annotation.PostConstruct;

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

private final Map<Long, Product> products = new HashMap<>();
private long nextId = 1; // 상품 ID 생성을 위한 변수

//상품 초기값 설정
@PostConstruct
private void init() {
// 초기 상품 데이터 로드
addProduct(new Product(nextId, "아이스 카페 아메리카노 T", 4500, "https://st.kakaocdn.net/product/gift/product/20231010111814_9a667f9eccc943648797925498bdd8a3.jpg"));
}

// 모든 상품 조회
@GetMapping
public ResponseEntity<List<Product>> getAllProducts() {
return ResponseEntity.ok(new ArrayList<>(products.values()));
}

// 상품 추가
@PostMapping
public ResponseEntity<Product> addProduct(@RequestBody Product product) {
product.setId(nextId++);
products.put(product.getId(), product);
return ResponseEntity.ok(product);
}

// 상품 수정
@PutMapping("/{id}")
public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody Product product) {
if (products.containsKey(id)) {
product.setId(id);
products.put(id, product);
return ResponseEntity.ok(product);
} else {
return ResponseEntity.notFound().build();
}
}

// 상품 삭제
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteProduct(@PathVariable long id) {
if (!products.containsKey(id)) {
return ResponseEntity.notFound().build();
}
products.remove(id);
return ResponseEntity.ok().build();
}
}