Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 5 additions & 11 deletions src/main/java/Graduated/Task/C2C/Category/Entity/Category.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -18,18 +20,10 @@ 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> item = new ArrayList<>();
private String name;

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<categoryPrice> categoryPrices = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
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 int status;
private int maxPrice;
private int minPrice;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="categoryNo")
private Category category;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
import java.util.Optional;

public interface CategoryRepository extends JpaRepository<Category,Long>,CategoryRepositoryCustom {
Optional<Category> findByNo(Long no);

}
Original file line number Diff line number Diff line change
@@ -1,8 +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 {
Optional<categoryPrice> findCategoryPrice(Long categoryNo, int state);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,20 @@

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;
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
Expand All @@ -20,6 +25,11 @@ public CategoryRepositoryImpl(EntityManager em) {
super(Category.class);
this.jpaQueryFactory = new JPAQueryFactory(em);
}

public Optional<categoryPrice> 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());
}

}
Original file line number Diff line number Diff line change
@@ -1,30 +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;

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);
}
}
22 changes: 22 additions & 0 deletions src/main/java/Graduated/Task/C2C/Category/categoryController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
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 {



}
145 changes: 145 additions & 0 deletions src/main/java/Graduated/Task/C2C/Item/Controller/itemController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
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<ItemDto> itemDtos = itemService.viewCategoryItem(categoryNo, page, 10);
Message<List<ItemDto>> 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<ItemDto> itemDtos = itemService.searchItem(word, page, 10);
Message<List<ItemDto>> 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<ItemDetailDto> 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<itemRequestDto> 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<itemRequestDto> 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<String> 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);
}
}

@PostMapping("/userInfo/sellItems")
public ResponseEntity<?> sellItems(HttpServletRequest request) {
String accessToken = jwtTokenUtil.resolveAccessToken(request);
String userId = jwtTokenUtil.getclaims(accessToken).getSubject();
List<ItemDto> itemDtos = itemService.userSellerItem(userId);
Message<List<ItemDto>> 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<ItemDto> itemDtos = itemService.userBuyItem(userId);
Message<List<ItemDto>> 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<ItemDto> itemDtos = itemService.userSoldItem(userId);
Message<List<ItemDto>> message = Message.of(200, itemDtos);
return new ResponseEntity<>(message,HttpStatus.OK);
}

}
27 changes: 27 additions & 0 deletions src/main/java/Graduated/Task/C2C/Item/Dto/ItemDetailDto.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
35 changes: 35 additions & 0 deletions src/main/java/Graduated/Task/C2C/Item/Dto/ItemDto.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
11 changes: 11 additions & 0 deletions src/main/java/Graduated/Task/C2C/Item/Dto/itemRequestDto.java
Original file line number Diff line number Diff line change
@@ -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;
}
Loading