테이블 BasketId 복합키고요 Baskets는 상품들이 장바구니에 들어가는 얘들이고요
status 상태에 따라 상태변경 하는데 아직 테스트는 안했습니다.
테스트는 내일 할수 있을까요.. 내일 회사에서 늦게올것같은데.. ㅠ 

status 장바구니 B, 삭제 D, 결재 C

테이블 


@Entity
@Table(name = "Baskets")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Baskets {

    @EmbeddedId
    private BasketId basketId;

    @NotEmpty
    @Column(name = "PRODUCT_NAME")
    private String productName;

    @NotNull
    private BigDecimal price;

    @NotEmpty
    @Column(name = "BIND_NUMBER")
    private String bindNumber;

    //status 장바구니 B, 삭제 D, 결재 C
    @NotEmpty
    @Column(name = "STATUS")
    private String status;

}

@Embeddable
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class BasketId implements Serializable {

    @NotNull
    @Column(name = "PRODUCT_ID")
    private Long productId;

    @NotNull
    @Column(name = "USERS_ID")
    private Long usersId;

    @NotNull
    @Column(name = "date")
    private String date;

}

Model

@Repository
@Transactional
public class BasketsDao {
    @Autowired
    private EntityManagerFactory entityManagerFactory;

    //장바구니 리스트
    public List<Baskets> findAll(String userName, int page, int size) {
        List<Baskets> basketsList = null;
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        try{
            CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

            CriteriaQuery<Baskets> criteriaQuery = criteriaBuilder.createQuery(Baskets.class);

            Root<Baskets> root = criteriaQuery.from(Baskets.class);

            // 복합키 검색 조건 생성
            Predicate compositeKeyPredicate = criteriaBuilder.and(
                    criteriaBuilder.equal(root.get("USERS_ID"), userName)
            );
            // 상태 검색 조건 생성
            Predicate statusPredicate = criteriaBuilder.equal(root.get("status"), "B");

            // 검색 조건 결합
            Predicate finalPredicate = criteriaBuilder.and(compositeKeyPredicate, statusPredicate);

            criteriaQuery.select(root);
            criteriaQuery.where(finalPredicate);

            TypedQuery<Baskets> typedQuery = entityManager.createQuery(criteriaQuery);
            typedQuery.setFirstResult((page - 1) * size);
            typedQuery.setMaxResults(size);
            
            basketsList = typedQuery.getResultList();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(entityManager!=null){
                entityManager.close();
            }
        }
        return basketsList;
    }

    //장바구니 등록
    public void save(Baskets baskets) {
        System.out.println("등록");
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        try{
            entityManager.getTransaction().begin();
            entityManager.persist(baskets);
            entityManager.getTransaction().commit();

        }catch (Exception e){
            entityManager.getTransaction().rollback();
            e.printStackTrace();
        }finally {
            if(entityManager!=null){
                entityManager.close();
            }
        }
    }

    //장바구니 삭제 및 결제
    //update로 처리
    public void update(String bindNumber,String status) {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        try{
            entityManager.getTransaction().begin();
            Baskets baskets = entityManager.find(Baskets.class, bindNumber);
            if (baskets != null) {
                baskets.setStatus(status);
                entityManager.merge(baskets);
                entityManager.getTransaction().commit();
                entityManager.refresh(baskets);
            } else {
                // 상품이 존재하지 않는 경우 예외 처리
                throw new IllegalArgumentException("Invalid product id: " + bindNumber);
            }
        }catch (Exception e){
            e.printStackTrace();
            entityManager.getTransaction().rollback();
        }finally {
            entityManager.close();
        }
    }

}

Service

@Service
public class BasketServiceImpl  implements BasketService {
    @Autowired
    BasketsDao basketsDao;
    //장바구니 담기
    public void save(Baskets baskets) {
        basketsDao.save(baskets);
    }
    //유저 장바구니 리스트 
    public List<Baskets> findAll(String userName, int page, int size) {
        return basketsDao.findAll(userName,page,size);
    }
    //상태 : 결제, 삭제, 장바구니 
    public void update(String bindNumber,String status) {
        basketsDao.update(bindNumber,status);
    }
}

Contoller 

@Controller
public class BasketController {
    @Autowired
    private BasketServiceImpl basketService;
    
    //장바구니 담기
    @GetMapping("/api/Baskets")
    @ResponseBody
    public List<Baskets> GetBaskets( int page,int size, HttpServletRequest request){
        List<Baskets> Baskets = null;
        HttpSession session = request.getSession(false);
        if (session == null || session.getAttribute("user") == null) {

            System.out.println("not success");
            // 세션에 사용자 정보가 없으면 로그인 페이지로 리다이렉트
            return Baskets;
        }
       return basketService.findAll(session.getId(),page,size);
    }
    
    //유저 장바구니 리스트 
    @PostMapping("/Baskets/Post")
    public String PostBaskets(@RequestBody Baskets baskets, HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session == null || session.getAttribute("user") == null) {

            System.out.println("not success");
            // 세션에 사용자 정보가 없으면 로그인 페이지로 리다이렉트
            return "redirect:/fail";
        }
        basketService.save(baskets);
        System.out.println("baskets products");
        return "redirect:/index.html";
    }
    
   //상태 : 결제, 삭제, 장바구니 
    @PatchMapping("/api/Baskets/Patch/{BindNumber}/{Status}")
    public ResponseEntity<?> updatePatch(@PathVariable String BindNumber,@PathVariable String Status,HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session == null || session.getAttribute("user") == null) {

            System.out.println("not success");
            // 세션에 사용자 정보가 없으면 로그인 페이지로 리다이렉트
            return ResponseEntity.badRequest().build();
        }
        try{
            basketService.update(BindNumber,Status);
        }catch (Exception e){
            e.printStackTrace();
            return ResponseEntity.badRequest().build();
        }
        return ResponseEntity.ok().build();
    }
}

 

+ Recent posts