From b90e2a1fa4e47810b1d1a8f10fbe488e6dc7bf37 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Tue, 17 Sep 2024 21:04:41 +0900 Subject: [PATCH 01/28] =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EC=88=98=EC=A0=95(?= =?UTF-8?q?=20=EC=8B=A4=EC=88=98=EB=A1=9C=20=EB=B9=88=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=ED=95=9C=20=EB=B6=80=EB=B6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Graduated/Task/C2C/C2CApplication.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/Graduated/Task/C2C/C2CApplication.java b/src/main/java/Graduated/Task/C2C/C2CApplication.java index e2274ba..2b204c8 100644 --- a/src/main/java/Graduated/Task/C2C/C2CApplication.java +++ b/src/main/java/Graduated/Task/C2C/C2CApplication.java @@ -10,4 +10,7 @@ public static void main(String[] args) { SpringApplication.run(C2CApplication.class, args); } + + + } From 328c1ad2717dc4da25457093456ba6d8f2531cb0 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Tue, 17 Sep 2024 21:05:09 +0900 Subject: [PATCH 02/28] =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EC=88=98=EC=A0=95(?= =?UTF-8?q?=20=EC=8B=A4=EC=88=98=EB=A1=9C=20=EB=B9=88=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=ED=95=9C=20=EB=B6=80=EB=B6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Graduated/Task/C2C/C2CApplication.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/Graduated/Task/C2C/C2CApplication.java b/src/main/java/Graduated/Task/C2C/C2CApplication.java index 2b204c8..6f41ae9 100644 --- a/src/main/java/Graduated/Task/C2C/C2CApplication.java +++ b/src/main/java/Graduated/Task/C2C/C2CApplication.java @@ -12,5 +12,4 @@ public static void main(String[] args) { - } From 5ac0d052497dd0f7d56a6ba48245177dc52de610 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Fri, 20 Sep 2024 22:02:34 +0900 Subject: [PATCH 03/28] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C,=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C,=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Category/Entity/Category.java | 2 ++ .../Repository/CategoryRepositoryCustom.java | 6 ++++++ .../Category/Repository/CategoryRepositoryImpl.java | 10 ++++++++++ .../C2C/Category/{ => Service}/CategoryService.java | 3 ++- .../java/Graduated/Task/C2C/Item/Entity/Item.java | 8 ++++++++ .../Task/C2C/Item/Service/ItemService.java | 13 +++++++++++++ .../C2C/User/Repository/UserRepositoryCustom.java | 2 +- .../C2C/User/Repository/UserRepositoryImpl.java | 4 ++-- .../Task/C2C/User/Service/UserService.java | 2 +- 9 files changed, 45 insertions(+), 5 deletions(-) rename src/main/java/Graduated/Task/C2C/Category/{ => Service}/CategoryService.java (89%) diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java index 1f1a515..ad37094 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java @@ -23,4 +23,6 @@ public class Category extends BaseEntity { @OneToMany(mappedBy = "category") private List item = new ArrayList<>(); + + } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java index 52b5f30..4564322 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java @@ -1,4 +1,10 @@ package Graduated.Task.C2C.Category.Repository; +import Graduated.Task.C2C.Category.Entity.Category; + +import java.util.Optional; + public interface CategoryRepositoryCustom { + Optional findByCategoryId(Long CategoryId); + } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java index e9e4984..129b074 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java @@ -1,12 +1,17 @@ package Graduated.Task.C2C.Category.Repository; import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Category.Entity.QCategory; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import lombok.Getter; import org.springframework.stereotype.Repository; +import java.util.Optional; + +import static Graduated.Task.C2C.Category.Entity.QCategory.category; + @Repository @Getter public class CategoryRepositoryImpl extends Querydsl4RepositorySupport implements CategoryRepositoryCustom { @@ -15,4 +20,9 @@ public CategoryRepositoryImpl(EntityManager em) { super(Category.class); this.jpaQueryFactory = new JPAQueryFactory(em); } + + @Override + public Optional findByCategoryId(Long CategoryId) { + return Optional.ofNullable(selectFrom(category).where(category.No.eq(CategoryId)).fetchOne()); + } } diff --git a/src/main/java/Graduated/Task/C2C/Category/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java similarity index 89% rename from src/main/java/Graduated/Task/C2C/Category/CategoryService.java rename to src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index fa0c904..3585bdc 100644 --- a/src/main/java/Graduated/Task/C2C/Category/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -1,4 +1,4 @@ -package Graduated.Task.C2C.Category; +package Graduated.Task.C2C.Category.Service; import Graduated.Task.C2C.Category.Repository.CategoryRepository; import lombok.RequiredArgsConstructor; @@ -10,4 +10,5 @@ @Transactional(readOnly = true) public class CategoryService { private final CategoryRepository categoryRepository; + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index 3a70464..70f55f4 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -45,6 +45,14 @@ public class Item extends BaseEntity { @JsonIgnore//개발 과정에서만 사용 , 추후 DTO 변환과정에서는 삭제예정 private Category category; + public Item(String name, int price, Users seller, Category category) { + this.name = name; + this.price = price; + this.seller = seller; + this.category = category; + category.getItem().add(this); + } + public enum State{ sold,sale } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 6a88812..dd3527f 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -1,6 +1,11 @@ package Graduated.Task.C2C.Item.Service; +import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Category.Repository.CategoryRepository; +import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.Item.Repository.ItemRepository; +import Graduated.Task.C2C.User.Entity.Users; +import Graduated.Task.C2C.User.Repository.UserRepository; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -12,4 +17,12 @@ public class ItemService { private final ItemRepository itemRepository; + private final UserRepository userRepository; + private final CategoryRepository categoryRepository; + public void addItem(String name, int price, String userId, Long categoryId) throws Exception { + Users user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); + Category category = categoryRepository.findByCategoryId(categoryId).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); + Item item = new Item(name,price,user,category); + itemRepository.save(item); + } } diff --git a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java index f1d0bb2..186a6ea 100644 --- a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java @@ -5,5 +5,5 @@ import java.util.Optional; public interface UserRepositoryCustom { - Optional findByUserEmail(String email); + Optional findByUserId(String userId); } diff --git a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java index 71c6e01..29eb754 100644 --- a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java @@ -22,7 +22,7 @@ public UserRepositoryImpl(EntityManager em) { @Override - public Optional findByUserEmail(String email) { - return Optional.ofNullable(selectFrom(users).where(users.id.eq(email)).fetchOne()); + public Optional findByUserId(String userId) { + return Optional.ofNullable(selectFrom(users).where(users.id.eq(userId)).fetchOne()); } } diff --git a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java index bd7d54e..763f86d 100644 --- a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java +++ b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java @@ -21,7 +21,7 @@ public class UserService { private Long expireTimeMs = 100*60*60L; @Transactional public String login(String email, String password) throws Exception { - Users user = userRepository.findByUserEmail(email).orElseThrow(() -> new Exception("존재하지 않는 id입니다.")); + Users user = userRepository.findByUserId(email).orElseThrow(() -> new Exception("존재하지 않는 id입니다.")); if (Objects.equals(user.getPassword(), password)){ throw new Exception("비밀번호가 틀렷습니다"); } From 1a48ba0890b16e33dc3ef9367d7fc54d18d2a645 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Fri, 20 Sep 2024 22:07:12 +0900 Subject: [PATCH 04/28] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Category/Repository/CategoryRepository.java | 3 +++ .../C2C/Category/Repository/CategoryRepositoryCustom.java | 2 -- .../Task/C2C/Category/Repository/CategoryRepositoryImpl.java | 5 +---- .../Graduated/Task/C2C/Category/Service/CategoryService.java | 4 ++++ .../java/Graduated/Task/C2C/Item/Service/ItemService.java | 5 +++-- .../java/Graduated/Task/C2C/User/Service/UserService.java | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java index 75b9ddb..f750ffa 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java @@ -3,5 +3,8 @@ import Graduated.Task.C2C.Category.Entity.Category; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface CategoryRepository extends JpaRepository,CategoryRepositoryCustom { + Optional findByNo(Long no); } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java index 4564322..dda8364 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java @@ -5,6 +5,4 @@ import java.util.Optional; public interface CategoryRepositoryCustom { - Optional findByCategoryId(Long CategoryId); - } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java index 129b074..96d4b8f 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java @@ -21,8 +21,5 @@ public CategoryRepositoryImpl(EntityManager em) { this.jpaQueryFactory = new JPAQueryFactory(em); } - @Override - public Optional findByCategoryId(Long CategoryId) { - return Optional.ofNullable(selectFrom(category).where(category.No.eq(CategoryId)).fetchOne()); - } + } diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 3585bdc..22c2d5e 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -1,5 +1,6 @@ package Graduated.Task.C2C.Category.Service; +import Graduated.Task.C2C.Category.Entity.Category; import Graduated.Task.C2C.Category.Repository.CategoryRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -11,4 +12,7 @@ public class CategoryService { private final CategoryRepository categoryRepository; + public Category findCategory(Long no) throws Exception { + return categoryRepository.findByNo(no).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); + } } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index dd3527f..0a5f612 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -19,10 +19,11 @@ public class ItemService { private final ItemRepository itemRepository; private final UserRepository userRepository; private final CategoryRepository categoryRepository; - public void addItem(String name, int price, String userId, Long categoryId) throws Exception { + public void addItem(String name, int price, String userId, Long categoryNo) throws Exception { Users user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); - Category category = categoryRepository.findByCategoryId(categoryId).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); + Category category = categoryRepository.findByNo(categoryNo).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); Item item = new Item(name,price,user,category); itemRepository.save(item); } + } diff --git a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java index 763f86d..ec5eb2b 100644 --- a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java +++ b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java @@ -22,7 +22,7 @@ public class UserService { @Transactional public String login(String email, String password) throws Exception { Users user = userRepository.findByUserId(email).orElseThrow(() -> new Exception("존재하지 않는 id입니다.")); - if (Objects.equals(user.getPassword(), password)){ + if (!Objects.equals(user.getPassword(), password)){ throw new Exception("비밀번호가 틀렷습니다"); } String Access_token = jwtTokenUtil.createToken(user.getId(),expireTimeMs); From ef89d3d39354b3b2c95d3011ba64fc1eb9f23bc3 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Fri, 20 Sep 2024 23:13:01 +0900 Subject: [PATCH 05/28] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=EB=B3=84=20?= =?UTF-8?q?=EA=B0=80=EA=B2=A9=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Graduated/Task/C2C/Category/Entity/Category.java | 11 +++++++++-- .../Task/C2C/Category/Service/CategoryService.java | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java index ad37094..3ad0f71 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java @@ -12,7 +12,7 @@ @Entity @Getter -@NoArgsConstructor(access = AccessLevel.PUBLIC) +@NoArgsConstructor(access = AccessLevel.PROTECTED) public class Category extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -24,5 +24,12 @@ public class Category extends BaseEntity { @OneToMany(mappedBy = "category") private List item = new ArrayList<>(); - + public Category(int minPrice, int maxPrice) { + this.minPrice = minPrice; + this.maxPrice = maxPrice; + } + public void setPrice(int minPrice,int maxPrice){ + this.minPrice=minPrice; + this.maxPrice=maxPrice; + } } diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 22c2d5e..3af2767 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -15,4 +15,15 @@ public class CategoryService { public Category findCategory(Long no) throws Exception { return categoryRepository.findByNo(no).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); } + + public void addCategory(){ + int minPrice=0;int maxPrice=0; //추후 쉘,프로세스를 통한 파이썬 함수 호출을 통하여 값을 받아올 예정 + Category category = new Category(minPrice,maxPrice); + categoryRepository.save(category); + } + public void updatePrice(Long no) throws Exception { + int minPrice = 0;int maxPrice = 0; //추후 쉘,프로세스를 통한 파이썬 함수 호출을 통하여 값을 받아올 예정 + Category category = categoryRepository.findByNo(no).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); + category.setPrice(minPrice,maxPrice); + } } From dd548cb8968d5f6516479c6e495e32d668106f6b Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Sat, 21 Sep 2024 21:38:45 +0900 Subject: [PATCH 06/28] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=ED=8C=90?= =?UTF-8?q?=EB=A7=A4,=EA=B5=AC=EB=A7=A4=20=EC=95=84=EC=9D=B4=ED=85=9C=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../C2C/Category/Service/CategoryService.java | 2 ++ .../Item/Repository/ItemRepositoryCustom.java | 9 +++++++ .../Item/Repository/ItemRepositoryImpl.java | 24 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 3af2767..acda235 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -26,4 +26,6 @@ public void updatePrice(Long no) throws Exception { Category category = categoryRepository.findByNo(no).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); category.setPrice(minPrice,maxPrice); } + + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java index d7528bd..bfb0068 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java @@ -1,4 +1,13 @@ package Graduated.Task.C2C.Item.Repository; +import Graduated.Task.C2C.Item.Entity.Item; + +import java.util.List; + public interface ItemRepositoryCustom { + + List findByCategoryItem(Long categoryNo); + List findBySellerItem(Long userNo); + List findByBuyerItem(Long userNo); + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index 5b7a1d3..5d8f415 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -1,12 +1,21 @@ package Graduated.Task.C2C.Item.Repository; +import Graduated.Task.C2C.Category.Entity.QCategory; import Graduated.Task.C2C.Item.Entity.Item; +import Graduated.Task.C2C.Item.Entity.QItem; +import Graduated.Task.C2C.User.Entity.QUsers; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import lombok.Getter; import org.springframework.stereotype.Repository; +import java.util.List; + +import static Graduated.Task.C2C.Category.Entity.QCategory.category; +import static Graduated.Task.C2C.Item.Entity.QItem.item; +import static Graduated.Task.C2C.User.Entity.QUsers.users; + @Repository @Getter public class ItemRepositoryImpl extends Querydsl4RepositorySupport implements ItemRepositoryCustom { @@ -16,4 +25,19 @@ public ItemRepositoryImpl(EntityManager em) { super(Item.class); this.jpaQueryFactory = new JPAQueryFactory(em); } + + @Override + public List findByCategoryItem(Long categoryNo) { + return select(item).from(category).join(category.item, item).fetchJoin().where(category.No.eq(categoryNo)).fetch(); + } + + @Override + public List findBySellerItem(Long userNo) { + return select(item).from(users).join(users.sellItem,item).fetchJoin().where(users.no.eq(userNo)).fetch(); + } + + @Override + public List findByBuyerItem(Long userNo) { + return select(item).from(users).join(users.buyItem,item).fetchJoin().where(users.no.eq(userNo)).fetch(); + } } From 7a1e2d58a1429a3352f67b45619e82d0f56f4f0d Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Sat, 21 Sep 2024 21:41:08 +0900 Subject: [PATCH 07/28] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=ED=8C=90?= =?UTF-8?q?=EB=A7=A4=EC=99=84=EB=A3=8C=20=EC=95=84=EC=9D=B4=ED=85=9C=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Item/Repository/ItemRepositoryCustom.java | 1 + .../Task/C2C/Item/Repository/ItemRepositoryImpl.java | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java index bfb0068..d6dda25 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java @@ -10,4 +10,5 @@ public interface ItemRepositoryCustom { List findBySellerItem(Long userNo); List findByBuyerItem(Long userNo); + List findBySoldItem(Long userNo); } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index 5d8f415..76aa37d 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -33,11 +33,17 @@ public List findByCategoryItem(Long categoryNo) { @Override public List findBySellerItem(Long userNo) { - return select(item).from(users).join(users.sellItem,item).fetchJoin().where(users.no.eq(userNo)).fetch(); + return select(item).from(users).join(users.sellItem,item).fetchJoin().where(users.no.eq(userNo),item.type.eq(Item.State.sale)).fetch(); + } + + @Override + public List findBySoldItem(Long userNo) { + return select(item).from(users).join(users.sellItem,item).fetchJoin().where(users.no.eq(userNo),item.type.eq(Item.State.sold)).fetch(); } @Override public List findByBuyerItem(Long userNo) { return select(item).from(users).join(users.buyItem,item).fetchJoin().where(users.no.eq(userNo)).fetch(); } + } From 6a06930fc72dfafdb1eb1c0aed78f77642dbca44 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Mon, 30 Sep 2024 20:52:24 +0900 Subject: [PATCH 08/28] =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=20=ED=8C=90?= =?UTF-8?q?=EB=A7=A4=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../Graduated/Task/C2C/Item/Entity/Item.java | 9 +++- .../Task/C2C/Item/Service/ItemService.java | 8 ++++ .../User/Repository/UserRepositoryImpl.java | 2 - .../Graduated/Task/C2C/core/JwtTokenUtil.java | 41 ++++++++++++++----- 5 files changed, 48 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index e7c6d52..f3672aa 100644 --- a/build.gradle +++ b/build.gradle @@ -42,6 +42,7 @@ dependencies { implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.postgresql:postgresql:42.7.2' + implementation group: 'org.zeroturnaround', name: 'zt-exec', version: '1.12' } tasks.named('test') { diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index 70f55f4..a4e6adc 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -50,6 +50,8 @@ public Item(String name, int price, Users seller, Category category) { this.price = price; this.seller = seller; this.category = category; + this.type = State.sale; + seller.getSellItem().add(this); category.getItem().add(this); } @@ -57,5 +59,10 @@ public enum State{ sold,sale } - + public void setSold(Users seller, Users buyer) { + this.seller = seller; + this.buyer = buyer; + this.type = State.sold; + buyer.getBuyItem().add(this); + } } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 0a5f612..632485c 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -8,6 +8,7 @@ import Graduated.Task.C2C.User.Repository.UserRepository; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.apache.catalina.User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,4 +27,11 @@ public void addItem(String name, int price, String userId, Long categoryNo) thro itemRepository.save(item); } + public void SellItem(Long userNo,Long itemNo) throws Exception { + Users buyer = userRepository.findById(userNo).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); + Item item = itemRepository.findById(itemNo).orElseThrow(()->new Exception("존재하지않는 아이템입니다")); + Users seller = item.getSeller(); + item.setSold(seller,buyer); + } + } diff --git a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java index 29eb754..b1a1f69 100644 --- a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java @@ -19,8 +19,6 @@ public UserRepositoryImpl(EntityManager em) { super(Users.class); this.query = new JPAQueryFactory(em); } - - @Override public Optional findByUserId(String userId) { return Optional.ofNullable(selectFrom(users).where(users.id.eq(userId)).fetchOne()); diff --git a/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java b/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java index d6b6c7a..bffadaa 100644 --- a/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java +++ b/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java @@ -13,10 +13,16 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; +import org.zeroturnaround.exec.ProcessExecutor; +import org.zeroturnaround.exec.stream.LogOutputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeoutException; @Getter @Slf4j @@ -26,37 +32,38 @@ public class JwtTokenUtil { @Value("${jwt.token.secret}") private String secretKey; - public Boolean isExpired(String token){ + public Boolean isExpired(String token) { byte[] accessSecret = secretKey.getBytes(StandardCharsets.UTF_8); return Jwts.parser().setSigningKey(Keys.hmacShaKeyFor(accessSecret)).parseClaimsJws(token).getBody() .getExpiration().before(new Date()); } - public String createToken(String email, long expireTimeMs){ + + public String createToken(String email, long expireTimeMs) { Claims claims = Jwts.claims().setSubject(email); - claims.put("roles","user"); + claims.put("roles", "user"); byte[] accessSecret = secretKey.getBytes(StandardCharsets.UTF_8); return Jwts.builder() .setClaims(claims)//정보를 넣어줌 claims가 포함된 jwt빌더를 반환 .setIssuedAt(new Date(System.currentTimeMillis()))//시작시간 - .setExpiration(new Date(System.currentTimeMillis()+expireTimeMs))//만료시간 + .setExpiration(new Date(System.currentTimeMillis() + expireTimeMs))//만료시간 .signWith(Keys.hmacShaKeyFor(accessSecret)) .compact(); } - public Claims getclaims(String token){ + + public Claims getclaims(String token) { byte[] parser_key = secretKey.getBytes(StandardCharsets.UTF_8); try { Claims body = Jwts.parser().setSigningKey(Keys.hmacShaKeyFor(parser_key)).parseClaimsJws(token) .getBody(); return body; - } - catch (ExpiredJwtException e){ + } catch (ExpiredJwtException e) { return e.getClaims(); } } - public String createReFreshToken(String email,Long expireTimeMs) { + public String createReFreshToken(String email, Long expireTimeMs) { byte[] accessSecret = secretKey.getBytes(StandardCharsets.UTF_8); Claims claims = Jwts.claims().setSubject(email); return Jwts.builder() @@ -66,11 +73,13 @@ public String createReFreshToken(String email,Long expireTimeMs) { .signWith(Keys.hmacShaKeyFor(accessSecret)) .compact(); } + public String resolveAccessToken(HttpServletRequest request) { - if(request.getHeader("authorization") != null ) + if (request.getHeader("authorization") != null) return request.getHeader("authorization").substring(7); return null; } + public boolean validateToken(String jwtToken) { byte[] accessSecret = secretKey.getBytes(StandardCharsets.UTF_8); try { @@ -81,12 +90,24 @@ public boolean validateToken(String jwtToken) { return false; } } + public UsernamePasswordAuthenticationToken getAuthentication(String token) { Object no = this.getclaims(token).getSubject(); return new UsernamePasswordAuthenticationToken(no, "", List.of(new SimpleGrantedAuthority("user"))); } + public void setHeaderAccessToken(HttpServletResponse response, String accessToken) { - response.setHeader("authorization", "Bearer "+ accessToken); + response.setHeader("authorization", "Bearer " + accessToken); } + public void test() throws IOException, InterruptedException, TimeoutException { + new ProcessExecutor().command("python", "test.py") + .redirectOutput(new LogOutputStream() { + @Override + protected void processLine(String line) { + System.out.println(line); + } + }).execute(); + + } } From c7e03265be6af35d340908ae7cf1359e45d51a03 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Mon, 30 Sep 2024 20:55:37 +0900 Subject: [PATCH 09/28] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EB=B3=84=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../C2C/Category/Service/CategoryService.java | 1 - .../Task/C2C/Item/Service/ItemService.java | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index acda235..c390bcc 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -27,5 +27,4 @@ public void updatePrice(Long no) throws Exception { category.setPrice(minPrice,maxPrice); } - } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 632485c..93f5cd3 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -6,12 +6,12 @@ import Graduated.Task.C2C.Item.Repository.ItemRepository; import Graduated.Task.C2C.User.Entity.Users; import Graduated.Task.C2C.User.Repository.UserRepository; -import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.catalina.User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -20,18 +20,26 @@ public class ItemService { private final ItemRepository itemRepository; private final UserRepository userRepository; private final CategoryRepository categoryRepository; - public void addItem(String name, int price, String userId, Long categoryNo) throws Exception { + public String addItem(String name, int price, String userId, Long categoryNo) throws Exception { Users user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); Category category = categoryRepository.findByNo(categoryNo).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); Item item = new Item(name,price,user,category); itemRepository.save(item); + return "추가완료"; } - public void SellItem(Long userNo,Long itemNo) throws Exception { + public String SellItem(Long userNo, Long itemNo) throws Exception { Users buyer = userRepository.findById(userNo).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); Item item = itemRepository.findById(itemNo).orElseThrow(()->new Exception("존재하지않는 아이템입니다")); Users seller = item.getSeller(); item.setSold(seller,buyer); + return "판매완료"; + } + + public List viewCategoryItem(Long categoryNo) throws Exception { + Category category = categoryRepository.findByNo(categoryNo).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); + return category.getItem(); + } } From fc9f2bcfb0a31fd6c251175e2de1c75fb519b179 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Mon, 30 Sep 2024 20:57:05 +0900 Subject: [PATCH 10/28] =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=ED=85=9C=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 93f5cd3..6e15f9b 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -39,7 +39,10 @@ public String SellItem(Long userNo, Long itemNo) throws Exception { public List viewCategoryItem(Long categoryNo) throws Exception { Category category = categoryRepository.findByNo(categoryNo).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); return category.getItem(); + } + public List AllItem(){ + return itemRepository.findAll(); } } From 07e90a2446032a17669c2d4933528fc75a766e32 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Mon, 30 Sep 2024 21:22:34 +0900 Subject: [PATCH 11/28] =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=EB=AA=85=20?= =?UTF-8?q?=EC=9C=A0=EC=A7=80=ED=95=98=EA=B3=A0=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=AA=85=20=EC=9C=A0=EC=A7=80=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EA=B5=90=EC=B2=B4=20=EA=B5=AC=EB=A7=A4,=ED=8C=90=EB=A7=A4?= =?UTF-8?q?=EC=99=84=EB=A3=8C,=ED=8C=90=EB=A7=A4=EC=A4=91=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=ED=85=9C=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A1=9C=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/CategoryRepository.java | 1 - .../C2C/Category/Service/CategoryService.java | 6 +++-- .../Graduated/Task/C2C/Item/Entity/Item.java | 10 ++++---- .../Item/Repository/ItemRepositoryImpl.java | 12 ++++------ .../Task/C2C/Item/Service/ItemService.java | 24 ++++++++++++++----- .../C2C/User/Entity/{Users.java => User.java} | 3 ++- .../C2C/User/Repository/UserRepository.java | 7 ++---- .../User/Repository/UserRepositoryCustom.java | 4 ++-- .../User/Repository/UserRepositoryImpl.java | 11 +++++---- .../Task/C2C/User/Service/UserService.java | 4 ++-- 10 files changed, 46 insertions(+), 36 deletions(-) rename src/main/java/Graduated/Task/C2C/User/Entity/{Users.java => User.java} (92%) diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java index f750ffa..0f61e83 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java @@ -6,5 +6,4 @@ import java.util.Optional; public interface CategoryRepository extends JpaRepository,CategoryRepositoryCustom { - Optional findByNo(Long no); } diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index c390bcc..8217d80 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -13,17 +13,19 @@ public class CategoryService { private final CategoryRepository categoryRepository; public Category findCategory(Long no) throws Exception { - return categoryRepository.findByNo(no).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); + return categoryRepository.findById(no).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); } + @Transactional public void addCategory(){ int minPrice=0;int maxPrice=0; //추후 쉘,프로세스를 통한 파이썬 함수 호출을 통하여 값을 받아올 예정 Category category = new Category(minPrice,maxPrice); categoryRepository.save(category); } + @Transactional public void updatePrice(Long no) throws Exception { int minPrice = 0;int maxPrice = 0; //추후 쉘,프로세스를 통한 파이썬 함수 호출을 통하여 값을 받아올 예정 - Category category = categoryRepository.findByNo(no).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); + Category category = categoryRepository.findById(no).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); category.setPrice(minPrice,maxPrice); } diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index a4e6adc..63774b2 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -1,7 +1,7 @@ package Graduated.Task.C2C.Item.Entity; import Graduated.Task.C2C.Category.Entity.Category; -import Graduated.Task.C2C.User.Entity.Users; +import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.core.BaseEntity; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; @@ -33,19 +33,19 @@ public class Item extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="seller_user_no") @JsonIgnore //개발 과정에서만 사용 , 추후 DTO 변환과정에서는 삭제예정 - private Users seller; + private User seller; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="buyer_user_no") @JsonIgnore//개발 과정에서만 사용 , 추후 DTO 변환과정에서는 삭제예정 - private Users buyer; + private User buyer; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "categoryNo") @JsonIgnore//개발 과정에서만 사용 , 추후 DTO 변환과정에서는 삭제예정 private Category category; - public Item(String name, int price, Users seller, Category category) { + public Item(String name, int price, User seller, Category category) { this.name = name; this.price = price; this.seller = seller; @@ -59,7 +59,7 @@ public enum State{ sold,sale } - public void setSold(Users seller, Users buyer) { + public void setSold(User seller, User buyer) { this.seller = seller; this.buyer = buyer; this.type = State.sold; diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index 76aa37d..d4fcfb2 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -1,9 +1,6 @@ package Graduated.Task.C2C.Item.Repository; -import Graduated.Task.C2C.Category.Entity.QCategory; import Graduated.Task.C2C.Item.Entity.Item; -import Graduated.Task.C2C.Item.Entity.QItem; -import Graduated.Task.C2C.User.Entity.QUsers; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; @@ -14,7 +11,8 @@ import static Graduated.Task.C2C.Category.Entity.QCategory.category; import static Graduated.Task.C2C.Item.Entity.QItem.item; -import static Graduated.Task.C2C.User.Entity.QUsers.users; +import static Graduated.Task.C2C.User.Entity.QUser.user; + @Repository @Getter @@ -33,17 +31,17 @@ public List findByCategoryItem(Long categoryNo) { @Override public List findBySellerItem(Long userNo) { - return select(item).from(users).join(users.sellItem,item).fetchJoin().where(users.no.eq(userNo),item.type.eq(Item.State.sale)).fetch(); + return select(item).from(user).join(user.sellItem,item).fetchJoin().where(user.no.eq(userNo),item.type.eq(Item.State.sale)).fetch(); } @Override public List findBySoldItem(Long userNo) { - return select(item).from(users).join(users.sellItem,item).fetchJoin().where(users.no.eq(userNo),item.type.eq(Item.State.sold)).fetch(); + return select(item).from(user).join(user.sellItem,item).fetchJoin().where(user.no.eq(userNo),item.type.eq(Item.State.sold)).fetch(); } @Override public List findByBuyerItem(Long userNo) { - return select(item).from(users).join(users.buyItem,item).fetchJoin().where(users.no.eq(userNo)).fetch(); + return select(item).from(user).join(user.buyItem,item).fetchJoin().where(user.no.eq(userNo)).fetch(); } } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 6e15f9b..c078212 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -4,7 +4,7 @@ import Graduated.Task.C2C.Category.Repository.CategoryRepository; import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.Item.Repository.ItemRepository; -import Graduated.Task.C2C.User.Entity.Users; +import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.User.Repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -20,29 +20,41 @@ public class ItemService { private final ItemRepository itemRepository; private final UserRepository userRepository; private final CategoryRepository categoryRepository; + + @Transactional public String addItem(String name, int price, String userId, Long categoryNo) throws Exception { - Users user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); - Category category = categoryRepository.findByNo(categoryNo).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); + User user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); + Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); Item item = new Item(name,price,user,category); itemRepository.save(item); return "추가완료"; } + @Transactional public String SellItem(Long userNo, Long itemNo) throws Exception { - Users buyer = userRepository.findById(userNo).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); + User buyer = userRepository.findById(userNo).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); Item item = itemRepository.findById(itemNo).orElseThrow(()->new Exception("존재하지않는 아이템입니다")); - Users seller = item.getSeller(); + User seller = item.getSeller(); item.setSold(seller,buyer); return "판매완료"; } public List viewCategoryItem(Long categoryNo) throws Exception { - Category category = categoryRepository.findByNo(categoryNo).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); + Category category = categoryRepository.findById(categoryNo).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); return category.getItem(); } public List AllItem(){ return itemRepository.findAll(); } + public List userBuyItem(Long userNo){ + return itemRepository.findByBuyerItem(userNo); + } + public List userSellerItem(Long userNo){ + return itemRepository.findBySellerItem(userNo); + } + public List userSoldItem(Long userNo){ + return itemRepository.findBySoldItem(userNo); + } } diff --git a/src/main/java/Graduated/Task/C2C/User/Entity/Users.java b/src/main/java/Graduated/Task/C2C/User/Entity/User.java similarity index 92% rename from src/main/java/Graduated/Task/C2C/User/Entity/Users.java rename to src/main/java/Graduated/Task/C2C/User/Entity/User.java index c678996..6aec9a5 100644 --- a/src/main/java/Graduated/Task/C2C/User/Entity/Users.java +++ b/src/main/java/Graduated/Task/C2C/User/Entity/User.java @@ -15,7 +15,8 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) -public class Users extends BaseEntity { +@Table(name = "Users") +public class User extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="userNo") diff --git a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepository.java b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepository.java index 18d3f86..07f06e8 100644 --- a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepository.java +++ b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepository.java @@ -1,11 +1,8 @@ package Graduated.Task.C2C.User.Repository; -import Graduated.Task.C2C.User.Entity.Users; -import Graduated.Task.C2C.core.Querydsl4RepositorySupport; -import lombok.Getter; +import Graduated.Task.C2C.User.Entity.User; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -public interface UserRepository extends JpaRepository , UserRepositoryCustom { +public interface UserRepository extends JpaRepository , UserRepositoryCustom { } diff --git a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java index 186a6ea..c02ce04 100644 --- a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryCustom.java @@ -1,9 +1,9 @@ package Graduated.Task.C2C.User.Repository; -import Graduated.Task.C2C.User.Entity.Users; +import Graduated.Task.C2C.User.Entity.User; import java.util.Optional; public interface UserRepositoryCustom { - Optional findByUserId(String userId); + Optional findByUserId(String userId); } diff --git a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java index b1a1f69..3c23a88 100644 --- a/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/User/Repository/UserRepositoryImpl.java @@ -1,6 +1,6 @@ package Graduated.Task.C2C.User.Repository; -import Graduated.Task.C2C.User.Entity.Users; +import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; @@ -9,18 +9,19 @@ import java.util.Optional; -import static Graduated.Task.C2C.User.Entity.QUsers.users; +import static Graduated.Task.C2C.User.Entity.QUser.user; + @Repository @Getter public class UserRepositoryImpl extends Querydsl4RepositorySupport implements UserRepositoryCustom{ private final JPAQueryFactory query; public UserRepositoryImpl(EntityManager em) { - super(Users.class); + super(User.class); this.query = new JPAQueryFactory(em); } @Override - public Optional findByUserId(String userId) { - return Optional.ofNullable(selectFrom(users).where(users.id.eq(userId)).fetchOne()); + public Optional findByUserId(String userId) { + return Optional.ofNullable(selectFrom(user).where(user.id.eq(userId)).fetchOne()); } } diff --git a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java index ec5eb2b..65c4e9d 100644 --- a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java +++ b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java @@ -1,6 +1,6 @@ package Graduated.Task.C2C.User.Service; -import Graduated.Task.C2C.User.Entity.Users; +import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.User.Repository.UserRepository; import Graduated.Task.C2C.core.JwtTokenUtil; import Graduated.Task.C2C.core.RedisConfig; @@ -21,7 +21,7 @@ public class UserService { private Long expireTimeMs = 100*60*60L; @Transactional public String login(String email, String password) throws Exception { - Users user = userRepository.findByUserId(email).orElseThrow(() -> new Exception("존재하지 않는 id입니다.")); + User user = userRepository.findByUserId(email).orElseThrow(() -> new Exception("존재하지 않는 id입니다.")); if (!Objects.equals(user.getPassword(), password)){ throw new Exception("비밀번호가 틀렷습니다"); } From 1845538bff79e525470bde488220a4e3bfa51375 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Thu, 3 Oct 2024 14:07:58 +0900 Subject: [PATCH 12/28] =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=99=84=EB=A3=8C=202,?= =?UTF-8?q?3,7,8,9,12,10,15=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EA=B5=AC=ED=98=84=20=EB=AF=B8=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?4,5,6,11,13,14=20=EC=B6=94=ED=9B=84=2012=EB=B2=88=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=ED=95=98=EC=97=AC=20=EC=B6=94=EC=B2=9C=20=EA=B0=80?= =?UTF-8?q?=EA=B2=A9=20=EB=B9=84=EB=8F=99=EA=B8=B0=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EC=98=88=EC=A0=95=20=EA=B0=80=EA=B2=A9=20=EC=98=88=EC=B8=A1=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=B0=A9=EB=B2=95=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20Class=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20CategoryPrice=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Category/Entity/Category.java | 15 ++++--------- .../C2C/Category/Entity/categoryPrice.java | 21 +++++++++++++++++++ .../C2C/Category/Service/CategoryService.java | 13 ------------ .../Task/C2C/User/Service/UserService.java | 5 +++++ .../Graduated/Task/C2C/core/JwtTokenUtil.java | 4 ++-- 5 files changed, 32 insertions(+), 26 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java index 3ad0f71..bf97c45 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java @@ -8,7 +8,9 @@ import lombok.NoArgsConstructor; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Entity @Getter @@ -18,18 +20,9 @@ public class Category extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="categoryNo") private Long No; - private int minPrice; - private int maxPrice; - @OneToMany(mappedBy = "category") private List item = new ArrayList<>(); - public Category(int minPrice, int maxPrice) { - this.minPrice = minPrice; - this.maxPrice = maxPrice; - } - public void setPrice(int minPrice,int maxPrice){ - this.minPrice=minPrice; - this.maxPrice=maxPrice; - } + @OneToMany(mappedBy = "category") + private List categoryPrices = new ArrayList<>(); } diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java new file mode 100644 index 0000000..6f6d118 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java @@ -0,0 +1,21 @@ +package Graduated.Task.C2C.Category.Entity; + +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class categoryPrice { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String status; + private int price; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name="categoryNo") + private Category category; +} diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 8217d80..5f4fd5e 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -16,17 +16,4 @@ public Category findCategory(Long no) throws Exception { return categoryRepository.findById(no).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); } - @Transactional - public void addCategory(){ - int minPrice=0;int maxPrice=0; //추후 쉘,프로세스를 통한 파이썬 함수 호출을 통하여 값을 받아올 예정 - Category category = new Category(minPrice,maxPrice); - categoryRepository.save(category); - } - @Transactional - public void updatePrice(Long no) throws Exception { - int minPrice = 0;int maxPrice = 0; //추후 쉘,프로세스를 통한 파이썬 함수 호출을 통하여 값을 받아올 예정 - Category category = categoryRepository.findById(no).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); - category.setPrice(minPrice,maxPrice); - } - } diff --git a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java index 65c4e9d..a06a1e5 100644 --- a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java +++ b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java @@ -30,4 +30,9 @@ public String login(String email, String password) throws Exception { redisConfig.redisTemplate().opsForValue().set(user.getId(),reFresh_token, Duration.ofHours(3)); return Access_token; } + @Transactional + public void logout(String AccessToken){ + String subject = jwtTokenUtil.getclaims(AccessToken).getSubject(); + redisConfig.redisTemplate().delete(subject); + } } diff --git a/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java b/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java index bffadaa..003b306 100644 --- a/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java +++ b/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java @@ -38,8 +38,8 @@ public Boolean isExpired(String token) { .getExpiration().before(new Date()); } - public String createToken(String email, long expireTimeMs) { - Claims claims = Jwts.claims().setSubject(email); + public String createToken(String no, long expireTimeMs) { + Claims claims = Jwts.claims().setSubject(no); claims.put("roles", "user"); byte[] accessSecret = secretKey.getBytes(StandardCharsets.UTF_8); return Jwts.builder() From 44b3df2102015b8b6356645d1f34e665d85bfb56 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Fri, 11 Oct 2024 23:56:22 +0900 Subject: [PATCH 13/28] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=201,?= =?UTF-8?q?4,7=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C=20=EC=9E=84?= =?UTF-8?q?=EC=9D=98=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=84?= =?UTF-8?q?=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/CategoryRepositoryCustom.java | 3 ++ .../Repository/CategoryRepositoryImpl.java | 8 ++++ .../C2C/Category/Service/CategoryService.java | 15 ++++--- .../Task/C2C/Category/categoryController.java | 27 ++++++++++++ .../Graduated/Task/C2C/Item/Dto/ItemDto.java | 35 ++++++++++++++++ .../Graduated/Task/C2C/Item/Entity/Item.java | 2 + .../Task/C2C/Item/Service/ItemService.java | 13 ++++-- .../Task/C2C/Item/itemController.java | 4 ++ .../C2C/User/Controller/UserController.java | 41 +++++++++++++++++++ .../Task/C2C/User/requestDto/loginDto.java | 11 +++++ .../Task/C2C/User/responseDto/TokenDto.java | 11 +++++ .../Graduated/Task/C2C/core/ErrorMessage.java | 11 +++++ .../java/Graduated/Task/C2C/core/Message.java | 15 +++++++ 13 files changed, 187 insertions(+), 9 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/Category/categoryController.java create mode 100644 src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java create mode 100644 src/main/java/Graduated/Task/C2C/Item/itemController.java create mode 100644 src/main/java/Graduated/Task/C2C/User/Controller/UserController.java create mode 100644 src/main/java/Graduated/Task/C2C/User/requestDto/loginDto.java create mode 100644 src/main/java/Graduated/Task/C2C/User/responseDto/TokenDto.java create mode 100644 src/main/java/Graduated/Task/C2C/core/ErrorMessage.java create mode 100644 src/main/java/Graduated/Task/C2C/core/Message.java diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java index dda8364..8714b57 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java @@ -1,8 +1,11 @@ package Graduated.Task.C2C.Category.Repository; import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Item.Entity.Item; +import java.util.List; import java.util.Optional; public interface CategoryRepositoryCustom { + List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize); } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java index 96d4b8f..cf7abff 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java @@ -2,15 +2,18 @@ import Graduated.Task.C2C.Category.Entity.Category; import Graduated.Task.C2C.Category.Entity.QCategory; +import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import lombok.Getter; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; import static Graduated.Task.C2C.Category.Entity.QCategory.category; +import static Graduated.Task.C2C.Item.Entity.QItem.item; @Repository @Getter @@ -21,5 +24,10 @@ public CategoryRepositoryImpl(EntityManager em) { this.jpaQueryFactory = new JPAQueryFactory(em); } + public List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize) { + return select(item).from(category).where(category.No.eq(categoryNo)).join(category.item,item).where(item.type.eq(Item.State.sale)).orderBy(item.createdDate.desc()).fetchJoin().offset(startPage) + .limit(PageSize).fetch(); + } + } diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 5f4fd5e..1c7e996 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -1,19 +1,22 @@ package Graduated.Task.C2C.Category.Service; -import Graduated.Task.C2C.Category.Entity.Category; import Graduated.Task.C2C.Category.Repository.CategoryRepository; +import Graduated.Task.C2C.Item.Dto.ItemDto; +import Graduated.Task.C2C.Item.Entity.Item; +import Graduated.Task.C2C.Item.Service.ItemService; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class CategoryService { - private final CategoryRepository categoryRepository; - - public Category findCategory(Long no) throws Exception { - return categoryRepository.findById(no).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); - } + private final ItemService itemService; } diff --git a/src/main/java/Graduated/Task/C2C/Category/categoryController.java b/src/main/java/Graduated/Task/C2C/Category/categoryController.java new file mode 100644 index 0000000..5caae25 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Category/categoryController.java @@ -0,0 +1,27 @@ +package Graduated.Task.C2C.Category; + +import Graduated.Task.C2C.Item.Dto.ItemDto; +import Graduated.Task.C2C.Item.Service.ItemService; +import Graduated.Task.C2C.User.responseDto.TokenDto; +import Graduated.Task.C2C.core.Message; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +public class categoryController { + private final ItemService itemService; + @GetMapping("/api/{categoryNo}/{page}") + public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") int page ){ + List itemDtos = itemService.viewCategoryItem(categoryNo, page, 10); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message, HttpStatus.OK); + } + +} diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java new file mode 100644 index 0000000..828fb61 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java @@ -0,0 +1,35 @@ +package Graduated.Task.C2C.Item.Dto; + +import Graduated.Task.C2C.Item.Entity.Item; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data + +public class ItemDto { + private Long itemId; + + private String image; + + private String itemName; + + private int price; + + private boolean priceSimilar; + + private LocalDateTime time; + + public ItemDto(Long itemId, String itemName, int price, boolean priceSimilar, LocalDateTime time) { + this.itemId = itemId; + this.image=""; + this.itemName = itemName; + this.price = price; + this.priceSimilar = priceSimilar; + this.time = time; + } +} diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index 63774b2..e509570 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -28,6 +28,8 @@ public class Item extends BaseEntity { @Enumerated(EnumType.STRING) private State type; + private Boolean priceSimilar; + private int viewCount; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index c078212..f3477d2 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -2,6 +2,7 @@ import Graduated.Task.C2C.Category.Entity.Category; import Graduated.Task.C2C.Category.Repository.CategoryRepository; +import Graduated.Task.C2C.Item.Dto.ItemDto; import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.Item.Repository.ItemRepository; import Graduated.Task.C2C.User.Entity.User; @@ -39,9 +40,12 @@ public String SellItem(Long userNo, Long itemNo) throws Exception { return "판매완료"; } - public List viewCategoryItem(Long categoryNo) throws Exception { - Category category = categoryRepository.findById(categoryNo).orElseThrow(()-> new Exception("존재하지않는 카테고리입니다.")); - return category.getItem(); + public List viewCategoryItem(Long categoryNo, final int startPage, final int PageSize) { + List categoryItem = categoryRepository.findCategoryWithItem(categoryNo, startPage, PageSize); + return categoryItem.stream().map(this::getItemDto).toList(); + } + private ItemDto getItemDto(Item item) { + return new ItemDto(item.getNo(),item.getName(),item.getPrice(),item.getPriceSimilar(),item.getCreatedDate()); } public List AllItem(){ @@ -57,4 +61,7 @@ public List userSoldItem(Long userNo){ return itemRepository.findBySoldItem(userNo); } + + + } diff --git a/src/main/java/Graduated/Task/C2C/Item/itemController.java b/src/main/java/Graduated/Task/C2C/Item/itemController.java new file mode 100644 index 0000000..2f97aa7 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Item/itemController.java @@ -0,0 +1,4 @@ +package Graduated.Task.C2C.Item; + +public class itemController { +} diff --git a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java new file mode 100644 index 0000000..9530219 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java @@ -0,0 +1,41 @@ +package Graduated.Task.C2C.User.Controller; + +import Graduated.Task.C2C.User.Service.UserService; +import Graduated.Task.C2C.User.requestDto.loginDto; +import Graduated.Task.C2C.User.responseDto.TokenDto; +import Graduated.Task.C2C.core.JwtTokenUtil; +import Graduated.Task.C2C.core.Message; +import Graduated.Task.C2C.core.ErrorMessage; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequiredArgsConstructor +public class UserController { + private final UserService userService; + private final JwtTokenUtil jwtTokenUtil; + @PostMapping("/login") + public ResponseEntity login(loginDto loginDto) { + try { + String accessToken = userService.login(loginDto.getId(), loginDto.getPassword()); + TokenDto tokenDto = new TokenDto(accessToken,"성공적으로 로그인 하였습니다."); + Message message = Message.of(200, tokenDto); + return new ResponseEntity<>(message,HttpStatus.OK); + } catch (Exception e) { + ErrorMessage errorMessage = ErrorMessage.of(401, "아이디와 비밀번호를 확인해 주십시오"); + return new ResponseEntity<>(errorMessage, HttpStatus.NOT_FOUND); + } + } + @PostMapping("/logout") + private ResponseEntity logout(HttpServletRequest request){ + String accessToken = jwtTokenUtil.resolveAccessToken(request); + userService.logout(accessToken); + Message message = Message.of(200,"성공적으로 로그아웃 하였습니다."); + return new ResponseEntity<>(message,HttpStatus.OK); + } +} diff --git a/src/main/java/Graduated/Task/C2C/User/requestDto/loginDto.java b/src/main/java/Graduated/Task/C2C/User/requestDto/loginDto.java new file mode 100644 index 0000000..a1201a4 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/User/requestDto/loginDto.java @@ -0,0 +1,11 @@ +package Graduated.Task.C2C.User.requestDto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class loginDto { + String id; + String password; +} diff --git a/src/main/java/Graduated/Task/C2C/User/responseDto/TokenDto.java b/src/main/java/Graduated/Task/C2C/User/responseDto/TokenDto.java new file mode 100644 index 0000000..04e3bd1 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/User/responseDto/TokenDto.java @@ -0,0 +1,11 @@ +package Graduated.Task.C2C.User.responseDto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class TokenDto { + String accessToken; + String message; +} diff --git a/src/main/java/Graduated/Task/C2C/core/ErrorMessage.java b/src/main/java/Graduated/Task/C2C/core/ErrorMessage.java new file mode 100644 index 0000000..790fbba --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/core/ErrorMessage.java @@ -0,0 +1,11 @@ +package Graduated.Task.C2C.core; + +import lombok.*; + +@Getter +@Setter +@RequiredArgsConstructor(staticName = "of") +public class ErrorMessage { + private final int resultCode; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/Graduated/Task/C2C/core/Message.java b/src/main/java/Graduated/Task/C2C/core/Message.java new file mode 100644 index 0000000..68340d3 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/core/Message.java @@ -0,0 +1,15 @@ +package Graduated.Task.C2C.core; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@RequiredArgsConstructor(staticName = "of") +public class Message { + + private final int resultCode; + private final D data; + +} \ No newline at end of file From df0adde0f6d5ba0f79ca56727629388389db88fc Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Sat, 12 Oct 2024 02:16:41 +0900 Subject: [PATCH 14/28] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=202,?= =?UTF-8?q?3,7,8,9=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Category/Entity/Category.java | 1 + .../C2C/Category/Entity/categoryPrice.java | 5 +- .../Repository/CategoryRepository.java | 2 +- .../Repository/CategoryRepositoryCustom.java | 3 +- .../Repository/CategoryRepositoryImpl.java | 12 ++-- .../Task/C2C/Category/categoryController.java | 9 +-- .../Task/C2C/Item/Dto/ItemDetailDto.java | 27 +++++++++ .../Graduated/Task/C2C/Item/Entity/Item.java | 3 +- .../Item/Repository/ItemRepositoryCustom.java | 6 +- .../Item/Repository/ItemRepositoryImpl.java | 21 +++++-- .../Task/C2C/Item/Service/ItemService.java | 26 +++++++- .../Task/C2C/Item/itemController.java | 60 +++++++++++++++++++ 12 files changed, 148 insertions(+), 27 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java index bf97c45..fa35f9a 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java @@ -22,6 +22,7 @@ public class Category extends BaseEntity { private Long No; @OneToMany(mappedBy = "category") private List item = new ArrayList<>(); + private String name; @OneToMany(mappedBy = "category") private List categoryPrices = new ArrayList<>(); diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java index 6f6d118..7899e2d 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java @@ -12,8 +12,9 @@ public class categoryPrice { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String status; - private int price; + private int status; + private int maxPrice; + private int minPrice; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="categoryNo") diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java index f750ffa..b4bdb17 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java @@ -6,5 +6,5 @@ import java.util.Optional; public interface CategoryRepository extends JpaRepository,CategoryRepositoryCustom { - Optional findByNo(Long no); + } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java index 8714b57..29707c4 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java @@ -1,11 +1,12 @@ package Graduated.Task.C2C.Category.Repository; import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Category.Entity.categoryPrice; import Graduated.Task.C2C.Item.Entity.Item; import java.util.List; import java.util.Optional; public interface CategoryRepositoryCustom { - List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize); + Optional findCategoryPrice(Long categoryNo, int state); } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java index cf7abff..e57c241 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java @@ -2,6 +2,8 @@ import Graduated.Task.C2C.Category.Entity.Category; import Graduated.Task.C2C.Category.Entity.QCategory; +import Graduated.Task.C2C.Category.Entity.QcategoryPrice; +import Graduated.Task.C2C.Category.Entity.categoryPrice; import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -23,11 +25,11 @@ public CategoryRepositoryImpl(EntityManager em) { super(Category.class); this.jpaQueryFactory = new JPAQueryFactory(em); } - - public List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize) { - return select(item).from(category).where(category.No.eq(categoryNo)).join(category.item,item).where(item.type.eq(Item.State.sale)).orderBy(item.createdDate.desc()).fetchJoin().offset(startPage) - .limit(PageSize).fetch(); + public Optional findCategoryPrice(Long categoryNo,int state){ + return Optional.ofNullable(selectFrom(QcategoryPrice.categoryPrice) + .where(QcategoryPrice.categoryPrice.category.No.eq(categoryNo), QcategoryPrice.categoryPrice.status.eq(state)) + .join(QcategoryPrice.categoryPrice.category).fetchJoin() + .fetchOne()); } - } diff --git a/src/main/java/Graduated/Task/C2C/Category/categoryController.java b/src/main/java/Graduated/Task/C2C/Category/categoryController.java index 5caae25..5b8cc56 100644 --- a/src/main/java/Graduated/Task/C2C/Category/categoryController.java +++ b/src/main/java/Graduated/Task/C2C/Category/categoryController.java @@ -16,12 +16,7 @@ @RestController @RequiredArgsConstructor public class categoryController { - private final ItemService itemService; - @GetMapping("/api/{categoryNo}/{page}") - public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") int page ){ - List itemDtos = itemService.viewCategoryItem(categoryNo, page, 10); - Message> message = Message.of(200, itemDtos); - return new ResponseEntity<>(message, HttpStatus.OK); - } + + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java new file mode 100644 index 0000000..61cb84e --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java @@ -0,0 +1,27 @@ +package Graduated.Task.C2C.Item.Dto; + +import lombok.Data; + +@Data +public class ItemDetailDto { + private Long itemId; + private String images; + private String itemName; + private int price; + private String category; + private int minPrice; + private int maxPrice; + private int itemState; + + public ItemDetailDto(Long itemId, String itemName, int price, String category, int minPrice, int maxPrice, int itemState) { + this.itemId = itemId; + this.images = ""; + this.itemName = itemName; + this.price = price; + this.category = category; + this.minPrice = minPrice; + this.maxPrice = maxPrice; + this.itemState = itemState; + } + +} diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index 86a5771..b2a17a5 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -30,6 +30,7 @@ public class Item extends BaseEntity { private Boolean priceSimilar; + private int itemState; private int viewCount; @ManyToOne(fetch = FetchType.LAZY) @@ -47,7 +48,7 @@ public class Item extends BaseEntity { @JsonIgnore//개발 과정에서만 사용 , 추후 DTO 변환과정에서는 삭제예정 private Category category; - public Item(String name, int price, Users seller, Category category) { + public Item(String name, int price, User seller, Category category,int itemState,boolean priceSimilar) { this.name = name; this.price = price; this.seller = seller; diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java index d6dda25..3a6ba8a 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java @@ -3,10 +3,12 @@ import Graduated.Task.C2C.Item.Entity.Item; import java.util.List; +import java.util.Optional; public interface ItemRepositoryCustom { - - List findByCategoryItem(Long categoryNo); + List searchItem(String word,final int startPage, final int PageSize); + List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize); + Optional findItemWithCategory(Long itemId); List findBySellerItem(Long userNo); List findByBuyerItem(Long userNo); diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index d4fcfb2..1038aab 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -2,12 +2,14 @@ import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.core.Querydsl4RepositorySupport; +import com.querydsl.core.BooleanBuilder; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import lombok.Getter; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; import static Graduated.Task.C2C.Category.Entity.QCategory.category; import static Graduated.Task.C2C.Item.Entity.QItem.item; @@ -24,9 +26,19 @@ public ItemRepositoryImpl(EntityManager em) { this.jpaQueryFactory = new JPAQueryFactory(em); } - @Override - public List findByCategoryItem(Long categoryNo) { - return select(item).from(category).join(category.item, item).fetchJoin().where(category.No.eq(categoryNo)).fetch(); + public List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize) { + return select(item).from(category).where(category.No.eq(categoryNo)).join(category.item,item).where(item.type.eq(Item.State.sale)).orderBy(item.createdDate.desc()).fetchJoin().offset(startPage) + .limit(PageSize).fetch(); + } + public Optional findItemWithCategory(Long itemId){ + return Optional.ofNullable(selectFrom(item).where(item.No.eq(itemId)).join(item.category).fetchJoin().fetchOne()); + } + public List searchItem(String word,final int startPage, final int PageSize){ + BooleanBuilder booleanBuilder = new BooleanBuilder(); + if(word!=null){ + booleanBuilder.and(item.name.like("%" + word + "%")); + } + return selectFrom(item).where(booleanBuilder,item.type.eq(Item.State.sale)).fetch(); } @Override @@ -41,7 +53,6 @@ public List findBySoldItem(Long userNo) { @Override public List findByBuyerItem(Long userNo) { - return select(item).from(user).join(user.buyItem,item).fetchJoin().where(user.no.eq(userNo)).fetch(); + return select(item).from(user).join(user.buyItem, item).fetchJoin().where(user.no.eq(userNo)).fetch(); } - } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index f3477d2..ed517a6 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -1,17 +1,21 @@ package Graduated.Task.C2C.Item.Service; import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Category.Entity.categoryPrice; import Graduated.Task.C2C.Category.Repository.CategoryRepository; +import Graduated.Task.C2C.Item.Dto.ItemDetailDto; import Graduated.Task.C2C.Item.Dto.ItemDto; import Graduated.Task.C2C.Item.Entity.Item; import Graduated.Task.C2C.Item.Repository.ItemRepository; import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.User.Repository.UserRepository; import lombok.RequiredArgsConstructor; +import org.springframework.data.crossstore.ChangeSetPersister; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.NoSuchElementException; @Service @RequiredArgsConstructor @@ -23,10 +27,10 @@ public class ItemService { private final CategoryRepository categoryRepository; @Transactional - public String addItem(String name, int price, String userId, Long categoryNo) throws Exception { + public String addItem(String name, int price, String userId, Long categoryNo,int itemState,boolean priceSimilar) throws Exception { User user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); - Item item = new Item(name,price,user,category); + Item item = new Item(name,price,user,category,itemState,priceSimilar); itemRepository.save(item); return "추가완료"; } @@ -41,13 +45,29 @@ public String SellItem(Long userNo, Long itemNo) throws Exception { } public List viewCategoryItem(Long categoryNo, final int startPage, final int PageSize) { - List categoryItem = categoryRepository.findCategoryWithItem(categoryNo, startPage, PageSize); + List categoryItem = itemRepository.findCategoryWithItem(categoryNo, startPage, PageSize); return categoryItem.stream().map(this::getItemDto).toList(); + } + public List searchItem(String word,final int startPage, final int PageSize){ + List searchItem = itemRepository.searchItem(word,startPage, PageSize); + return searchItem.stream().map(this::getItemDto).toList(); + } + public ItemDetailDto itemInformation(Long itemId){ + Item item = itemRepository.findItemWithCategory(itemId).orElseThrow(() -> new NullPointerException("존재하지 않는 아이템입니다")); + int state = item.getItemState(); + categoryPrice categoryPrice = categoryRepository.findCategoryPrice(item.getCategory().getNo(), state).orElseThrow(() -> new NoSuchElementException("잘못된 접근입니다.")); + int maxPrice = categoryPrice.getMaxPrice(); + int minPrice = categoryPrice.getMinPrice(); + String name = item.getCategory().getName(); + return new ItemDetailDto(item.getNo(),item.getName(),item.getPrice(),name,minPrice,maxPrice,item.getItemState()); + + } private ItemDto getItemDto(Item item) { return new ItemDto(item.getNo(),item.getName(),item.getPrice(),item.getPriceSimilar(),item.getCreatedDate()); } + public List AllItem(){ return itemRepository.findAll(); } diff --git a/src/main/java/Graduated/Task/C2C/Item/itemController.java b/src/main/java/Graduated/Task/C2C/Item/itemController.java index 2f97aa7..604dd72 100644 --- a/src/main/java/Graduated/Task/C2C/Item/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/itemController.java @@ -1,4 +1,64 @@ package Graduated.Task.C2C.Item; +import Graduated.Task.C2C.Item.Dto.ItemDetailDto; +import Graduated.Task.C2C.Item.Dto.ItemDto; +import Graduated.Task.C2C.Item.Service.ItemService; +import Graduated.Task.C2C.core.ErrorMessage; +import Graduated.Task.C2C.core.Message; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.NoSuchElementException; + +@RestController +@RequiredArgsConstructor public class itemController { + private final ItemService itemService; + @GetMapping(value = {"/api/{categoryNo}/{page}","/api/{categoryNo}"}) + public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") Integer page ){ + if(page==null) { + page = 1; + } + List itemDtos = itemService.viewCategoryItem(categoryNo, page, 10); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message, HttpStatus.OK); + } + + @GetMapping(value = {"/search/{item}/{page}","/search/{item}"}) + public ResponseEntity SearchItem(@PathVariable("item") String word,@PathVariable("page") Integer page){ + if(page==null) { + page = 1; + } + List itemDtos = itemService.searchItem(word, page, 10); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message, HttpStatus.OK); + } + + @GetMapping("/itemInfo/{ItemNo}") + public ResponseEntity itemDetail(@PathVariable("ItemNo") Long itemNo){ + try { + ItemDetailDto itemDetailDto = itemService.itemInformation(itemNo); + Message itemDetailDtoMessage = Message.of(200, itemDetailDto); + return new ResponseEntity<>(itemDetailDtoMessage,HttpStatus.OK); + } + catch (NullPointerException e){ + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.NOT_FOUND); + } + catch (NoSuchElementException e){ + ErrorMessage errorMessage = ErrorMessage.of(401, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.UNAUTHORIZED);} + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR);} + } + } + + } From 28b09868aec8b0d2b649a29a2fe30e3493ebeb5a Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Sat, 12 Oct 2024 02:17:11 +0900 Subject: [PATCH 15/28] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=202,?= =?UTF-8?q?3,7,8,9=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Graduated/Task/C2C/Item/itemController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Item/itemController.java b/src/main/java/Graduated/Task/C2C/Item/itemController.java index 604dd72..2c42855 100644 --- a/src/main/java/Graduated/Task/C2C/Item/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/itemController.java @@ -56,9 +56,7 @@ public ResponseEntity itemDetail(@PathVariable("ItemNo") Long itemNo){ return new ResponseEntity<>(errorMessage,HttpStatus.UNAUTHORIZED);} catch (Exception e){ ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); - return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR);} + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); } } - - } From 558f88b30b360c072b7cadcd3fe05c8f5d5d2604 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Sat, 12 Oct 2024 14:31:46 +0900 Subject: [PATCH 16/28] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=202,?= =?UTF-8?q?3,7,8,9,11,12,13=20=EA=B5=AC=ED=98=84=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EC=9E=84=EC=9D=98=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=84?= =?UTF-8?q?=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../C2C/Item/Controller/itemController.java | 121 ++++++++++++++++++ .../Task/C2C/Item/Dto/itemRequestDto.java | 11 ++ .../Task/C2C/Item/Dto/joinItemDto.java | 18 +++ .../Graduated/Task/C2C/Item/Entity/Item.java | 12 ++ .../Task/C2C/Item/Service/ItemService.java | 25 +++- .../Task/C2C/Item/itemController.java | 62 --------- 6 files changed, 180 insertions(+), 69 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java create mode 100644 src/main/java/Graduated/Task/C2C/Item/Dto/itemRequestDto.java create mode 100644 src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java delete mode 100644 src/main/java/Graduated/Task/C2C/Item/itemController.java diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java new file mode 100644 index 0000000..b7e4c36 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -0,0 +1,121 @@ +package Graduated.Task.C2C.Item.Controller; + +import Graduated.Task.C2C.Item.Dto.ItemDetailDto; +import Graduated.Task.C2C.Item.Dto.ItemDto; +import Graduated.Task.C2C.Item.Dto.itemRequestDto; +import Graduated.Task.C2C.Item.Dto.joinItemDto; +import Graduated.Task.C2C.Item.Service.ItemService; +import Graduated.Task.C2C.core.ErrorMessage; +import Graduated.Task.C2C.core.JwtTokenUtil; +import Graduated.Task.C2C.core.Message; +import jakarta.servlet.http.HttpServletRequest; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.NoSuchElementException; + +@RestController +@RequiredArgsConstructor +public class itemController { + private final ItemService itemService; + private final JwtTokenUtil jwtTokenUtil; + @GetMapping(value = {"/api/{categoryNo}/{page}","/api/{categoryNo}"}) + public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") Integer page ){ + if(page==null) { + page = 1; + } + List itemDtos = itemService.viewCategoryItem(categoryNo, page, 10); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message, HttpStatus.OK); + } + + @GetMapping(value = {"/search/{item}/{page}","/search/{item}"}) + public ResponseEntity SearchItem(@PathVariable("item") String word,@PathVariable("page") Integer page){ + if(page==null) { + page = 1; + } + List itemDtos = itemService.searchItem(word, page, 10); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message, HttpStatus.OK); + } + + @GetMapping("/itemInfo/{ItemNo}") + public ResponseEntity itemDetail(@PathVariable("ItemNo") Long itemNo){ + try { + ItemDetailDto itemDetailDto = itemService.itemInformation(itemNo); + Message itemDetailDtoMessage = Message.of(200, itemDetailDto); + return new ResponseEntity<>(itemDetailDtoMessage,HttpStatus.OK); + } + catch (NullPointerException e){ + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.NOT_FOUND); + } + catch (NoSuchElementException e){ + ErrorMessage errorMessage = ErrorMessage.of(401, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.UNAUTHORIZED);} + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); + } + } + @PostMapping("/item/create") + public ResponseEntity createItem(joinItemDto joinItemDto, HttpServletRequest request){ + String accessToken = jwtTokenUtil.resolveAccessToken(request); + String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); + try{ + Long itemNo = itemService.addItem(joinItemDto.getItemName(), joinItemDto.getPrice(), userId, joinItemDto.getCategoryNo(), joinItemDto.getItemState(), + joinItemDto.isPriceSimilar()); + Message message = Message.of(201,new itemRequestDto(itemNo,"상품이 성공적으로 수정되었습니다.")); + return new ResponseEntity<>(message,HttpStatus.CREATED); + } + catch (NullPointerException e) { + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.NOT_FOUND); + } + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); + } + } + @PatchMapping("/item/patch/{itemNo}") + public ResponseEntity changeItem(@PathVariable("itemNo") Long itemNo, joinItemDto joinItemDto,HttpServletRequest request){ + try{ + itemService.changeItem(itemNo, joinItemDto.getItemName(), joinItemDto.getPrice(), joinItemDto.getCategoryNo(), joinItemDto.getItemState(), + joinItemDto.isPriceSimilar()); + Message message = Message.of(200,new itemRequestDto(itemNo,"상품이 성공적으로 수정되었습니다.")); + return new ResponseEntity<>(message,HttpStatus.OK); + } + catch (NullPointerException e) { + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.NOT_FOUND); + } + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @DeleteMapping("/item/delete/{itemNo}") + public ResponseEntity deleteItem(@PathVariable("itemNo") Long itemNo){ + try{ + itemService.deleteItem(itemNo); + Message message = Message.of(200,"상품이 성공적으로 삭제되었습니다."); + return new ResponseEntity<>(message,HttpStatus.OK); + } + catch (NullPointerException e) { + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); + return new ResponseEntity<>(errorMessage,HttpStatus.NOT_FOUND); + } + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + +} diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/itemRequestDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/itemRequestDto.java new file mode 100644 index 0000000..559e2c5 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/itemRequestDto.java @@ -0,0 +1,11 @@ +package Graduated.Task.C2C.Item.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class itemRequestDto { + private Long itemId; + private String message; +} diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java new file mode 100644 index 0000000..a3824b2 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java @@ -0,0 +1,18 @@ +package Graduated.Task.C2C.Item.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +@Data +@Getter +@AllArgsConstructor +public class joinItemDto { + private String images; + private String itemName; + private int price; + private Long categoryNo; + private int itemState; + private boolean priceSimilar; + +} diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index b2a17a5..1a78fb2 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -28,6 +28,7 @@ public class Item extends BaseEntity { @Enumerated(EnumType.STRING) private State type; + private String image; private Boolean priceSimilar; private int itemState; @@ -50,6 +51,7 @@ public class Item extends BaseEntity { public Item(String name, int price, User seller, Category category,int itemState,boolean priceSimilar) { this.name = name; + this.image=""; this.price = price; this.seller = seller; this.category = category; @@ -58,6 +60,16 @@ public Item(String name, int price, User seller, Category category,int itemState category.getItem().add(this); } + public void changeItem(String name, int price, Boolean priceSimilar, int itemState, Category category) { + this.name = name; + this.image=""; + this.price = price; + this.priceSimilar = priceSimilar; + this.itemState = itemState; + this.category = category; + + } + public enum State{ sold,sale } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index ed517a6..63ab65d 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -10,7 +10,6 @@ import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.User.Repository.UserRepository; import lombok.RequiredArgsConstructor; -import org.springframework.data.crossstore.ChangeSetPersister; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,21 +26,33 @@ public class ItemService { private final CategoryRepository categoryRepository; @Transactional - public String addItem(String name, int price, String userId, Long categoryNo,int itemState,boolean priceSimilar) throws Exception { - User user = userRepository.findByUserId(userId).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); - Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new Exception("존재하지않는 카테고리입니다.")); + public Long addItem(String name, int price, String userId, Long categoryNo, int itemState, boolean priceSimilar) { + User user = userRepository.findByUserId(userId).orElseThrow(()->new NullPointerException("존재하지않는 사용자입니다")); + Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); Item item = new Item(name,price,user,category,itemState,priceSimilar); itemRepository.save(item); - return "추가완료"; + return item.getNo(); + } + @Transactional + public void deleteItem(Long itemId){ + Item item = itemRepository.findById(itemId).orElseThrow(() -> new NullPointerException("존재하지않는 아이템입니다.")); + itemRepository.delete(item); } @Transactional - public String SellItem(Long userNo, Long itemNo) throws Exception { + public void SellItem(Long userNo, Long itemNo) throws Exception { User buyer = userRepository.findById(userNo).orElseThrow(()->new Exception("존재하지않는 사용자입니다")); Item item = itemRepository.findById(itemNo).orElseThrow(()->new Exception("존재하지않는 아이템입니다")); User seller = item.getSeller(); item.setSold(seller,buyer); - return "판매완료"; + } + + @Transactional + public void changeItem(Long itemId,String name, int price, Long categoryNo,int itemState,boolean priceSimilar) { + Item item = itemRepository.findById(itemId).orElseThrow(() -> new NullPointerException("존재하지않는 아이템입니다.")); + Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); + item.changeItem(name,price,priceSimilar,itemState,category); + itemRepository.save(item); } public List viewCategoryItem(Long categoryNo, final int startPage, final int PageSize) { diff --git a/src/main/java/Graduated/Task/C2C/Item/itemController.java b/src/main/java/Graduated/Task/C2C/Item/itemController.java deleted file mode 100644 index 2c42855..0000000 --- a/src/main/java/Graduated/Task/C2C/Item/itemController.java +++ /dev/null @@ -1,62 +0,0 @@ -package Graduated.Task.C2C.Item; - -import Graduated.Task.C2C.Item.Dto.ItemDetailDto; -import Graduated.Task.C2C.Item.Dto.ItemDto; -import Graduated.Task.C2C.Item.Service.ItemService; -import Graduated.Task.C2C.core.ErrorMessage; -import Graduated.Task.C2C.core.Message; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; -import java.util.NoSuchElementException; - -@RestController -@RequiredArgsConstructor -public class itemController { - private final ItemService itemService; - @GetMapping(value = {"/api/{categoryNo}/{page}","/api/{categoryNo}"}) - public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") Integer page ){ - if(page==null) { - page = 1; - } - List itemDtos = itemService.viewCategoryItem(categoryNo, page, 10); - Message> message = Message.of(200, itemDtos); - return new ResponseEntity<>(message, HttpStatus.OK); - } - - @GetMapping(value = {"/search/{item}/{page}","/search/{item}"}) - public ResponseEntity SearchItem(@PathVariable("item") String word,@PathVariable("page") Integer page){ - if(page==null) { - page = 1; - } - List itemDtos = itemService.searchItem(word, page, 10); - Message> message = Message.of(200, itemDtos); - return new ResponseEntity<>(message, HttpStatus.OK); - } - - @GetMapping("/itemInfo/{ItemNo}") - public ResponseEntity itemDetail(@PathVariable("ItemNo") Long itemNo){ - try { - ItemDetailDto itemDetailDto = itemService.itemInformation(itemNo); - Message itemDetailDtoMessage = Message.of(200, itemDetailDto); - return new ResponseEntity<>(itemDetailDtoMessage,HttpStatus.OK); - } - catch (NullPointerException e){ - ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); - return new ResponseEntity<>(errorMessage,HttpStatus.NOT_FOUND); - } - catch (NoSuchElementException e){ - ErrorMessage errorMessage = ErrorMessage.of(401, e.getMessage()); - return new ResponseEntity<>(errorMessage,HttpStatus.UNAUTHORIZED);} - catch (Exception e){ - ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); - return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); - } - } -} From fdec83a22ec86ca99345b98bcd502ecd2e8b1dfc Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Sat, 12 Oct 2024 21:16:02 +0900 Subject: [PATCH 17/28] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=202,?= =?UTF-8?q?3,7,8,9,11,12,13=20=EA=B5=AC=ED=98=84=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EC=9E=84=EC=9D=98=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=84?= =?UTF-8?q?=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../C2C/Item/Controller/itemController.java | 24 +++++++++++++++++++ .../Item/Repository/ItemRepositoryCustom.java | 6 ++--- .../Item/Repository/ItemRepositoryImpl.java | 13 +++++----- .../Task/C2C/Item/Service/ItemService.java | 12 +++++----- .../C2C/User/Controller/UserController.java | 23 ++++++++++++++++-- .../Task/C2C/User/Service/UserService.java | 8 +++++++ .../C2C/User/responseDto/userInfoDto.java | 15 ++++++++++++ 7 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/User/responseDto/userInfoDto.java diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index b7e4c36..1ed328b 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -116,6 +116,30 @@ public ResponseEntity deleteItem(@PathVariable("itemNo") Long itemNo){ } } + @PostMapping("/userInfo/sellItems") + public ResponseEntity sellItems(HttpServletRequest request) { + String accessToken = jwtTokenUtil.resolveAccessToken(request); + String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); + List itemDtos = itemService.userSellerItem(userId); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message,HttpStatus.OK); + } + @PostMapping("/userInfo/buyItems") + public ResponseEntity buyItems(HttpServletRequest request) { + String accessToken = jwtTokenUtil.resolveAccessToken(request); + String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); + List itemDtos = itemService.userBuyItem(userId); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message,HttpStatus.OK); + } + @PostMapping("/userInfo/soldItems") + public ResponseEntity soldItems(HttpServletRequest request) { + String accessToken = jwtTokenUtil.resolveAccessToken(request); + String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); + List itemDtos = itemService.userSoldItem(userId); + Message> message = Message.of(200, itemDtos); + return new ResponseEntity<>(message,HttpStatus.OK); + } } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java index 3a6ba8a..ba5a494 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java @@ -9,8 +9,8 @@ public interface ItemRepositoryCustom { List searchItem(String word,final int startPage, final int PageSize); List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize); Optional findItemWithCategory(Long itemId); - List findBySellerItem(Long userNo); - List findByBuyerItem(Long userNo); + List findBySellerItem(String userid); + List findByBuyerItem(String userid); - List findBySoldItem(Long userNo); + List findBySoldItem(String userid); } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index 1038aab..d025aae 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -42,17 +42,18 @@ public List searchItem(String word,final int startPage, final int PageSize } @Override - public List findBySellerItem(Long userNo) { - return select(item).from(user).join(user.sellItem,item).fetchJoin().where(user.no.eq(userNo),item.type.eq(Item.State.sale)).fetch(); + public List findBySellerItem(String userid) { + return select(item).from(user).join(user.sellItem,item).fetchJoin().where(user.id.eq(userid),item.type.eq(Item.State.sale)).fetch(); } @Override - public List findBySoldItem(Long userNo) { - return select(item).from(user).join(user.sellItem,item).fetchJoin().where(user.no.eq(userNo),item.type.eq(Item.State.sold)).fetch(); + public List findBySoldItem(String userid) { + return select(item).from(user).join(user.sellItem,item).fetchJoin().where(user.id.eq(userid),item.type.eq(Item.State.sold)).fetch(); } @Override - public List findByBuyerItem(Long userNo) { - return select(item).from(user).join(user.buyItem, item).fetchJoin().where(user.no.eq(userNo)).fetch(); + public List findByBuyerItem(String userid) { + return select(item).from(user).join(user.buyItem, item).fetchJoin().where(user.id.eq(userid)).fetch(); } + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 63ab65d..8242063 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -82,14 +82,14 @@ private ItemDto getItemDto(Item item) { public List AllItem(){ return itemRepository.findAll(); } - public List userBuyItem(Long userNo){ - return itemRepository.findByBuyerItem(userNo); + public List userBuyItem(String userId){ + return itemRepository.findByBuyerItem(userId).stream().map(this::getItemDto).toList(); } - public List userSellerItem(Long userNo){ - return itemRepository.findBySellerItem(userNo); + public List userSellerItem(String userNo){ + return itemRepository.findBySellerItem(userNo).stream().map(this::getItemDto).toList(); } - public List userSoldItem(Long userNo){ - return itemRepository.findBySoldItem(userNo); + public List userSoldItem(String userNo){ + return itemRepository.findBySoldItem(userNo).stream().map(this::getItemDto).toList(); } diff --git a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java index 9530219..0a2191d 100644 --- a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java +++ b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java @@ -3,6 +3,7 @@ import Graduated.Task.C2C.User.Service.UserService; import Graduated.Task.C2C.User.requestDto.loginDto; import Graduated.Task.C2C.User.responseDto.TokenDto; +import Graduated.Task.C2C.User.responseDto.userInfoDto; import Graduated.Task.C2C.core.JwtTokenUtil; import Graduated.Task.C2C.core.Message; import Graduated.Task.C2C.core.ErrorMessage; @@ -27,15 +28,33 @@ public ResponseEntity login(loginDto loginDto) { Message message = Message.of(200, tokenDto); return new ResponseEntity<>(message,HttpStatus.OK); } catch (Exception e) { - ErrorMessage errorMessage = ErrorMessage.of(401, "아이디와 비밀번호를 확인해 주십시오"); + ErrorMessage errorMessage = ErrorMessage.of(404, "아이디와 비밀번호를 확인해 주십시오"); return new ResponseEntity<>(errorMessage, HttpStatus.NOT_FOUND); } } @PostMapping("/logout") - private ResponseEntity logout(HttpServletRequest request){ + public ResponseEntity logout(HttpServletRequest request){ String accessToken = jwtTokenUtil.resolveAccessToken(request); userService.logout(accessToken); Message message = Message.of(200,"성공적으로 로그아웃 하였습니다."); return new ResponseEntity<>(message,HttpStatus.OK); } + + @PostMapping("/userInfo") + public ResponseEntity userInfo(HttpServletRequest request) { + String accessToken = jwtTokenUtil.resolveAccessToken(request); + try{ + userInfoDto userinfo = userService.userinfo(accessToken); + Message message = Message.of(200,userinfo); + return new ResponseEntity<>(message,HttpStatus.OK); + } + catch (NullPointerException e){ + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); + return new ResponseEntity<>(errorMessage, HttpStatus.NOT_FOUND); + } + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); + } + } } diff --git a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java index a06a1e5..4e89637 100644 --- a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java +++ b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java @@ -2,6 +2,7 @@ import Graduated.Task.C2C.User.Entity.User; import Graduated.Task.C2C.User.Repository.UserRepository; +import Graduated.Task.C2C.User.responseDto.userInfoDto; import Graduated.Task.C2C.core.JwtTokenUtil; import Graduated.Task.C2C.core.RedisConfig; import lombok.RequiredArgsConstructor; @@ -35,4 +36,11 @@ public void logout(String AccessToken){ String subject = jwtTokenUtil.getclaims(AccessToken).getSubject(); redisConfig.redisTemplate().delete(subject); } + + public userInfoDto userinfo(String accessToken){ + String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); + User user = userRepository.findByUserId(userId).orElseThrow(() -> new NullPointerException("잘못된 사용자 입니다.")); + return new userInfoDto(user.getNo(),user.getName(),user.getId(),user.getCreatedDate()); + } + } diff --git a/src/main/java/Graduated/Task/C2C/User/responseDto/userInfoDto.java b/src/main/java/Graduated/Task/C2C/User/responseDto/userInfoDto.java new file mode 100644 index 0000000..cd25b35 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/User/responseDto/userInfoDto.java @@ -0,0 +1,15 @@ +package Graduated.Task.C2C.User.responseDto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +public class userInfoDto { + private Long userId; + private String username; + private String id; + private LocalDateTime joinedDate; +} From 43797a2e263eaa2044a524ee872ab1d456236d0f Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Tue, 15 Oct 2024 20:58:48 +0900 Subject: [PATCH 18/28] =?UTF-8?q?=EB=A9=94=EC=9D=B8=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Category/Dto/categoryDto.java | 11 ++++++ .../C2C/Category/Entity/categoryPrice.java | 1 - .../C2C/Category/Service/CategoryService.java | 18 +++++---- .../C2C/Item/Controller/itemController.java | 1 - .../Graduated/Task/C2C/Item/Entity/Item.java | 4 +- .../Item/Repository/ItemRepositoryCustom.java | 3 +- .../Item/Repository/ItemRepositoryImpl.java | 9 ++++- .../Task/C2C/Item/Service/ItemService.java | 11 ++++-- .../Task/C2C/User/Service/UserService.java | 1 - .../Graduated/Task/C2C/core/JwtTokenUtil.java | 14 +------ .../java/Graduated/Task/C2C/main/MainDto.java | 16 ++++++++ .../Task/C2C/main/mainController.java | 39 +++++++++++++++++++ 12 files changed, 99 insertions(+), 29 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/Category/Dto/categoryDto.java create mode 100644 src/main/java/Graduated/Task/C2C/main/MainDto.java create mode 100644 src/main/java/Graduated/Task/C2C/main/mainController.java diff --git a/src/main/java/Graduated/Task/C2C/Category/Dto/categoryDto.java b/src/main/java/Graduated/Task/C2C/Category/Dto/categoryDto.java new file mode 100644 index 0000000..1b70b58 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Category/Dto/categoryDto.java @@ -0,0 +1,11 @@ +package Graduated.Task.C2C.Category.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class categoryDto { + private Long categoryId; + private String categoryName; +} diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java index 7899e2d..6e8fa67 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java @@ -15,7 +15,6 @@ public class categoryPrice { private int status; private int maxPrice; private int minPrice; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="categoryNo") private Category category; diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 1c7e996..274fa22 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -1,15 +1,11 @@ package Graduated.Task.C2C.Category.Service; +import Graduated.Task.C2C.Category.Dto.categoryDto; +import Graduated.Task.C2C.Category.Entity.Category; import Graduated.Task.C2C.Category.Repository.CategoryRepository; -import Graduated.Task.C2C.Item.Dto.ItemDto; -import Graduated.Task.C2C.Item.Entity.Item; -import Graduated.Task.C2C.Item.Service.ItemService; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -17,6 +13,14 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class CategoryService { - private final ItemService itemService; + private final CategoryRepository categoryRepository; + + public List findCategory(){ + return categoryRepository.findAll().stream().map(this::getCategoryDto).toList(); + } + + private categoryDto getCategoryDto(Category category) { + return new categoryDto(category.getNo(), category.getName()); + } } diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index 1ed328b..0968508 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -141,5 +141,4 @@ public ResponseEntity soldItems(HttpServletRequest request) { Message> message = Message.of(200, itemDtos); return new ResponseEntity<>(message,HttpStatus.OK); } - } diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index 1a78fb2..bba1751 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -59,7 +59,9 @@ public Item(String name, int price, User seller, Category category,int itemState seller.getSellItem().add(this); category.getItem().add(this); } - + public void plusView(){ + this.viewCount+=1; + } public void changeItem(String name, int price, Boolean priceSimilar, int itemState, Category category) { this.name = name; this.image=""; diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java index ba5a494..ae68af1 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryCustom.java @@ -11,6 +11,7 @@ public interface ItemRepositoryCustom { Optional findItemWithCategory(Long itemId); List findBySellerItem(String userid); List findByBuyerItem(String userid); - + List findPopularItem(); + List findRecentItem(); List findBySoldItem(String userid); } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index d025aae..7a42f11 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -38,8 +38,15 @@ public List searchItem(String word,final int startPage, final int PageSize if(word!=null){ booleanBuilder.and(item.name.like("%" + word + "%")); } - return selectFrom(item).where(booleanBuilder,item.type.eq(Item.State.sale)).fetch(); + return selectFrom(item).where(booleanBuilder,item.type.eq(Item.State.sale)).offset(startPage).limit(PageSize).fetch(); } + public List findPopularItem(){ + return selectFrom(item).orderBy(item.viewCount.desc()).limit(4).fetch(); + } + public List findRecentItem(){ + return selectFrom(item).orderBy(item.createdDate.asc()).limit(4).fetch(); + } + @Override public List findBySellerItem(String userid) { diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 8242063..b5c3e5e 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -63,21 +63,26 @@ public List searchItem(String word,final int startPage, final int PageS List searchItem = itemRepository.searchItem(word,startPage, PageSize); return searchItem.stream().map(this::getItemDto).toList(); } + @Transactional public ItemDetailDto itemInformation(Long itemId){ Item item = itemRepository.findItemWithCategory(itemId).orElseThrow(() -> new NullPointerException("존재하지 않는 아이템입니다")); + item.plusView(); int state = item.getItemState(); categoryPrice categoryPrice = categoryRepository.findCategoryPrice(item.getCategory().getNo(), state).orElseThrow(() -> new NoSuchElementException("잘못된 접근입니다.")); int maxPrice = categoryPrice.getMaxPrice(); int minPrice = categoryPrice.getMinPrice(); String name = item.getCategory().getName(); return new ItemDetailDto(item.getNo(),item.getName(),item.getPrice(),name,minPrice,maxPrice,item.getItemState()); - - } private ItemDto getItemDto(Item item) { return new ItemDto(item.getNo(),item.getName(),item.getPrice(),item.getPriceSimilar(),item.getCreatedDate()); } - + public List findPopularItem(){ + return itemRepository.findPopularItem().stream().map(this::getItemDto).toList(); + } + public List findRecentItem(){ + return itemRepository.findPopularItem().stream().map(this::getItemDto).toList(); + } public List AllItem(){ return itemRepository.findAll(); diff --git a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java index 4e89637..898e63d 100644 --- a/src/main/java/Graduated/Task/C2C/User/Service/UserService.java +++ b/src/main/java/Graduated/Task/C2C/User/Service/UserService.java @@ -42,5 +42,4 @@ public userInfoDto userinfo(String accessToken){ User user = userRepository.findByUserId(userId).orElseThrow(() -> new NullPointerException("잘못된 사용자 입니다.")); return new userInfoDto(user.getNo(),user.getName(),user.getId(),user.getCreatedDate()); } - } diff --git a/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java b/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java index 003b306..3492e9a 100644 --- a/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java +++ b/src/main/java/Graduated/Task/C2C/core/JwtTokenUtil.java @@ -13,8 +13,7 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; -import org.zeroturnaround.exec.ProcessExecutor; -import org.zeroturnaround.exec.stream.LogOutputStream; + import java.io.BufferedReader; import java.io.IOException; @@ -99,15 +98,4 @@ public UsernamePasswordAuthenticationToken getAuthentication(String token) { public void setHeaderAccessToken(HttpServletResponse response, String accessToken) { response.setHeader("authorization", "Bearer " + accessToken); } - - public void test() throws IOException, InterruptedException, TimeoutException { - new ProcessExecutor().command("python", "test.py") - .redirectOutput(new LogOutputStream() { - @Override - protected void processLine(String line) { - System.out.println(line); - } - }).execute(); - - } } diff --git a/src/main/java/Graduated/Task/C2C/main/MainDto.java b/src/main/java/Graduated/Task/C2C/main/MainDto.java new file mode 100644 index 0000000..1a27594 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/main/MainDto.java @@ -0,0 +1,16 @@ +package Graduated.Task.C2C.main; + +import Graduated.Task.C2C.Category.Dto.categoryDto; +import Graduated.Task.C2C.Item.Dto.ItemDto; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class MainDto { + private List categories; + private List popularItems; + private List recentItems; +} diff --git a/src/main/java/Graduated/Task/C2C/main/mainController.java b/src/main/java/Graduated/Task/C2C/main/mainController.java new file mode 100644 index 0000000..aac9be6 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/main/mainController.java @@ -0,0 +1,39 @@ +package Graduated.Task.C2C.main; + +import Graduated.Task.C2C.Category.Dto.categoryDto; +import Graduated.Task.C2C.Category.Service.CategoryService; +import Graduated.Task.C2C.Item.Dto.ItemDto; +import Graduated.Task.C2C.Item.Service.ItemService; +import Graduated.Task.C2C.core.ErrorMessage; +import Graduated.Task.C2C.core.Message; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +public class mainController { + private final ItemService itemService; + private final CategoryService categoryService; + + @GetMapping("/main") + public ResponseEntity home(){ + try { + List popularItem = itemService.findPopularItem(); + List recentItem = itemService.findRecentItem(); + List category = categoryService.findCategory(); + MainDto mainDto = new MainDto(category, popularItem, recentItem); + Message message = Message.of(200, mainDto); + return new ResponseEntity<>(message, HttpStatus.OK); + } + catch (Exception e){ + ErrorMessage errorMessage = ErrorMessage.of(500, "다시 시도해주십시오"); + return new ResponseEntity<>(errorMessage,HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +} From 0218c956ebd968e5175668039b8107c19e0bcc87 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Wed, 30 Oct 2024 20:08:52 +0900 Subject: [PATCH 19/28] =?UTF-8?q?=EC=B5=9C=EC=A2=85=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Category/Entity/Category.java | 14 ++ .../C2C/Category/Entity/categoryPrice.java | 1 + .../Repository/CategoryRepository.java | 15 +- .../Repository/CategoryRepositoryImpl.java | 1 + .../C2C/Item/Controller/itemController.java | 14 +- .../Graduated/Task/C2C/Item/Dto/ItemDto.java | 1 - .../Graduated/Task/C2C/Item/Entity/Item.java | 4 + .../Item/Repository/ItemRepositoryImpl.java | 3 +- .../Task/C2C/Item/Service/ItemService.java | 21 ++- .../C2C/User/Controller/UserController.java | 6 +- .../Graduated/Task/C2C/User/Entity/User.java | 6 +- .../Graduated/Task/C2C/core/BaseEntity.java | 2 + src/main/resources/application.yml | 2 +- .../Task/C2C/C2CApplicationTests.java | 20 ++- .../java/Graduated/Task/C2C/itemTest.java | 133 ++++++++++++++++++ .../java/Graduated/Task/C2C/user_Test.java | 52 +++++++ 16 files changed, 272 insertions(+), 23 deletions(-) create mode 100644 src/test/java/Graduated/Task/C2C/itemTest.java create mode 100644 src/test/java/Graduated/Task/C2C/user_Test.java diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java index fa35f9a..f360686 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/Category.java @@ -20,10 +20,24 @@ public class Category extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="categoryNo") private Long No; + @OneToMany(mappedBy = "category") private List item = new ArrayList<>(); + private String name; @OneToMany(mappedBy = "category") private List categoryPrices = new ArrayList<>(); + + private int itemCount; + + + public void plusCount(){ + this.itemCount++; + } + + public Category(String name, int itemCount) { + this.name = name; + this.itemCount = itemCount; + } } diff --git a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java index 6e8fa67..bad1762 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java +++ b/src/main/java/Graduated/Task/C2C/Category/Entity/categoryPrice.java @@ -15,6 +15,7 @@ public class categoryPrice { private int status; private int maxPrice; private int minPrice; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="categoryNo") private Category category; diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java index b4bdb17..f0b1d66 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepository.java @@ -2,9 +2,22 @@ import Graduated.Task.C2C.Category.Entity.Category; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; public interface CategoryRepository extends JpaRepository,CategoryRepositoryCustom { -} + @Transactional + @Modifying + @Query(value = "INSERT INTO category_price (max_price, min_price, status, category_no, id)" + + "VALUES " + + " (879097, 586064, 5, 1, 11)," + + " (814445, 542963, 4, 1, 12)," + + " (765314, 510209, 3, 1, 13)," + + " (760524, 507016, 2, 1, 14)," + + " (584241, 389494, 1, 1, 15)", nativeQuery = true) + int findAllPost(); +} \ No newline at end of file diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java index e57c241..0e07609 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java @@ -32,4 +32,5 @@ public Optional findCategoryPrice(Long categoryNo,int state){ .fetchOne()); } + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index 0968508..a9cff20 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -23,17 +23,14 @@ public class itemController { private final ItemService itemService; private final JwtTokenUtil jwtTokenUtil; - @GetMapping(value = {"/api/{categoryNo}/{page}","/api/{categoryNo}"}) - public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") Integer page ){ - if(page==null) { - page = 1; - } + @GetMapping(value = {"/api/{categoryNo}/{page}"}) + public ResponseEntity CategoryItem(@PathVariable("categoryNo") Long categoryNo, @PathVariable("page") int page) { List itemDtos = itemService.viewCategoryItem(categoryNo, page, 10); Message> message = Message.of(200, itemDtos); return new ResponseEntity<>(message, HttpStatus.OK); } - @GetMapping(value = {"/search/{item}/{page}","/search/{item}"}) + @GetMapping(value = {"/search/{item}/{page}"}) public ResponseEntity SearchItem(@PathVariable("item") String word,@PathVariable("page") Integer page){ if(page==null) { page = 1; @@ -63,7 +60,8 @@ public ResponseEntity itemDetail(@PathVariable("ItemNo") Long itemNo){ } } @PostMapping("/item/create") - public ResponseEntity createItem(joinItemDto joinItemDto, HttpServletRequest request){ + public ResponseEntity createItem(@RequestBody joinItemDto joinItemDto, HttpServletRequest request){ + System.out.println(joinItemDto); String accessToken = jwtTokenUtil.resolveAccessToken(request); String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); try{ @@ -82,7 +80,7 @@ public ResponseEntity createItem(joinItemDto joinItemDto, HttpServletRequest } } @PatchMapping("/item/patch/{itemNo}") - public ResponseEntity changeItem(@PathVariable("itemNo") Long itemNo, joinItemDto joinItemDto,HttpServletRequest request){ + public ResponseEntity changeItem(@PathVariable("itemNo") Long itemNo, @RequestBody joinItemDto joinItemDto,HttpServletRequest request){ try{ itemService.changeItem(itemNo, joinItemDto.getItemName(), joinItemDto.getPrice(), joinItemDto.getCategoryNo(), joinItemDto.getItemState(), joinItemDto.isPriceSimilar()); diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java index 828fb61..876b066 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java @@ -10,7 +10,6 @@ import java.time.LocalDateTime; @Data - public class ItemDto { private Long itemId; diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index bba1751..7b77ba2 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -9,10 +9,12 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) +@ToString public class Item extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -56,6 +58,8 @@ public Item(String name, int price, User seller, Category category,int itemState this.seller = seller; this.category = category; this.type = State.sale; + this.itemState = itemState; + this.priceSimilar=priceSimilar; seller.getSellItem().add(this); category.getItem().add(this); } diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index 7a42f11..4fc68d4 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -27,7 +27,8 @@ public ItemRepositoryImpl(EntityManager em) { } public List findCategoryWithItem(Long categoryNo,final int startPage, final int PageSize) { - return select(item).from(category).where(category.No.eq(categoryNo)).join(category.item,item).where(item.type.eq(Item.State.sale)).orderBy(item.createdDate.desc()).fetchJoin().offset(startPage) + System.out.println(startPage); + return select(item).from(item).where(item.category.No.eq(categoryNo)).where(item.type.eq(Item.State.sale)).orderBy(item.createdDate.desc()).offset(startPage) .limit(PageSize).fetch(); } public Optional findItemWithCategory(Long itemId){ diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index b5c3e5e..47637b7 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -12,9 +12,14 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.zeroturnaround.exec.ProcessExecutor; +import org.zeroturnaround.exec.ProcessResult; +import java.io.IOException; import java.util.List; import java.util.NoSuchElementException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; @Service @RequiredArgsConstructor @@ -26,11 +31,17 @@ public class ItemService { private final CategoryRepository categoryRepository; @Transactional - public Long addItem(String name, int price, String userId, Long categoryNo, int itemState, boolean priceSimilar) { + public Long addItem(String name, int price, String userId, Long categoryNo, int itemState, boolean priceSimilar) throws Exception { User user = userRepository.findByUserId(userId).orElseThrow(()->new NullPointerException("존재하지않는 사용자입니다")); Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); Item item = new Item(name,price,user,category,itemState,priceSimilar); itemRepository.save(item); + if (category.getItemCount()%20 ==0 ){ + String category_no = String.valueOf(category.getNo()); + Future python3 = new ProcessExecutor().command("python3", "path/to/Random_Forest_Model.py",category_no) + .redirectOutput(System.out) + .redirectError(System.out).start().getFuture(); + } return item.getNo(); } @Transactional @@ -56,11 +67,11 @@ public void changeItem(Long itemId,String name, int price, Long categoryNo,int i } public List viewCategoryItem(Long categoryNo, final int startPage, final int PageSize) { - List categoryItem = itemRepository.findCategoryWithItem(categoryNo, startPage, PageSize); + List categoryItem = itemRepository.findCategoryWithItem(categoryNo, startPage*10, PageSize); return categoryItem.stream().map(this::getItemDto).toList(); } public List searchItem(String word,final int startPage, final int PageSize){ - List searchItem = itemRepository.searchItem(word,startPage, PageSize); + List searchItem = itemRepository.searchItem(word,startPage*10, PageSize); return searchItem.stream().map(this::getItemDto).toList(); } @Transactional @@ -96,8 +107,4 @@ public List userSellerItem(String userNo){ public List userSoldItem(String userNo){ return itemRepository.findBySoldItem(userNo).stream().map(this::getItemDto).toList(); } - - - - } diff --git a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java index 0a2191d..24a8d24 100644 --- a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java +++ b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java @@ -12,6 +12,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -21,14 +22,15 @@ public class UserController { private final UserService userService; private final JwtTokenUtil jwtTokenUtil; @PostMapping("/login") - public ResponseEntity login(loginDto loginDto) { + public ResponseEntity login(@RequestBody loginDto loginDto) { try { + System.out.println(loginDto); String accessToken = userService.login(loginDto.getId(), loginDto.getPassword()); TokenDto tokenDto = new TokenDto(accessToken,"성공적으로 로그인 하였습니다."); Message message = Message.of(200, tokenDto); return new ResponseEntity<>(message,HttpStatus.OK); } catch (Exception e) { - ErrorMessage errorMessage = ErrorMessage.of(404, "아이디와 비밀번호를 확인해 주십시오"); + ErrorMessage errorMessage = ErrorMessage.of(404, e.getMessage()); return new ResponseEntity<>(errorMessage, HttpStatus.NOT_FOUND); } } diff --git a/src/main/java/Graduated/Task/C2C/User/Entity/User.java b/src/main/java/Graduated/Task/C2C/User/Entity/User.java index 6aec9a5..57f951f 100644 --- a/src/main/java/Graduated/Task/C2C/User/Entity/User.java +++ b/src/main/java/Graduated/Task/C2C/User/Entity/User.java @@ -37,5 +37,9 @@ public class User extends BaseEntity { @OneToMany(mappedBy = "buyer") List buyItem = new ArrayList<>(); - + public User(String id, String password, String name) { + this.id = id; + this.password = password; + this.name = name; + } } \ No newline at end of file diff --git a/src/main/java/Graduated/Task/C2C/core/BaseEntity.java b/src/main/java/Graduated/Task/C2C/core/BaseEntity.java index e889b17..3ddbb63 100644 --- a/src/main/java/Graduated/Task/C2C/core/BaseEntity.java +++ b/src/main/java/Graduated/Task/C2C/core/BaseEntity.java @@ -7,6 +7,7 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import java.time.LocalDateTime; @@ -14,6 +15,7 @@ @NoArgsConstructor @MappedSuperclass // 아래 필드를 컬럼으로 인식하게 함 @EntityListeners(AuditingEntityListener.class) +@EnableJpaAuditing public abstract class BaseEntity { @CreatedDate diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 21256bb..919f049 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -9,7 +9,7 @@ spring: driver-class-name: org.postgresql.Driver jpa: hibernate: - ddl-auto: create + ddl-auto: update properties: hibernate: default_batch_fetch_size: 1000 diff --git a/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java b/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java index 385e897..50ab3ce 100644 --- a/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java +++ b/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java @@ -1,13 +1,31 @@ package Graduated.Task.C2C; +import Graduated.Task.C2C.User.Entity.User; +import Graduated.Task.C2C.User.Repository.UserRepository; +import Graduated.Task.C2C.User.Service.UserService; +import jakarta.persistence.EntityManager; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class C2CApplicationTests { + @Autowired + UserService userService; + + @Autowired + UserRepository userRepository; + + @Autowired + EntityManager em; @Test - void contextLoads() { + void contextLoads() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + em.clear(); + String login = userService.login("1", "1"); + System.out.println(login); } } diff --git a/src/test/java/Graduated/Task/C2C/itemTest.java b/src/test/java/Graduated/Task/C2C/itemTest.java new file mode 100644 index 0000000..074dca6 --- /dev/null +++ b/src/test/java/Graduated/Task/C2C/itemTest.java @@ -0,0 +1,133 @@ +package Graduated.Task.C2C; + +import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Category.Repository.CategoryRepository; +import Graduated.Task.C2C.Category.Service.CategoryService; +import Graduated.Task.C2C.Item.Dto.ItemDetailDto; +import Graduated.Task.C2C.Item.Dto.ItemDto; +import Graduated.Task.C2C.Item.Service.ItemService; +import Graduated.Task.C2C.User.Entity.User; +import Graduated.Task.C2C.User.Repository.UserRepository; +import Graduated.Task.C2C.User.Service.UserService; +import Graduated.Task.C2C.User.responseDto.userInfoDto; +import jakarta.persistence.EntityManager; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +@SpringBootTest +class itemTest { + @Autowired + UserService userService; + + @Autowired + ItemService itemService; + + @Autowired + UserRepository userRepository; + @Autowired + CategoryService categoryService; + + @Autowired + CategoryRepository categoryRepository; + + @Autowired + EntityManager em; + + @Test + void itemAdd() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + em.clear(); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + System.out.println(l); + } + @Test + void deleteItem() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + itemService.deleteItem(l); + } + + @Test + void changeItem() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + itemService.changeItem(l,"2",4000, category.getNo(), 3,true); + } + + @Test + void categoryItem() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + List itemDtos = itemService.viewCategoryItem(l, 0, 10); + System.out.println(itemDtos); + } + @Test + void searchItem() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + List itemDtos = itemService.searchItem("1", 0, 10); + System.out.println(itemDtos); + } + + @Test + void popluarItem() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + List itemDetailDto = itemService.findPopularItem(); + System.out.println(itemDetailDto); + } + + @Test + void recentItem() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + categoryRepository.findAllPost(); + List itemDetailDto = itemService.findRecentItem(); + System.out.println(itemDetailDto); + } + @Test + void Iteminfo() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + Category category = new Category("test",0); + categoryRepository.save(category); + Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + em.clear(); + categoryRepository.findAllPost(); + ItemDetailDto itemDetailDto = itemService.itemInformation(l); + System.out.println(itemDetailDto); + } + + +} + diff --git a/src/test/java/Graduated/Task/C2C/user_Test.java b/src/test/java/Graduated/Task/C2C/user_Test.java new file mode 100644 index 0000000..e2df872 --- /dev/null +++ b/src/test/java/Graduated/Task/C2C/user_Test.java @@ -0,0 +1,52 @@ +package Graduated.Task.C2C; + +import Graduated.Task.C2C.User.Entity.User; +import Graduated.Task.C2C.User.Repository.UserRepository; +import Graduated.Task.C2C.User.Service.UserService; +import Graduated.Task.C2C.User.responseDto.userInfoDto; +import jakarta.persistence.EntityManager; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class user_Test { + @Autowired + UserService userService; + + @Autowired + UserRepository userRepository; + + @Autowired + EntityManager em; + + @Test + void login() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + em.clear(); + String login = userService.login("1", "1"); + } + @Test + void logout() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + em.clear(); + String login = userService.login("1", "1"); + em.clear(); + userService.logout(login); + } + + @Test + void userinfo() throws Exception { + User user = new User("1","1","1"); + userRepository.save(user); + em.clear(); + String login = userService.login("1", "1"); + em.clear(); + userInfoDto userinfo = userService.userinfo(login); + System.out.println(userinfo); + } + +} + From 07257fb74a53414fcaa8ab897afaa95dd530b037 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Wed, 30 Oct 2024 20:50:56 +0900 Subject: [PATCH 20/28] =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=B2=98=EB=A6=AC=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Item/Controller/itemController.java | 2 +- .../Graduated/Task/C2C/Item/Entity/Item.java | 4 ++-- .../Task/C2C/Item/Service/ItemService.java | 5 +++-- src/test/java/Graduated/Task/C2C/itemTest.java | 16 ++++++++-------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index a9cff20..88f6814 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -65,7 +65,7 @@ public ResponseEntity createItem(@RequestBody joinItemDto joinItemDto, HttpSe String accessToken = jwtTokenUtil.resolveAccessToken(request); String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); try{ - Long itemNo = itemService.addItem(joinItemDto.getItemName(), joinItemDto.getPrice(), userId, joinItemDto.getCategoryNo(), joinItemDto.getItemState(), + Long itemNo = itemService.addItem(joinItemDto.getItemName(), joinItemDto.getImages(), joinItemDto.getPrice(), userId, joinItemDto.getCategoryNo(), joinItemDto.getItemState(), joinItemDto.isPriceSimilar()); Message message = Message.of(201,new itemRequestDto(itemNo,"상품이 성공적으로 수정되었습니다.")); return new ResponseEntity<>(message,HttpStatus.CREATED); diff --git a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java index 7b77ba2..1f85e32 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java +++ b/src/main/java/Graduated/Task/C2C/Item/Entity/Item.java @@ -51,9 +51,9 @@ public class Item extends BaseEntity { @JsonIgnore//개발 과정에서만 사용 , 추후 DTO 변환과정에서는 삭제예정 private Category category; - public Item(String name, int price, User seller, Category category,int itemState,boolean priceSimilar) { + public Item(String name, String image,int price, User seller, Category category,int itemState,boolean priceSimilar) { this.name = name; - this.image=""; + this.image=image; this.price = price; this.seller = seller; this.category = category; diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 47637b7..66f5fe6 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -31,10 +31,10 @@ public class ItemService { private final CategoryRepository categoryRepository; @Transactional - public Long addItem(String name, int price, String userId, Long categoryNo, int itemState, boolean priceSimilar) throws Exception { + public Long addItem(String name, String image,int price, String userId, Long categoryNo, int itemState, boolean priceSimilar) throws Exception { User user = userRepository.findByUserId(userId).orElseThrow(()->new NullPointerException("존재하지않는 사용자입니다")); Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); - Item item = new Item(name,price,user,category,itemState,priceSimilar); + Item item = new Item(name,image,price,user,category,itemState,priceSimilar); itemRepository.save(item); if (category.getItemCount()%20 ==0 ){ String category_no = String.valueOf(category.getNo()); @@ -44,6 +44,7 @@ public Long addItem(String name, int price, String userId, Long categoryNo, int } return item.getNo(); } + @Transactional public void deleteItem(Long itemId){ Item item = itemRepository.findById(itemId).orElseThrow(() -> new NullPointerException("존재하지않는 아이템입니다.")); diff --git a/src/test/java/Graduated/Task/C2C/itemTest.java b/src/test/java/Graduated/Task/C2C/itemTest.java index 074dca6..dd77ff6 100644 --- a/src/test/java/Graduated/Task/C2C/itemTest.java +++ b/src/test/java/Graduated/Task/C2C/itemTest.java @@ -43,7 +43,7 @@ void itemAdd() throws Exception { Category category = new Category("test",0); categoryRepository.save(category); em.clear(); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); System.out.println(l); } @Test @@ -52,7 +52,7 @@ void deleteItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); itemService.deleteItem(l); } @@ -63,7 +63,7 @@ void changeItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); itemService.changeItem(l,"2",4000, category.getNo(), 3,true); } @@ -74,7 +74,7 @@ void categoryItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); List itemDtos = itemService.viewCategoryItem(l, 0, 10); System.out.println(itemDtos); @@ -85,7 +85,7 @@ void searchItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); List itemDtos = itemService.searchItem("1", 0, 10); System.out.println(itemDtos); @@ -97,7 +97,7 @@ void popluarItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); List itemDetailDto = itemService.findPopularItem(); System.out.println(itemDetailDto); @@ -109,7 +109,7 @@ void recentItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); categoryRepository.findAllPost(); List itemDetailDto = itemService.findRecentItem(); @@ -121,7 +121,7 @@ void Iteminfo() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", 3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); em.clear(); categoryRepository.findAllPost(); ItemDetailDto itemDetailDto = itemService.itemInformation(l); From a05a323c82cee4a74db89486b454babf228930af Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Wed, 30 Oct 2024 20:55:37 +0900 Subject: [PATCH 21/28] =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=B2=98=EB=A6=AC=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Graduated/Task/C2C/Item/Controller/itemController.java | 2 +- src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java | 5 +++-- src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java | 4 ++-- .../java/Graduated/Task/C2C/Item/Service/ItemService.java | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index 88f6814..3795b6f 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -67,7 +67,7 @@ public ResponseEntity createItem(@RequestBody joinItemDto joinItemDto, HttpSe try{ Long itemNo = itemService.addItem(joinItemDto.getItemName(), joinItemDto.getImages(), joinItemDto.getPrice(), userId, joinItemDto.getCategoryNo(), joinItemDto.getItemState(), joinItemDto.isPriceSimilar()); - Message message = Message.of(201,new itemRequestDto(itemNo,"상품이 성공적으로 수정되었습니다.")); + Message message = Message.of(201,new itemRequestDto(itemNo,"상품이 성공적으로 등록되었습니다.")); return new ResponseEntity<>(message,HttpStatus.CREATED); } catch (NullPointerException e) { diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java index 61cb84e..52a9a8b 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java @@ -13,9 +13,9 @@ public class ItemDetailDto { private int maxPrice; private int itemState; - public ItemDetailDto(Long itemId, String itemName, int price, String category, int minPrice, int maxPrice, int itemState) { + public ItemDetailDto(Long itemId, String image,String itemName, int price, String category, int minPrice, int maxPrice, int itemState) { this.itemId = itemId; - this.images = ""; + this.images = image; this.itemName = itemName; this.price = price; this.category = category; @@ -24,4 +24,5 @@ public ItemDetailDto(Long itemId, String itemName, int price, String category, i this.itemState = itemState; } + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java index 876b066..0409fb8 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java @@ -23,9 +23,9 @@ public class ItemDto { private LocalDateTime time; - public ItemDto(Long itemId, String itemName, int price, boolean priceSimilar, LocalDateTime time) { + public ItemDto(Long itemId, String image,String itemName, int price, boolean priceSimilar, LocalDateTime time) { this.itemId = itemId; - this.image=""; + this.image=image; this.itemName = itemName; this.price = price; this.priceSimilar = priceSimilar; diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 66f5fe6..7e2702c 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -84,10 +84,10 @@ public ItemDetailDto itemInformation(Long itemId){ int maxPrice = categoryPrice.getMaxPrice(); int minPrice = categoryPrice.getMinPrice(); String name = item.getCategory().getName(); - return new ItemDetailDto(item.getNo(),item.getName(),item.getPrice(),name,minPrice,maxPrice,item.getItemState()); + return new ItemDetailDto(item.getNo(),item.getImage(),item.getName(),item.getPrice(),name,minPrice,maxPrice,item.getItemState()); } private ItemDto getItemDto(Item item) { - return new ItemDto(item.getNo(),item.getName(),item.getPrice(),item.getPriceSimilar(),item.getCreatedDate()); + return new ItemDto(item.getNo(),item.getImage(),item.getName(),item.getPrice(),item.getPriceSimilar(),item.getCreatedDate()); } public List findPopularItem(){ return itemRepository.findPopularItem().stream().map(this::getItemDto).toList(); From 1b6464078c9068d48b2da247c391537c631610e6 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Thu, 31 Oct 2024 18:16:57 +0900 Subject: [PATCH 22/28] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Graduated/Task/C2C/Item/Controller/itemController.java | 1 + .../Graduated/Task/C2C/User/Controller/UserController.java | 2 ++ src/test/java/Graduated/Task/C2C/user_Test.java | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index 3795b6f..dece010 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -19,6 +19,7 @@ import java.util.NoSuchElementException; @RestController +@CrossOrigin(originPatterns = "http://localhost:3000") @RequiredArgsConstructor public class itemController { private final ItemService itemService; diff --git a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java index 24a8d24..9d0fc41 100644 --- a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java +++ b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java @@ -11,12 +11,14 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController +@CrossOrigin(originPatterns = "http://localhost:3000") @RequiredArgsConstructor public class UserController { private final UserService userService; diff --git a/src/test/java/Graduated/Task/C2C/user_Test.java b/src/test/java/Graduated/Task/C2C/user_Test.java index e2df872..fc09b08 100644 --- a/src/test/java/Graduated/Task/C2C/user_Test.java +++ b/src/test/java/Graduated/Task/C2C/user_Test.java @@ -22,10 +22,10 @@ class user_Test { @Test void login() throws Exception { - User user = new User("1","1","1"); + User user = new User("3","1","1"); userRepository.save(user); em.clear(); - String login = userService.login("1", "1"); + String login = userService.login("3", "1"); } @Test void logout() throws Exception { From e92ce88d7ddea0bb3ef4ab141432c993bfa091c5 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Thu, 31 Oct 2024 18:38:50 +0900 Subject: [PATCH 23/28] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Item/Controller/itemController.java | 1 - .../Task/C2C/User/Controller/UserController.java | 1 - .../java/Graduated/Task/C2C/core/WebConfig.java | 16 ++++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/core/WebConfig.java diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index dece010..3795b6f 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -19,7 +19,6 @@ import java.util.NoSuchElementException; @RestController -@CrossOrigin(originPatterns = "http://localhost:3000") @RequiredArgsConstructor public class itemController { private final ItemService itemService; diff --git a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java index 9d0fc41..a5b6aa2 100644 --- a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java +++ b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java @@ -18,7 +18,6 @@ @RestController -@CrossOrigin(originPatterns = "http://localhost:3000") @RequiredArgsConstructor public class UserController { private final UserService userService; diff --git a/src/main/java/Graduated/Task/C2C/core/WebConfig.java b/src/main/java/Graduated/Task/C2C/core/WebConfig.java new file mode 100644 index 0000000..147af4b --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/core/WebConfig.java @@ -0,0 +1,16 @@ +package Graduated.Task.C2C.core; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") // 허용할 출처 : 특정 도메인만 받을 수 있음 + .allowedMethods("GET", "POST") // 허용할 HTTP method + .allowCredentials(true); // 쿠키 인증 요청 허용 + } +} \ No newline at end of file From 7979cee3367d0d6e7ba795d4fce10083b67c76c2 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Thu, 31 Oct 2024 18:41:48 +0900 Subject: [PATCH 24/28] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Graduated/Task/C2C/core/WebConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/Graduated/Task/C2C/core/WebConfig.java b/src/main/java/Graduated/Task/C2C/core/WebConfig.java index 147af4b..519177b 100644 --- a/src/main/java/Graduated/Task/C2C/core/WebConfig.java +++ b/src/main/java/Graduated/Task/C2C/core/WebConfig.java @@ -2,9 +2,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { From f57d4ef02d2ceb923f50fd7e684a827a5225ca33 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Thu, 31 Oct 2024 19:19:37 +0900 Subject: [PATCH 25/28] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/core/SecurityConfig.java | 43 +++++++++++++------ .../Graduated/Task/C2C/core/WebConfig.java | 18 -------- 2 files changed, 29 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/Graduated/Task/C2C/core/WebConfig.java diff --git a/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java b/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java index 78cb859..e7242cd 100644 --- a/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java +++ b/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java @@ -14,6 +14,11 @@ import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import java.util.List; @EnableWebSecurity @Configuration @@ -26,22 +31,32 @@ public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http - .httpBasic(AbstractHttpConfigurer::disable) // ui로 들어오는것 - .csrf(AbstractHttpConfigurer::disable) // 크로스 사이트 - .cors(Customizer.withDefaults()) //크로스사이트 + .httpBasic(AbstractHttpConfigurer::disable) // UI 인증 비활성화 + .csrf(AbstractHttpConfigurer::disable) // CSRF 보호 비활성화 + .cors(Customizer.withDefaults()) // CORS 설정 활성화 .authorizeHttpRequests(requests -> requests - .requestMatchers(HttpMethod.POST).permitAll() - .requestMatchers(HttpMethod.GET).permitAll() - .requestMatchers(HttpMethod.POST).permitAll() - .requestMatchers(HttpMethod.DELETE).permitAll() - .requestMatchers(HttpMethod.PATCH).permitAll() + .requestMatchers(HttpMethod.POST).permitAll() // POST 허용 + .requestMatchers(HttpMethod.GET).permitAll() // GET 허용 + .requestMatchers(HttpMethod.DELETE).permitAll() // DELETE 허용 + .requestMatchers(HttpMethod.PATCH).permitAll() // PATCH 허용 + ) + .sessionManagement(sessionManagement -> + sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) // Stateless 세션 ) - .sessionManagement((sessionManagement) -> - sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) - ) - .addFilterBefore(new JwtFilter(jwtTokenUtil,redisConfig), UsernamePasswordAuthenticationFilter.class); -// .ExceptionHandlingDsl((exceptionConfig)-> -// exceptionConfig.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))); + .addFilterBefore(new JwtFilter(jwtTokenUtil, redisConfig), + UsernamePasswordAuthenticationFilter.class); // JWT 필터 추가 + return http.build(); } + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOrigins(List.of("http://localhost:3000")); // 허용할 도메인 설정 + configuration.setAllowedMethods(List.of("GET", "POST", "DELETE", "PATCH")); // 허용할 HTTP 메서드 설정 + configuration.setAllowedHeaders(List.of("*")); // 모든 헤더 허용 + configuration.setAllowCredentials(true); // 인증 정보를 포함한 요청 허용 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } } \ No newline at end of file diff --git a/src/main/java/Graduated/Task/C2C/core/WebConfig.java b/src/main/java/Graduated/Task/C2C/core/WebConfig.java deleted file mode 100644 index 519177b..0000000 --- a/src/main/java/Graduated/Task/C2C/core/WebConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package Graduated.Task.C2C.core; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -@EnableWebMvc -public class WebConfig implements WebMvcConfigurer { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedOrigins("*") // 허용할 출처 : 특정 도메인만 받을 수 있음 - .allowedMethods("GET", "POST") // 허용할 HTTP method - .allowCredentials(true); // 쿠키 인증 요청 허용 - } -} \ No newline at end of file From 76afb7ee303f5c95e4768ffe04cb8f0b2b2bd145 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Thu, 31 Oct 2024 20:05:26 +0900 Subject: [PATCH 26/28] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Item/Service/ItemService.java | 2 +- .../Task/C2C/core/SecurityConfig.java | 38 +++++++------------ .../Graduated/Task/C2C/core/WebConfig.java | 25 ++++++++++++ .../java/Graduated/Task/C2C/itemTest.java | 15 +++----- 4 files changed, 46 insertions(+), 34 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/core/WebConfig.java diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 7e2702c..1c6aedb 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -38,7 +38,7 @@ public Long addItem(String name, String image,int price, String userId, Long cat itemRepository.save(item); if (category.getItemCount()%20 ==0 ){ String category_no = String.valueOf(category.getNo()); - Future python3 = new ProcessExecutor().command("python3", "path/to/Random_Forest_Model.py",category_no) + Future python3 = new ProcessExecutor().command("python3", "home/ubuntu/Random_Forest_Model.py",category_no) .redirectOutput(System.out) .redirectError(System.out).start().getFuture(); } diff --git a/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java b/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java index e7242cd..01b6069 100644 --- a/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java +++ b/src/main/java/Graduated/Task/C2C/core/SecurityConfig.java @@ -18,7 +18,7 @@ import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import java.util.List; +import java.util.Arrays; @EnableWebSecurity @Configuration @@ -31,32 +31,22 @@ public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http - .httpBasic(AbstractHttpConfigurer::disable) // UI 인증 비활성화 - .csrf(AbstractHttpConfigurer::disable) // CSRF 보호 비활성화 - .cors(Customizer.withDefaults()) // CORS 설정 활성화 + .httpBasic(AbstractHttpConfigurer::disable) // ui로 들어오는것 + .csrf(AbstractHttpConfigurer::disable) // 크로스 사이트 + .cors(Customizer.withDefaults()) //크로스사이트 .authorizeHttpRequests(requests -> requests - .requestMatchers(HttpMethod.POST).permitAll() // POST 허용 - .requestMatchers(HttpMethod.GET).permitAll() // GET 허용 - .requestMatchers(HttpMethod.DELETE).permitAll() // DELETE 허용 - .requestMatchers(HttpMethod.PATCH).permitAll() // PATCH 허용 + .requestMatchers(HttpMethod.POST).permitAll() + .requestMatchers(HttpMethod.GET).permitAll() + .requestMatchers(HttpMethod.POST).permitAll() + .requestMatchers(HttpMethod.DELETE).permitAll() + .requestMatchers(HttpMethod.PATCH).permitAll() ) - .sessionManagement(sessionManagement -> - sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) // Stateless 세션 + .sessionManagement((sessionManagement) -> + sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) ) - .addFilterBefore(new JwtFilter(jwtTokenUtil, redisConfig), - UsernamePasswordAuthenticationFilter.class); // JWT 필터 추가 - + .addFilterBefore(new JwtFilter(jwtTokenUtil,redisConfig), UsernamePasswordAuthenticationFilter.class); +// .ExceptionHandlingDsl((exceptionConfig)-> +// exceptionConfig.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))); return http.build(); } - @Bean - public CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); - configuration.setAllowedOrigins(List.of("http://localhost:3000")); // 허용할 도메인 설정 - configuration.setAllowedMethods(List.of("GET", "POST", "DELETE", "PATCH")); // 허용할 HTTP 메서드 설정 - configuration.setAllowedHeaders(List.of("*")); // 모든 헤더 허용 - configuration.setAllowCredentials(true); // 인증 정보를 포함한 요청 허용 - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } } \ No newline at end of file diff --git a/src/main/java/Graduated/Task/C2C/core/WebConfig.java b/src/main/java/Graduated/Task/C2C/core/WebConfig.java new file mode 100644 index 0000000..638cc59 --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/core/WebConfig.java @@ -0,0 +1,25 @@ +package Graduated.Task.C2C.core; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +@Configuration +public class WebConfig { + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = new CorsConfiguration(); + + config.setAllowCredentials(true); + config.addAllowedOriginPattern("*"); // 특정 도메인을 허용하려면 예: "https://example.com" + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } +} diff --git a/src/test/java/Graduated/Task/C2C/itemTest.java b/src/test/java/Graduated/Task/C2C/itemTest.java index dd77ff6..ad3a52c 100644 --- a/src/test/java/Graduated/Task/C2C/itemTest.java +++ b/src/test/java/Graduated/Task/C2C/itemTest.java @@ -14,8 +14,11 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.zeroturnaround.exec.ProcessExecutor; +import org.zeroturnaround.exec.ProcessResult; import java.util.List; +import java.util.concurrent.Future; @SpringBootTest class itemTest { @@ -117,15 +120,9 @@ void recentItem() throws Exception { } @Test void Iteminfo() throws Exception { - User user = new User("1","1","1"); - userRepository.save(user); - Category category = new Category("test",0); - categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); - em.clear(); - categoryRepository.findAllPost(); - ItemDetailDto itemDetailDto = itemService.itemInformation(l); - System.out.println(itemDetailDto); + Future python3 = new ProcessExecutor().command("python3", "/Users/ihajun/Desktop/Random_Forest_Model.py","3") + .redirectOutput(System.out) + .redirectError(System.out).start().getFuture(); } From 72e1b95de69c163763a052c985ae712c088d2b6d Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Fri, 1 Nov 2024 01:10:15 +0900 Subject: [PATCH 27/28] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/C2C/Item/Repository/ItemRepositoryImpl.java | 4 ++-- src/main/resources/application.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java index 4fc68d4..d83c08f 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Item/Repository/ItemRepositoryImpl.java @@ -42,10 +42,10 @@ public List searchItem(String word,final int startPage, final int PageSize return selectFrom(item).where(booleanBuilder,item.type.eq(Item.State.sale)).offset(startPage).limit(PageSize).fetch(); } public List findPopularItem(){ - return selectFrom(item).orderBy(item.viewCount.desc()).limit(4).fetch(); + return selectFrom(item).orderBy(item.viewCount.desc()).limit(6).fetch(); } public List findRecentItem(){ - return selectFrom(item).orderBy(item.createdDate.asc()).limit(4).fetch(); + return selectFrom(item).orderBy(item.createdDate.asc()).limit(6).fetch(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 919f049..813b975 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: datasource: url: jdbc:postgresql://localhost:5432/test username: 'root' - password: '3174' + password: '1234' driver-class-name: org.postgresql.Driver jpa: hibernate: From 8887039b70078df7f6583d31667a38ae61a00f31 Mon Sep 17 00:00:00 2001 From: developer-hajun Date: Fri, 1 Nov 2024 16:10:16 +0900 Subject: [PATCH 28/28] =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../C2C/Category/Dto/categoryPriceDto.java | 11 ++++++++ .../Task/C2C/Category/Dto/priceFindDto.java | 12 +++++++++ .../Repository/CategoryRepositoryCustom.java | 2 ++ .../Repository/CategoryRepositoryImpl.java | 10 ++++++- .../C2C/Category/Service/CategoryService.java | 7 +++++ .../Task/C2C/Category/categoryController.java | 16 ++++++++--- .../C2C/Item/Controller/itemController.java | 6 ++--- .../Task/C2C/Item/Dto/joinItemDto.java | 2 +- .../Task/C2C/Item/Service/ItemService.java | 9 ++++--- .../C2C/User/Controller/UserController.java | 1 + .../Task/C2C/C2CApplicationTests.java | 16 +++++------ .../java/Graduated/Task/C2C/itemTest.java | 27 ++++++++++--------- 12 files changed, 86 insertions(+), 33 deletions(-) create mode 100644 src/main/java/Graduated/Task/C2C/Category/Dto/categoryPriceDto.java create mode 100644 src/main/java/Graduated/Task/C2C/Category/Dto/priceFindDto.java diff --git a/src/main/java/Graduated/Task/C2C/Category/Dto/categoryPriceDto.java b/src/main/java/Graduated/Task/C2C/Category/Dto/categoryPriceDto.java new file mode 100644 index 0000000..0c0ed2d --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Category/Dto/categoryPriceDto.java @@ -0,0 +1,11 @@ +package Graduated.Task.C2C.Category.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class categoryPriceDto { + private int recommendedMinPrice; + private int recommendedMaxPrice; +} diff --git a/src/main/java/Graduated/Task/C2C/Category/Dto/priceFindDto.java b/src/main/java/Graduated/Task/C2C/Category/Dto/priceFindDto.java new file mode 100644 index 0000000..9f01caa --- /dev/null +++ b/src/main/java/Graduated/Task/C2C/Category/Dto/priceFindDto.java @@ -0,0 +1,12 @@ +package Graduated.Task.C2C.Category.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class priceFindDto { + + private String category; + private int itemState; +} diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java index 29707c4..db1ffbb 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryCustom.java @@ -9,4 +9,6 @@ public interface CategoryRepositoryCustom { Optional findCategoryPrice(Long categoryNo, int state); + Optional findByCategoryName(String categoryName); + Optional findCategoryPriceByName(String name,int state); } diff --git a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java index 0e07609..6354d8f 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java +++ b/src/main/java/Graduated/Task/C2C/Category/Repository/CategoryRepositoryImpl.java @@ -31,6 +31,14 @@ public Optional findCategoryPrice(Long categoryNo,int state){ .join(QcategoryPrice.categoryPrice.category).fetchJoin() .fetchOne()); } - + public Optional findCategoryPriceByName(String category,int state){ + return Optional.ofNullable(selectFrom(QcategoryPrice.categoryPrice) + .where(QcategoryPrice.categoryPrice.category.name.eq(category), QcategoryPrice.categoryPrice.status.eq(state)) + .join(QcategoryPrice.categoryPrice.category).fetchJoin() + .fetchOne()); + } + public Optional findByCategoryName(String categoryName){ + return Optional.ofNullable(selectFrom(category).where(category.name.eq(categoryName)).fetchOne()); + } } diff --git a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java index 274fa22..6159d13 100644 --- a/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java +++ b/src/main/java/Graduated/Task/C2C/Category/Service/CategoryService.java @@ -1,7 +1,9 @@ package Graduated.Task.C2C.Category.Service; import Graduated.Task.C2C.Category.Dto.categoryDto; +import Graduated.Task.C2C.Category.Dto.categoryPriceDto; import Graduated.Task.C2C.Category.Entity.Category; +import Graduated.Task.C2C.Category.Entity.categoryPrice; import Graduated.Task.C2C.Category.Repository.CategoryRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -23,4 +25,9 @@ public List findCategory(){ private categoryDto getCategoryDto(Category category) { return new categoryDto(category.getNo(), category.getName()); } + public categoryPriceDto findCategoryPrice(String name, int status){ + categoryPrice categoryPriceByName = categoryRepository.findCategoryPriceByName(name, status).orElseThrow(() -> new NullPointerException("존재하지 않는 카테고리입니다")); + return new categoryPriceDto(categoryPriceByName.getMinPrice(),categoryPriceByName.getMaxPrice()); + } + } diff --git a/src/main/java/Graduated/Task/C2C/Category/categoryController.java b/src/main/java/Graduated/Task/C2C/Category/categoryController.java index 5b8cc56..4045c09 100644 --- a/src/main/java/Graduated/Task/C2C/Category/categoryController.java +++ b/src/main/java/Graduated/Task/C2C/Category/categoryController.java @@ -1,5 +1,8 @@ package Graduated.Task.C2C.Category; +import Graduated.Task.C2C.Category.Dto.categoryPriceDto; +import Graduated.Task.C2C.Category.Dto.priceFindDto; +import Graduated.Task.C2C.Category.Service.CategoryService; import Graduated.Task.C2C.Item.Dto.ItemDto; import Graduated.Task.C2C.Item.Service.ItemService; import Graduated.Task.C2C.User.responseDto.TokenDto; @@ -7,9 +10,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -17,6 +18,15 @@ @RequiredArgsConstructor public class categoryController { + private final CategoryService categoryService; + @PostMapping("/recommended-price") + public ResponseEntity getCategoryPrice(@RequestBody priceFindDto priceFindDto){ + categoryPriceDto categoryPrice = categoryService.findCategoryPrice(priceFindDto.getCategory(), priceFindDto.getItemState()); + Message message = Message.of(200, categoryPrice); + return new ResponseEntity<>(message, HttpStatus.OK); + + } + } diff --git a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java index 3795b6f..1d37313 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java +++ b/src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java @@ -9,7 +9,6 @@ import Graduated.Task.C2C.core.JwtTokenUtil; import Graduated.Task.C2C.core.Message; import jakarta.servlet.http.HttpServletRequest; -import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -65,7 +64,7 @@ public ResponseEntity createItem(@RequestBody joinItemDto joinItemDto, HttpSe String accessToken = jwtTokenUtil.resolveAccessToken(request); String userId = jwtTokenUtil.getclaims(accessToken).getSubject(); try{ - Long itemNo = itemService.addItem(joinItemDto.getItemName(), joinItemDto.getImages(), joinItemDto.getPrice(), userId, joinItemDto.getCategoryNo(), joinItemDto.getItemState(), + Long itemNo = itemService.addItem(joinItemDto.getItemName(), joinItemDto.getImages(), joinItemDto.getPrice(), userId, joinItemDto.getCategory(), joinItemDto.getItemState(), joinItemDto.isPriceSimilar()); Message message = Message.of(201,new itemRequestDto(itemNo,"상품이 성공적으로 등록되었습니다.")); return new ResponseEntity<>(message,HttpStatus.CREATED); @@ -82,8 +81,9 @@ public ResponseEntity createItem(@RequestBody joinItemDto joinItemDto, HttpSe @PatchMapping("/item/patch/{itemNo}") public ResponseEntity changeItem(@PathVariable("itemNo") Long itemNo, @RequestBody joinItemDto joinItemDto,HttpServletRequest request){ try{ - itemService.changeItem(itemNo, joinItemDto.getItemName(), joinItemDto.getPrice(), joinItemDto.getCategoryNo(), joinItemDto.getItemState(), + itemService.changeItem(itemNo, joinItemDto.getItemName(), joinItemDto.getPrice(), joinItemDto.getCategory(), joinItemDto.getItemState(), joinItemDto.isPriceSimilar()); + Message message = Message.of(200,new itemRequestDto(itemNo,"상품이 성공적으로 수정되었습니다.")); return new ResponseEntity<>(message,HttpStatus.OK); } diff --git a/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java b/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java index a3824b2..321192a 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java +++ b/src/main/java/Graduated/Task/C2C/Item/Dto/joinItemDto.java @@ -11,7 +11,7 @@ public class joinItemDto { private String images; private String itemName; private int price; - private Long categoryNo; + private String category; private int itemState; private boolean priceSimilar; diff --git a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java index 1c6aedb..ec84506 100644 --- a/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java +++ b/src/main/java/Graduated/Task/C2C/Item/Service/ItemService.java @@ -31,9 +31,9 @@ public class ItemService { private final CategoryRepository categoryRepository; @Transactional - public Long addItem(String name, String image,int price, String userId, Long categoryNo, int itemState, boolean priceSimilar) throws Exception { + public Long addItem(String name, String image,int price, String userId, String categoryNo, int itemState, boolean priceSimilar) throws Exception { User user = userRepository.findByUserId(userId).orElseThrow(()->new NullPointerException("존재하지않는 사용자입니다")); - Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); + Category category = categoryRepository.findByCategoryName(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); Item item = new Item(name,image,price,user,category,itemState,priceSimilar); itemRepository.save(item); if (category.getItemCount()%20 ==0 ){ @@ -45,6 +45,7 @@ public Long addItem(String name, String image,int price, String userId, Long cat return item.getNo(); } + @Transactional public void deleteItem(Long itemId){ Item item = itemRepository.findById(itemId).orElseThrow(() -> new NullPointerException("존재하지않는 아이템입니다.")); @@ -60,9 +61,9 @@ public void SellItem(Long userNo, Long itemNo) throws Exception { } @Transactional - public void changeItem(Long itemId,String name, int price, Long categoryNo,int itemState,boolean priceSimilar) { + public void changeItem(Long itemId,String name, int price, String categoryNo,int itemState,boolean priceSimilar) { Item item = itemRepository.findById(itemId).orElseThrow(() -> new NullPointerException("존재하지않는 아이템입니다.")); - Category category = categoryRepository.findById(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); + Category category = categoryRepository.findByCategoryName(categoryNo).orElseThrow(()->new NullPointerException("존재하지않는 카테고리입니다.")); item.changeItem(name,price,priceSimilar,itemState,category); itemRepository.save(item); } diff --git a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java index a5b6aa2..63542ff 100644 --- a/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java +++ b/src/main/java/Graduated/Task/C2C/User/Controller/UserController.java @@ -35,6 +35,7 @@ public ResponseEntity login(@RequestBody loginDto loginDto) { return new ResponseEntity<>(errorMessage, HttpStatus.NOT_FOUND); } } + @PostMapping("/logout") public ResponseEntity logout(HttpServletRequest request){ String accessToken = jwtTokenUtil.resolveAccessToken(request); diff --git a/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java b/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java index 50ab3ce..8b48298 100644 --- a/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java +++ b/src/test/java/Graduated/Task/C2C/C2CApplicationTests.java @@ -19,14 +19,14 @@ class C2CApplicationTests { @Autowired EntityManager em; - @Test - void contextLoads() throws Exception { - User user = new User("1","1","1"); - userRepository.save(user); - em.clear(); - String login = userService.login("1", "1"); - System.out.println(login); - } +// @Test +// void contextLoads() throws Exception { +// User user = new User("1","1","1"); +// userRepository.save(user); +// em.clear(); +// String login = userService.login("1", "1"); +// System.out.println(login); +// } } diff --git a/src/test/java/Graduated/Task/C2C/itemTest.java b/src/test/java/Graduated/Task/C2C/itemTest.java index ad3a52c..344b705 100644 --- a/src/test/java/Graduated/Task/C2C/itemTest.java +++ b/src/test/java/Graduated/Task/C2C/itemTest.java @@ -46,7 +46,7 @@ void itemAdd() throws Exception { Category category = new Category("test",0); categoryRepository.save(category); em.clear(); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); System.out.println(l); } @Test @@ -55,7 +55,7 @@ void deleteItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); em.clear(); itemService.deleteItem(l); } @@ -66,9 +66,9 @@ void changeItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); em.clear(); - itemService.changeItem(l,"2",4000, category.getNo(), 3,true); + itemService.changeItem(l,"2",4000, category.getName(), 3,true); } @Test @@ -77,7 +77,7 @@ void categoryItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); em.clear(); List itemDtos = itemService.viewCategoryItem(l, 0, 10); System.out.println(itemDtos); @@ -88,7 +88,7 @@ void searchItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); em.clear(); List itemDtos = itemService.searchItem("1", 0, 10); System.out.println(itemDtos); @@ -100,7 +100,7 @@ void popluarItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); em.clear(); List itemDetailDto = itemService.findPopularItem(); System.out.println(itemDetailDto); @@ -112,7 +112,7 @@ void recentItem() throws Exception { userRepository.save(user); Category category = new Category("test",0); categoryRepository.save(category); - Long l = itemService.addItem("1", "",3000, user.getId(), category.getNo(), 2, true); + Long l = itemService.addItem("1", "",3000, user.getId(), category.getName(), 2, true); em.clear(); categoryRepository.findAllPost(); List itemDetailDto = itemService.findRecentItem(); @@ -120,11 +120,12 @@ void recentItem() throws Exception { } @Test void Iteminfo() throws Exception { - Future python3 = new ProcessExecutor().command("python3", "/Users/ihajun/Desktop/Random_Forest_Model.py","3") - .redirectOutput(System.out) - .redirectError(System.out).start().getFuture(); + ItemDetailDto itemDetailDto = itemService.itemInformation(1L); + System.out.println(itemDetailDto); + } + @Test + void categoryPrice() throws Exception { + System.out.println(categoryService.findCategoryPrice("test",1)); } - - }