테이블 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();
}
}