[Redis] 주문 CRUD 실습 with Spring boot project

RyECODING·2024년 8월 18일

MSA

목록 보기
7/15

주문 CRUD Spring Boot 프로젝트를 만들어 다음을 진행해보자.

  1. 주문 ID, 판매 물품, 갯수, 총액, 결제 여부에 대한 데이터를 지정하기 위한 'ItemOrder' 클래스를 'RedisHash'로 만들고
    • 주문 ID : String (Id를 String으로 설정하면 자동으로 UUID가 배정된다)
    • 판매 물품 : String
    • 갯수 : Integer
    • 총액 : Long
    • 주문 상태 : String
  2. 주문에 대한 CRUD를 진행하는 기능을 만들어보자.
    1. 'ItemOrder'의 속성값들을 ID를 제외하고 클라이언트에서 전달해준다.
    2. 성공하면 저장된 'ItemOrder'를 사용자에게 응답해준다.

✔️ application.yml

Redis 설정하기

spring:
  data:
    redis:
      port: 6379
      host: localhost
      username: 설정한 redis user 이름
      password: 설정한 redis 비밀번호

ItemOrder.class

package com.redis.practice;

import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RedisHash("order")
public class ItemOrder {
    @Id
    private String id;
    private String item;
    private Integer count;
    private Long totalPrice;
    private String status;
}

✔️ ItemRepository.interface

package com.redis.practice;

import org.springframework.data.repository.CrudRepository;

public interface OrderRepository extends CrudRepository<ItemOrder, String> {
}

✔️ OrderController.class

package com.redis.practice;

import lombok.Getter;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/orders")
public class OrderController {

    private final OrderRepository orderRepository;

    public OrderController(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    @PostMapping
    public ItemOrder create (@RequestBody ItemOrder order) {
        return orderRepository.save(order);
    }

    @GetMapping
    public List<ItemOrder> getAll() {
        List<ItemOrder> orders = new ArrayList<>();
        orderRepository.findAll().forEach(orders::add);
        return orders;
    }

    @GetMapping("/{id}")
    public ItemOrder getOne(@PathVariable("id") String id) {
        return orderRepository.findById(id)
                .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
    }

    @PutMapping("/{id}")
    public ItemOrder update(@PathVariable("id") String id, @RequestBody ItemOrder order) {
        ItemOrder target = orderRepository.findById(id)
                .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));

        target.setItem(order.getItem());
        target.setCount(order.getCount());
        target.setTotalPrice(order.getTotalPrice());
        target.setStatus(order.getStatus());
        return orderRepository.save(target);
    }

    @DeleteMapping("/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void delete(@PathVariable("id") String id) {
        orderRepository.deleteById(id);
    }

}

✔️ postman 예시

[POST] http://localhost:8080/orders

profile
례코드

0개의 댓글