From ca069f3afa6877ef7e41b0df911aa9ead4aa7b22 Mon Sep 17 00:00:00 2001 From: world-dv Date: Wed, 18 Dec 2024 21:08:58 +0900 Subject: [PATCH 01/16] =?UTF-8?q?refactor:=20=EC=A0=84=EC=86=A1=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=A1=9C=EC=A7=81=20=EC=9E=AC?= =?UTF-8?q?=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auction/api/chat/ChatController.java | 8 +------- .../domain/chat/service/ChatService.java | 3 +++ .../domain/chat/service/ChatServiceImpl.java | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/tasksprints/auction/api/chat/ChatController.java b/src/main/java/com/tasksprints/auction/api/chat/ChatController.java index 33258582..78db7de6 100644 --- a/src/main/java/com/tasksprints/auction/api/chat/ChatController.java +++ b/src/main/java/com/tasksprints/auction/api/chat/ChatController.java @@ -24,13 +24,7 @@ public void message(MessageDto messageDto) { return; } //메시지 전송자가 경매자라면 메시지 전송 금지 String sender = userService.getUserDetailsById(messageDto.getSender()).getNickName(); - - if (MessageType.ENTER.equals(messageDto.getType())) { - messageDto.setMessage(sender + "님이 입장하셨습니다."); - } - if (MessageType.LEAVE.equals(messageDto.getType())) { - messageDto.setMessage(sender + "님이 퇴장하셨습니다."); - } + chatService.processMessage(sender, messageDto); simpMessageSendingOperations.convertAndSend("/topic/chat/room/" + messageDto.getRoomId(), messageDto); } diff --git a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java index 83ff438d..47f28ef8 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java @@ -1,6 +1,7 @@ package com.tasksprints.auction.domain.chat.service; import com.tasksprints.auction.domain.chat.dto.AddChatRoomDto; +import com.tasksprints.auction.domain.chat.dto.MessageDto; import com.tasksprints.auction.domain.chat.model.ChatRoom; import com.tasksprints.auction.domain.user.model.User; import java.util.List; @@ -15,5 +16,7 @@ public interface ChatService { boolean isUserOwner(String id, Long user); + void processMessage(String sender, MessageDto messageDto); + void createRoom(AddChatRoomDto addChatRoomDto); } diff --git a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java index e84eb50b..c4ff7698 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java @@ -2,9 +2,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.tasksprints.auction.domain.chat.dto.AddChatRoomDto; +import com.tasksprints.auction.domain.chat.dto.MessageDto; import com.tasksprints.auction.domain.chat.model.ChatRoom; import com.tasksprints.auction.domain.chat.repository.ChatRoomRepository; import com.tasksprints.auction.domain.user.model.User; +import com.tasksprints.auction.domain.user.repository.UserRepository; import jakarta.annotation.PostConstruct; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -49,6 +51,21 @@ public boolean isUserOwner(String id, Long user) { return findOwnerById(id).getId().equals(user); } + @Override + public void processMessage(String sender, MessageDto messageDto) { + switch (messageDto.getType()) { + case ENTER -> { + messageDto.setMessage(sender + "님이 입장하셨습니다."); + break; + } + case LEAVE -> { + messageDto.setMessage(sender + "님이 퇴장하셨습니다."); + break; + } + default -> messageDto.setMessage(sender + " : " + messageDto.getMessage()); + } + } + @Transactional @Override public void createRoom(AddChatRoomDto addChatRoomDto) { From 2f56f13a03b46cc1f14c420306333c3732efdb0e Mon Sep 17 00:00:00 2001 From: world-dv Date: Wed, 18 Dec 2024 21:12:36 +0900 Subject: [PATCH 02/16] =?UTF-8?q?remove:=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20dto=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auction/model/QAuction.java | 2 +- .../auction/domain/bid/model/QBid.java | 2 +- .../auction/domain/chat/model/QChatRoom.java | 2 +- .../domain/payment/model/QPayment.java | 75 +++++++++++++++++++ .../domain/product/model/QProduct.java | 2 +- .../auction/domain/review/model/QReview.java | 2 +- .../auction/domain/user/model/QUser.java | 19 ++++- .../auction/domain/wallet/model/QWallet.java | 65 ++++++++++++++++ .../auction/api/bid/BidController.java | 3 +- .../domain/chat/dto/AddChatRoomDto.java | 20 ----- .../domain/chat/service/ChatService.java | 3 +- .../domain/chat/service/ChatServiceImpl.java | 10 ++- 12 files changed, 169 insertions(+), 36 deletions(-) create mode 100644 src/main/generated/com/tasksprints/auction/domain/payment/model/QPayment.java create mode 100644 src/main/generated/com/tasksprints/auction/domain/wallet/model/QWallet.java delete mode 100644 src/main/java/com/tasksprints/auction/domain/chat/dto/AddChatRoomDto.java diff --git a/src/main/generated/com/tasksprints/auction/domain/auction/model/QAuction.java b/src/main/generated/com/tasksprints/auction/domain/auction/model/QAuction.java index d8d0c59a..b8391358 100644 --- a/src/main/generated/com/tasksprints/auction/domain/auction/model/QAuction.java +++ b/src/main/generated/com/tasksprints/auction/domain/auction/model/QAuction.java @@ -66,7 +66,7 @@ public QAuction(PathMetadata metadata, PathInits inits) { public QAuction(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.product = inits.isInitialized("product") ? new com.tasksprints.auction.domain.product.model.QProduct(forProperty("product"), inits.get("product")) : null; - this.seller = inits.isInitialized("seller") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("seller")) : null; + this.seller = inits.isInitialized("seller") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("seller"), inits.get("seller")) : null; } } diff --git a/src/main/generated/com/tasksprints/auction/domain/bid/model/QBid.java b/src/main/generated/com/tasksprints/auction/domain/bid/model/QBid.java index ba479754..22e6e393 100644 --- a/src/main/generated/com/tasksprints/auction/domain/bid/model/QBid.java +++ b/src/main/generated/com/tasksprints/auction/domain/bid/model/QBid.java @@ -56,7 +56,7 @@ public QBid(PathMetadata metadata, PathInits inits) { public QBid(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.auction = inits.isInitialized("auction") ? new com.tasksprints.auction.domain.auction.model.QAuction(forProperty("auction"), inits.get("auction")) : null; - this.user = inits.isInitialized("user") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("user")) : null; + this.user = inits.isInitialized("user") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("user"), inits.get("user")) : null; } } diff --git a/src/main/generated/com/tasksprints/auction/domain/chat/model/QChatRoom.java b/src/main/generated/com/tasksprints/auction/domain/chat/model/QChatRoom.java index 4ee59d1d..d54287f6 100644 --- a/src/main/generated/com/tasksprints/auction/domain/chat/model/QChatRoom.java +++ b/src/main/generated/com/tasksprints/auction/domain/chat/model/QChatRoom.java @@ -50,7 +50,7 @@ public QChatRoom(PathMetadata metadata, PathInits inits) { public QChatRoom(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.owner = inits.isInitialized("owner") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("owner")) : null; + this.owner = inits.isInitialized("owner") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("owner"), inits.get("owner")) : null; } } diff --git a/src/main/generated/com/tasksprints/auction/domain/payment/model/QPayment.java b/src/main/generated/com/tasksprints/auction/domain/payment/model/QPayment.java new file mode 100644 index 00000000..60bb9b47 --- /dev/null +++ b/src/main/generated/com/tasksprints/auction/domain/payment/model/QPayment.java @@ -0,0 +1,75 @@ +package com.tasksprints.auction.domain.payment.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPayment is a Querydsl query type for Payment + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPayment extends EntityPathBase { + + private static final long serialVersionUID = -1228254623L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QPayment payment = new QPayment("payment"); + + public final com.tasksprints.auction.common.entity.QBaseEntityWithUpdate _super = new com.tasksprints.auction.common.entity.QBaseEntityWithUpdate(this); + + public final NumberPath amount = createNumber("amount", java.math.BigDecimal.class); + + public final StringPath cancelReason = createString("cancelReason"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final StringPath failReason = createString("failReason"); + + public final StringPath orderName = createString("orderName"); + + public final NumberPath paymentId = createNumber("paymentId", Long.class); + + public final EnumPath payStatus = createEnum("payStatus", PayStatus.class); + + public final EnumPath payType = createEnum("payType", PayType.class); + + public final StringPath tossOrderId = createString("tossOrderId"); + + public final StringPath tossPaymentKey = createString("tossPaymentKey"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public final com.tasksprints.auction.domain.wallet.model.QWallet wallet; + + public QPayment(String variable) { + this(Payment.class, forVariable(variable), INITS); + } + + public QPayment(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QPayment(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QPayment(PathMetadata metadata, PathInits inits) { + this(Payment.class, metadata, inits); + } + + public QPayment(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.wallet = inits.isInitialized("wallet") ? new com.tasksprints.auction.domain.wallet.model.QWallet(forProperty("wallet"), inits.get("wallet")) : null; + } + +} + diff --git a/src/main/generated/com/tasksprints/auction/domain/product/model/QProduct.java b/src/main/generated/com/tasksprints/auction/domain/product/model/QProduct.java index d6bc8ea6..e69ae9d0 100644 --- a/src/main/generated/com/tasksprints/auction/domain/product/model/QProduct.java +++ b/src/main/generated/com/tasksprints/auction/domain/product/model/QProduct.java @@ -60,7 +60,7 @@ public QProduct(PathMetadata metadata, PathInits inits) { public QProduct(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.auction = inits.isInitialized("auction") ? new com.tasksprints.auction.domain.auction.model.QAuction(forProperty("auction"), inits.get("auction")) : null; - this.owner = inits.isInitialized("owner") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("owner")) : null; + this.owner = inits.isInitialized("owner") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("owner"), inits.get("owner")) : null; } } diff --git a/src/main/generated/com/tasksprints/auction/domain/review/model/QReview.java b/src/main/generated/com/tasksprints/auction/domain/review/model/QReview.java index 248565be..fff0acd6 100644 --- a/src/main/generated/com/tasksprints/auction/domain/review/model/QReview.java +++ b/src/main/generated/com/tasksprints/auction/domain/review/model/QReview.java @@ -51,7 +51,7 @@ public QReview(PathMetadata metadata, PathInits inits) { public QReview(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.auction = inits.isInitialized("auction") ? new com.tasksprints.auction.domain.auction.model.QAuction(forProperty("auction"), inits.get("auction")) : null; - this.writer = inits.isInitialized("writer") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("writer")) : null; + this.writer = inits.isInitialized("writer") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("writer"), inits.get("writer")) : null; } } diff --git a/src/main/generated/com/tasksprints/auction/domain/user/model/QUser.java b/src/main/generated/com/tasksprints/auction/domain/user/model/QUser.java index 1520cddd..97e847f8 100644 --- a/src/main/generated/com/tasksprints/auction/domain/user/model/QUser.java +++ b/src/main/generated/com/tasksprints/auction/domain/user/model/QUser.java @@ -18,6 +18,8 @@ public class QUser extends EntityPathBase { private static final long serialVersionUID = -738054213L; + private static final PathInits INITS = PathInits.DIRECT2; + public static final QUser user = new QUser("user"); public final com.tasksprints.auction.common.entity.QBaseEntityWithUpdate _super = new com.tasksprints.auction.common.entity.QBaseEntityWithUpdate(this); @@ -42,16 +44,27 @@ public class QUser extends EntityPathBase { //inherited public final DateTimePath updatedAt = _super.updatedAt; + public final com.tasksprints.auction.domain.wallet.model.QWallet wallet; + public QUser(String variable) { - super(User.class, forVariable(variable)); + this(User.class, forVariable(variable), INITS); } public QUser(Path path) { - super(path.getType(), path.getMetadata()); + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); } public QUser(PathMetadata metadata) { - super(User.class, metadata); + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QUser(PathMetadata metadata, PathInits inits) { + this(User.class, metadata, inits); + } + + public QUser(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.wallet = inits.isInitialized("wallet") ? new com.tasksprints.auction.domain.wallet.model.QWallet(forProperty("wallet"), inits.get("wallet")) : null; } } diff --git a/src/main/generated/com/tasksprints/auction/domain/wallet/model/QWallet.java b/src/main/generated/com/tasksprints/auction/domain/wallet/model/QWallet.java new file mode 100644 index 00000000..15a57908 --- /dev/null +++ b/src/main/generated/com/tasksprints/auction/domain/wallet/model/QWallet.java @@ -0,0 +1,65 @@ +package com.tasksprints.auction.domain.wallet.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QWallet is a Querydsl query type for Wallet + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QWallet extends EntityPathBase { + + private static final long serialVersionUID = -1929591685L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QWallet wallet = new QWallet("wallet"); + + public final com.tasksprints.auction.common.entity.QBaseEntityWithUpdate _super = new com.tasksprints.auction.common.entity.QBaseEntityWithUpdate(this); + + public final NumberPath balance = createNumber("balance", java.math.BigDecimal.class); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath payments = this.createList("payments", com.tasksprints.auction.domain.payment.model.Payment.class, com.tasksprints.auction.domain.payment.model.QPayment.class, PathInits.DIRECT2); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public final com.tasksprints.auction.domain.user.model.QUser user; + + public final StringPath userName = createString("userName"); + + public QWallet(String variable) { + this(Wallet.class, forVariable(variable), INITS); + } + + public QWallet(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QWallet(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QWallet(PathMetadata metadata, PathInits inits) { + this(Wallet.class, metadata, inits); + } + + public QWallet(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.user = inits.isInitialized("user") ? new com.tasksprints.auction.domain.user.model.QUser(forProperty("user"), inits.get("user")) : null; + } + +} + diff --git a/src/main/java/com/tasksprints/auction/api/bid/BidController.java b/src/main/java/com/tasksprints/auction/api/bid/BidController.java index 3e1d486d..a8bae2ae 100644 --- a/src/main/java/com/tasksprints/auction/api/bid/BidController.java +++ b/src/main/java/com/tasksprints/auction/api/bid/BidController.java @@ -5,7 +5,6 @@ import com.tasksprints.auction.domain.bid.dto.BidRequest; import com.tasksprints.auction.domain.bid.dto.BidResponse; import com.tasksprints.auction.domain.bid.service.BidService; -import com.tasksprints.auction.domain.chat.dto.AddChatRoomDto; import com.tasksprints.auction.domain.chat.service.ChatService; import com.tasksprints.auction.domain.user.dto.response.UserDetailResponse; import com.tasksprints.auction.domain.user.model.User; @@ -65,7 +64,7 @@ public ResponseEntity> submitBid( @Parameter(description = "Bid amount") @RequestParam BigDecimal amount) { BidResponse bid = bidService.submitBid(userId, auctionId, amount); User user = userService.getUserById(userId); - chatService.createRoom(new AddChatRoomDto(bid.getName(), user)); //입찰 생성 시 채팅방 생성 후 저장 + chatService.createRoom(bid.getName(), user); //입찰 생성 시 채팅방 생성 후 저장 return ResponseEntity.ok(ApiResult.success(ApiResponseMessages.BID_SUBMITTED_SUCCESS, bid)); } diff --git a/src/main/java/com/tasksprints/auction/domain/chat/dto/AddChatRoomDto.java b/src/main/java/com/tasksprints/auction/domain/chat/dto/AddChatRoomDto.java deleted file mode 100644 index 3eb6fd9a..00000000 --- a/src/main/java/com/tasksprints/auction/domain/chat/dto/AddChatRoomDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.tasksprints.auction.domain.chat.dto; - -import com.tasksprints.auction.domain.chat.model.ChatRoom; -import com.tasksprints.auction.domain.user.model.User; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@AllArgsConstructor -@NoArgsConstructor -public class AddChatRoomDto { - - private String name; - private User owner; - - public ChatRoom toEntity() { - return new ChatRoom(name, owner); - } -} diff --git a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java index 47f28ef8..1c981442 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatService.java @@ -1,6 +1,5 @@ package com.tasksprints.auction.domain.chat.service; -import com.tasksprints.auction.domain.chat.dto.AddChatRoomDto; import com.tasksprints.auction.domain.chat.dto.MessageDto; import com.tasksprints.auction.domain.chat.model.ChatRoom; import com.tasksprints.auction.domain.user.model.User; @@ -18,5 +17,5 @@ public interface ChatService { void processMessage(String sender, MessageDto messageDto); - void createRoom(AddChatRoomDto addChatRoomDto); + void createRoom(String name, User owner); } diff --git a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java index c4ff7698..87526752 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/service/ChatServiceImpl.java @@ -1,12 +1,10 @@ package com.tasksprints.auction.domain.chat.service; import com.fasterxml.jackson.databind.ObjectMapper; -import com.tasksprints.auction.domain.chat.dto.AddChatRoomDto; import com.tasksprints.auction.domain.chat.dto.MessageDto; import com.tasksprints.auction.domain.chat.model.ChatRoom; import com.tasksprints.auction.domain.chat.repository.ChatRoomRepository; import com.tasksprints.auction.domain.user.model.User; -import com.tasksprints.auction.domain.user.repository.UserRepository; import jakarta.annotation.PostConstruct; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -68,8 +66,12 @@ public void processMessage(String sender, MessageDto messageDto) { @Transactional @Override - public void createRoom(AddChatRoomDto addChatRoomDto) { - ChatRoom chatRoom = chatRoomRepository.save(addChatRoomDto.toEntity()); + public void createRoom(String name, User owner) { + ChatRoom chatRoom = ChatRoom.builder() + .name(name) + .owner(owner) + .build(); + chatRoomRepository.save(chatRoom); log.info("Create Room : {} {}", chatRoom.getId(), chatRoom.getName()); chatRoomMap.put(chatRoom.getChatRoomId(), chatRoom); } From 51b1c5b20f84494ccd107f52b4b364ded54e6faf Mon Sep 17 00:00:00 2001 From: world-dv Date: Wed, 18 Dec 2024 21:44:29 +0900 Subject: [PATCH 03/16] =?UTF-8?q?refactor:=20=EC=B1=84=ED=8C=85=EB=B0=A9?= =?UTF-8?q?=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=20=EC=9E=AC=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auction/api/chat/ChatRoomController.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/tasksprints/auction/api/chat/ChatRoomController.java b/src/main/java/com/tasksprints/auction/api/chat/ChatRoomController.java index 0408f2ac..457724c0 100644 --- a/src/main/java/com/tasksprints/auction/api/chat/ChatRoomController.java +++ b/src/main/java/com/tasksprints/auction/api/chat/ChatRoomController.java @@ -9,23 +9,18 @@ import java.util.List; @RequiredArgsConstructor -@Controller -@ResponseBody +@RestController +@RequestMapping("/chat/room") public class ChatRoomController { private final ChatService chatService; - @GetMapping("/chat/room/all") + @GetMapping("/all") public List chatRoomAll() { return chatService.findAllRoom(); } //채팅방 목록 조회 -// @PostMapping("/chat/room") -// public ChatRoom createChatRoom(AddChatRoomDto addChatRoomDto) { -// return chatService.createRoom(addChatRoomDto); -// } //채팅방 생성 - - @GetMapping("/chat/room/{chatRoomId}") + @GetMapping("/{chatRoomId}") public ChatRoom chatRoom(@PathVariable(value = "chatRoomId") String chatRoomId) { return chatService.findRoomById(chatRoomId); } //채팅방 조회 From a3f976e52f679345b82a7b1cf714e1068593e2f0 Mon Sep 17 00:00:00 2001 From: world-dv Date: Thu, 19 Dec 2024 00:43:11 +0900 Subject: [PATCH 04/16] =?UTF-8?q?feat:=20message=20dto=20resolver=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auction/api/chat/ChatController.java | 8 +-- .../auction/common/config/WebConfig.java | 6 +- .../resolver/ChatValidationResolver.java | 57 +++++++++++++++++++ .../chat/annotation/ChatValidation.java | 11 ++++ .../auction/domain/chat/dto/MessageDto.java | 12 ++-- 5 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/tasksprints/auction/common/resolver/ChatValidationResolver.java create mode 100644 src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java diff --git a/src/main/java/com/tasksprints/auction/api/chat/ChatController.java b/src/main/java/com/tasksprints/auction/api/chat/ChatController.java index 78db7de6..ac039d44 100644 --- a/src/main/java/com/tasksprints/auction/api/chat/ChatController.java +++ b/src/main/java/com/tasksprints/auction/api/chat/ChatController.java @@ -1,5 +1,6 @@ package com.tasksprints.auction.api.chat; +import com.tasksprints.auction.domain.chat.annotation.ChatValidation; import com.tasksprints.auction.domain.chat.dto.MessageDto; import com.tasksprints.auction.domain.chat.dto.MessageDto.MessageType; import com.tasksprints.auction.domain.chat.dto.WhisperDto; @@ -20,9 +21,6 @@ public class ChatController { @MessageMapping("/chat/message") public void message(MessageDto messageDto) { - if (chatService.isUserOwner(messageDto.getRoomId(), messageDto.getSender())) { - return; - } //메시지 전송자가 경매자라면 메시지 전송 금지 String sender = userService.getUserDetailsById(messageDto.getSender()).getNickName(); chatService.processMessage(sender, messageDto); simpMessageSendingOperations.convertAndSend("/topic/chat/room/" + messageDto.getRoomId(), messageDto); @@ -30,10 +28,6 @@ public void message(MessageDto messageDto) { @MessageMapping("/chat/message/whisper") public void messageToOne(WhisperDto whisperDto) { - if (chatService.isUserOwner(whisperDto.getRoomId(), whisperDto.getSender())) { - return; - } //메시지 전송자가 경매자라면 메시지 전송 금지 - String sender = userService.getUserDetailsById(whisperDto.getSender()).getNickName(); whisperDto.setMessage("[귓속말] " + sender + " : " + whisperDto.getMessage()); simpMessageSendingOperations.convertAndSend("/whisper/" + whisperDto.getReceiver(), whisperDto); diff --git a/src/main/java/com/tasksprints/auction/common/config/WebConfig.java b/src/main/java/com/tasksprints/auction/common/config/WebConfig.java index 0f7bb22a..a1f62b31 100644 --- a/src/main/java/com/tasksprints/auction/common/config/WebConfig.java +++ b/src/main/java/com/tasksprints/auction/common/config/WebConfig.java @@ -1,5 +1,6 @@ package com.tasksprints.auction.common.config; +import com.tasksprints.auction.common.resolver.ChatValidationResolver; import com.tasksprints.auction.common.resolver.SearchConditionResolver; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; @@ -12,14 +13,17 @@ @Configuration public class WebConfig implements WebMvcConfigurer { private final SearchConditionResolver searchConditionResolver; + private final ChatValidationResolver chatValidationResolver; - public WebConfig(SearchConditionResolver searchConditionResolver) { + public WebConfig(SearchConditionResolver searchConditionResolver, ChatValidationResolver chatValidationResolver) { this.searchConditionResolver = searchConditionResolver; + this.chatValidationResolver = chatValidationResolver; } @Override public void addArgumentResolvers(List resolvers) { resolvers.add(searchConditionResolver); + resolvers.add(chatValidationResolver); } @Override diff --git a/src/main/java/com/tasksprints/auction/common/resolver/ChatValidationResolver.java b/src/main/java/com/tasksprints/auction/common/resolver/ChatValidationResolver.java new file mode 100644 index 00000000..172212b9 --- /dev/null +++ b/src/main/java/com/tasksprints/auction/common/resolver/ChatValidationResolver.java @@ -0,0 +1,57 @@ +package com.tasksprints.auction.common.resolver; + +import com.tasksprints.auction.domain.chat.annotation.ChatValidation; +import com.tasksprints.auction.domain.chat.dto.MessageDto; +import com.tasksprints.auction.domain.chat.service.ChatService; +import com.tasksprints.auction.domain.user.dto.response.UserDetailResponse; +import com.tasksprints.auction.domain.user.service.UserService; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import java.util.Objects; + +@Component +public class ChatValidationResolver implements HandlerMethodArgumentResolver { + + private final ChatService chatService; + + public ChatValidationResolver(ChatService chatService) { + this.chatService = chatService; + } + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().isAnnotationPresent(ChatValidation.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, + NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + + String type = webRequest.getParameter("type"); + String roomId = webRequest.getParameter("roomId"); + Long sender = Long.valueOf(Objects.requireNonNull(webRequest.getParameter("sender"))); + String msg = webRequest.getParameter("message"); + + MessageDto messageDto = new MessageDto(); + messageDto.setType(type); + messageDto.setRoomId(roomId); + messageDto.setSender(sender); + messageDto.setMessage(msg); + + validate(messageDto); //메시지 검증 + + return messageDto; + } + + private void validate(MessageDto messageDto) { + if (chatService.isUserOwner(messageDto.getRoomId(), messageDto.getSender())) { + throw new IllegalArgumentException("Owner can't enter any chatting"); + } + //이외의 메시지 검증 로직 추가 + } +} diff --git a/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java b/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java new file mode 100644 index 00000000..df5ef4d5 --- /dev/null +++ b/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java @@ -0,0 +1,11 @@ +package com.tasksprints.auction.domain.chat.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) //클래스 레벨에서 사용 +@Retention(RetentionPolicy.RUNTIME) //런타임에 참조 +public @interface ChatValidation { +} diff --git a/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java b/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java index 34444193..62d7f89a 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java @@ -1,10 +1,10 @@ package com.tasksprints.auction.domain.chat.dto; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; +import com.tasksprints.auction.domain.chat.annotation.ChatValidation; +import lombok.*; -@Getter +@Data +@ChatValidation @AllArgsConstructor @NoArgsConstructor public class MessageDto { @@ -17,7 +17,7 @@ public enum MessageType { private Long sender; private String message; - public void setMessage(String s) { - this.message = s; + public void setType(String type) { + this.type = MessageType.valueOf(type); } } From 156e67d5475f2a4abaf279b23665b444dbd0c5eb Mon Sep 17 00:00:00 2001 From: world-dv Date: Thu, 26 Dec 2024 21:56:18 +0900 Subject: [PATCH 05/16] =?UTF-8?q?fix:=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=EC=97=90=EC=84=9C=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=EC=9D=84=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tasksprints/auction/api/chat/ChatController.java | 2 +- .../auction/domain/chat/annotation/ChatValidation.java | 2 +- .../com/tasksprints/auction/domain/chat/dto/MessageDto.java | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tasksprints/auction/api/chat/ChatController.java b/src/main/java/com/tasksprints/auction/api/chat/ChatController.java index ac039d44..de275b4b 100644 --- a/src/main/java/com/tasksprints/auction/api/chat/ChatController.java +++ b/src/main/java/com/tasksprints/auction/api/chat/ChatController.java @@ -20,7 +20,7 @@ public class ChatController { private final ChatService chatService; @MessageMapping("/chat/message") - public void message(MessageDto messageDto) { + public void message(@ChatValidation MessageDto messageDto) { String sender = userService.getUserDetailsById(messageDto.getSender()).getNickName(); chatService.processMessage(sender, messageDto); simpMessageSendingOperations.convertAndSend("/topic/chat/room/" + messageDto.getRoomId(), messageDto); diff --git a/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java b/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java index df5ef4d5..2006ae36 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java @@ -5,7 +5,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target(ElementType.TYPE) //클래스 레벨에서 사용 +@Target({ElementType.PARAMETER, ElementType.TYPE}) //파라미터에서 사용 @Retention(RetentionPolicy.RUNTIME) //런타임에 참조 public @interface ChatValidation { } diff --git a/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java b/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java index 62d7f89a..fe8bccad 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java +++ b/src/main/java/com/tasksprints/auction/domain/chat/dto/MessageDto.java @@ -4,7 +4,6 @@ import lombok.*; @Data -@ChatValidation @AllArgsConstructor @NoArgsConstructor public class MessageDto { From 7cc2e339f1b0e5acf07c97c3af958557599599c1 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 27 Dec 2024 00:30:10 +0900 Subject: [PATCH 06/16] =?UTF-8?q?refactor:=20=EB=A6=AC=EC=A1=B8=EB=B2=84?= =?UTF-8?q?=20=EA=B2=BD=EB=A1=9C=20=EC=9E=AC=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/resolver/ChatValidationResolver.java | 2 +- .../java/com/tasksprints/auction/common/config/WebConfig.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/com/tasksprints/auction/{auction => chat}/application/resolver/ChatValidationResolver.java (97%) diff --git a/src/main/java/com/tasksprints/auction/auction/application/resolver/ChatValidationResolver.java b/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java similarity index 97% rename from src/main/java/com/tasksprints/auction/auction/application/resolver/ChatValidationResolver.java rename to src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java index 7d1b92ac..bda9428e 100644 --- a/src/main/java/com/tasksprints/auction/auction/application/resolver/ChatValidationResolver.java +++ b/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java @@ -1,4 +1,4 @@ -package com.tasksprints.auction.auction.application.resolver; +package com.tasksprints.auction.chat.application.resolver; import com.tasksprints.auction.chat.application.service.ChatService; import com.tasksprints.auction.chat.domain.dto.MessageDto; diff --git a/src/main/java/com/tasksprints/auction/common/config/WebConfig.java b/src/main/java/com/tasksprints/auction/common/config/WebConfig.java index 36c9894f..6b84516a 100644 --- a/src/main/java/com/tasksprints/auction/common/config/WebConfig.java +++ b/src/main/java/com/tasksprints/auction/common/config/WebConfig.java @@ -1,6 +1,6 @@ package com.tasksprints.auction.common.config; -import com.tasksprints.auction.auction.application.resolver.ChatValidationResolver; +import com.tasksprints.auction.chat.application.resolver.ChatValidationResolver; import com.tasksprints.auction.auction.application.resolver.SearchConditionResolver; import com.tasksprints.auction.auth.application.resolver.AuthenticationResolver; import org.springframework.context.annotation.Configuration; From b874dc6c7ea7f2f2804b43ecdc4b0df5cc862a02 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 27 Dec 2024 00:49:58 +0900 Subject: [PATCH 07/16] =?UTF-8?q?feat:=20=EA=B7=93=EC=86=8D=EB=A7=90=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A6=AC=EC=A1=B8=EB=B2=84,=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 어노테이션 경로 재정의 - 귓속말 검증 리졸버 및 어노테이션 추가 --- .../resolver/ChatValidationResolver.java | 2 +- .../resolver/WhisperValidationResolver.java | 54 +++++++++++++++++++ .../domain}/annotation/ChatValidation.java | 2 +- .../domain/annotation/WhisperValidation.java | 11 ++++ .../auction/chat/domain/dto/WhisperDto.java | 11 ++-- .../chat/presentation/ChatController.java | 5 +- 6 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java rename src/main/java/com/tasksprints/auction/{domain/chat => chat/domain}/annotation/ChatValidation.java (85%) create mode 100644 src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java diff --git a/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java b/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java index bda9428e..5d110703 100644 --- a/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java +++ b/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java @@ -1,8 +1,8 @@ package com.tasksprints.auction.chat.application.resolver; import com.tasksprints.auction.chat.application.service.ChatService; +import com.tasksprints.auction.chat.domain.annotation.ChatValidation; import com.tasksprints.auction.chat.domain.dto.MessageDto; -import com.tasksprints.auction.domain.chat.annotation.ChatValidation; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; diff --git a/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java b/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java new file mode 100644 index 00000000..97b2cb1e --- /dev/null +++ b/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java @@ -0,0 +1,54 @@ +package com.tasksprints.auction.chat.application.resolver; + +import com.tasksprints.auction.chat.application.service.ChatService; +import com.tasksprints.auction.chat.domain.annotation.WhisperValidation; +import com.tasksprints.auction.chat.domain.dto.WhisperDto; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import java.util.Objects; + +@Component +public class WhisperValidationResolver implements HandlerMethodArgumentResolver { + + private final ChatService chatService; + + public WhisperValidationResolver(ChatService chatService) { + this.chatService = chatService; + } + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().isAnnotationPresent(WhisperValidation.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + + String roomId = webRequest.getParameter("roomId"); + long sender = Long.parseLong(Objects.requireNonNull(webRequest.getParameter("sender"))); + long receiver = Long.parseLong(Objects.requireNonNull(webRequest.getParameter("receiver"))); + String message = webRequest.getParameter("message"); + + WhisperDto whisperDto = new WhisperDto(); + whisperDto.setRoomId(roomId); + whisperDto.setSender(sender); + whisperDto.setReceiver(receiver); + whisperDto.setMessage(message); + + validate(whisperDto); + + return whisperDto; + } + + private void validate(WhisperDto whisperDto) { + if (chatService.isUserOwner(whisperDto.getRoomId(), whisperDto.getSender())) { + throw new IllegalArgumentException("Owner can't enter any chatting"); + } + //이외의 메시지 검증 로직 추가 + } +} diff --git a/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java b/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java similarity index 85% rename from src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java rename to src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java index 2006ae36..78bb9890 100644 --- a/src/main/java/com/tasksprints/auction/domain/chat/annotation/ChatValidation.java +++ b/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java @@ -1,4 +1,4 @@ -package com.tasksprints.auction.domain.chat.annotation; +package com.tasksprints.auction.chat.domain.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java b/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java new file mode 100644 index 00000000..1ef7e1da --- /dev/null +++ b/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java @@ -0,0 +1,11 @@ +package com.tasksprints.auction.chat.domain.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.PARAMETER, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface WhisperValidation { +} diff --git a/src/main/java/com/tasksprints/auction/chat/domain/dto/WhisperDto.java b/src/main/java/com/tasksprints/auction/chat/domain/dto/WhisperDto.java index 5a2fee36..1599a827 100644 --- a/src/main/java/com/tasksprints/auction/chat/domain/dto/WhisperDto.java +++ b/src/main/java/com/tasksprints/auction/chat/domain/dto/WhisperDto.java @@ -1,20 +1,17 @@ package com.tasksprints.auction.chat.domain.dto; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.Getter; import lombok.NoArgsConstructor; -@Getter +@Data @AllArgsConstructor @NoArgsConstructor public class WhisperDto { private String roomId; - private Long sender; - private Long receiver; + private long sender; + private long receiver; private String message; - - public void setMessage(String message) { - this.message = message; - } } diff --git a/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java b/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java index 5a929624..e1d9caba 100644 --- a/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java +++ b/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java @@ -1,9 +1,10 @@ package com.tasksprints.auction.chat.presentation; import com.tasksprints.auction.chat.application.service.ChatService; +import com.tasksprints.auction.chat.domain.annotation.WhisperValidation; import com.tasksprints.auction.chat.domain.dto.MessageDto; import com.tasksprints.auction.chat.domain.dto.WhisperDto; -import com.tasksprints.auction.domain.chat.annotation.ChatValidation; +import com.tasksprints.auction.chat.domain.annotation.ChatValidation; import com.tasksprints.auction.user.application.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.messaging.handler.annotation.MessageMapping; @@ -26,7 +27,7 @@ public void message(@ChatValidation MessageDto messageDto) { } @MessageMapping("/chat/message/whisper") - public void messageToOne(WhisperDto whisperDto) { + public void messageToOne(@WhisperValidation WhisperDto whisperDto) { String sender = userService.getUserDetailsById(whisperDto.getSender()).getNickName(); whisperDto.setMessage("[귓속말] " + sender + " : " + whisperDto.getMessage()); simpMessageSendingOperations.convertAndSend("/whisper/" + whisperDto.getReceiver(), whisperDto); From 74255c128cc9bcf874ebb3253c5bcf1bb2622df3 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 27 Dec 2024 00:59:00 +0900 Subject: [PATCH 08/16] =?UTF-8?q?fix:=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=9D=B8=EC=8B=9D=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auction/chat/domain/annotation/ChatValidation.java | 2 +- .../auction/chat/domain/annotation/WhisperValidation.java | 3 ++- .../tasksprints/auction/chat/presentation/ChatController.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java b/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java index 78bb9890..eb67d93a 100644 --- a/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java +++ b/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java @@ -5,7 +5,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target({ElementType.PARAMETER, ElementType.TYPE}) //파라미터에서 사용 +@Target(ElementType.PARAMETER) //파라미터에서 사용 @Retention(RetentionPolicy.RUNTIME) //런타임에 참조 public @interface ChatValidation { } diff --git a/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java b/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java index 1ef7e1da..afd2bc22 100644 --- a/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java +++ b/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java @@ -5,7 +5,8 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target({ElementType.PARAMETER, ElementType.TYPE}) +@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface WhisperValidation { } + diff --git a/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java b/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java index e1d9caba..9818b8e9 100644 --- a/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java +++ b/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java @@ -1,10 +1,10 @@ package com.tasksprints.auction.chat.presentation; import com.tasksprints.auction.chat.application.service.ChatService; -import com.tasksprints.auction.chat.domain.annotation.WhisperValidation; import com.tasksprints.auction.chat.domain.dto.MessageDto; import com.tasksprints.auction.chat.domain.dto.WhisperDto; import com.tasksprints.auction.chat.domain.annotation.ChatValidation; +import com.tasksprints.auction.chat.domain.annotation.WhisperValidation; import com.tasksprints.auction.user.application.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.messaging.handler.annotation.MessageMapping; From 24b869341e5571ad028b021c570952804d49a402 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 27 Dec 2024 01:15:47 +0900 Subject: [PATCH 09/16] =?UTF-8?q?refactor:=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EA=B2=BD=EB=A1=9C=20=EC=9E=AC=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bid/application/resolver/BidValidationResolver.java | 4 ++++ .../{domain => application}/annotation/ChatValidation.java | 2 +- .../{domain => application}/annotation/WhisperValidation.java | 2 +- .../chat/application/resolver/ChatValidationResolver.java | 2 +- .../chat/application/resolver/WhisperValidationResolver.java | 2 +- .../tasksprints/auction/chat/presentation/ChatController.java | 4 ++-- 6 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java rename src/main/java/com/tasksprints/auction/chat/{domain => application}/annotation/ChatValidation.java (83%) rename src/main/java/com/tasksprints/auction/chat/{domain => application}/annotation/WhisperValidation.java (81%) diff --git a/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java b/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java new file mode 100644 index 00000000..98b32b29 --- /dev/null +++ b/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java @@ -0,0 +1,4 @@ +package com.tasksprints.auction.bid.application.resolver; + +public class BidValidationResolver { +} diff --git a/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java b/src/main/java/com/tasksprints/auction/chat/application/annotation/ChatValidation.java similarity index 83% rename from src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java rename to src/main/java/com/tasksprints/auction/chat/application/annotation/ChatValidation.java index eb67d93a..6c43986f 100644 --- a/src/main/java/com/tasksprints/auction/chat/domain/annotation/ChatValidation.java +++ b/src/main/java/com/tasksprints/auction/chat/application/annotation/ChatValidation.java @@ -1,4 +1,4 @@ -package com.tasksprints.auction.chat.domain.annotation; +package com.tasksprints.auction.chat.application.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java b/src/main/java/com/tasksprints/auction/chat/application/annotation/WhisperValidation.java similarity index 81% rename from src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java rename to src/main/java/com/tasksprints/auction/chat/application/annotation/WhisperValidation.java index afd2bc22..d5f2d89f 100644 --- a/src/main/java/com/tasksprints/auction/chat/domain/annotation/WhisperValidation.java +++ b/src/main/java/com/tasksprints/auction/chat/application/annotation/WhisperValidation.java @@ -1,4 +1,4 @@ -package com.tasksprints.auction.chat.domain.annotation; +package com.tasksprints.auction.chat.application.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java b/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java index 5d110703..fec7c95b 100644 --- a/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java +++ b/src/main/java/com/tasksprints/auction/chat/application/resolver/ChatValidationResolver.java @@ -1,7 +1,7 @@ package com.tasksprints.auction.chat.application.resolver; import com.tasksprints.auction.chat.application.service.ChatService; -import com.tasksprints.auction.chat.domain.annotation.ChatValidation; +import com.tasksprints.auction.chat.application.annotation.ChatValidation; import com.tasksprints.auction.chat.domain.dto.MessageDto; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java b/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java index 97b2cb1e..3e5892f8 100644 --- a/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java +++ b/src/main/java/com/tasksprints/auction/chat/application/resolver/WhisperValidationResolver.java @@ -1,7 +1,7 @@ package com.tasksprints.auction.chat.application.resolver; import com.tasksprints.auction.chat.application.service.ChatService; -import com.tasksprints.auction.chat.domain.annotation.WhisperValidation; +import com.tasksprints.auction.chat.application.annotation.WhisperValidation; import com.tasksprints.auction.chat.domain.dto.WhisperDto; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java b/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java index 9818b8e9..c03ea107 100644 --- a/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java +++ b/src/main/java/com/tasksprints/auction/chat/presentation/ChatController.java @@ -3,8 +3,8 @@ import com.tasksprints.auction.chat.application.service.ChatService; import com.tasksprints.auction.chat.domain.dto.MessageDto; import com.tasksprints.auction.chat.domain.dto.WhisperDto; -import com.tasksprints.auction.chat.domain.annotation.ChatValidation; -import com.tasksprints.auction.chat.domain.annotation.WhisperValidation; +import com.tasksprints.auction.chat.application.annotation.ChatValidation; +import com.tasksprints.auction.chat.application.annotation.WhisperValidation; import com.tasksprints.auction.user.application.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.messaging.handler.annotation.MessageMapping; From cd7f73eb4d0f646fe342064ef4bcdd2282c957c8 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 27 Dec 2024 01:39:56 +0900 Subject: [PATCH 10/16] =?UTF-8?q?feat:=20Bid=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A6=AC=EC=A1=B8=EB=B2=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/annotation/BidValidation.java | 11 ++++ .../resolver/BidValidationResolver.java | 57 ++++++++++++++++++- .../bid/presentation/BidController.java | 12 +--- 3 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/tasksprints/auction/bid/application/annotation/BidValidation.java diff --git a/src/main/java/com/tasksprints/auction/bid/application/annotation/BidValidation.java b/src/main/java/com/tasksprints/auction/bid/application/annotation/BidValidation.java new file mode 100644 index 00000000..db87d3ed --- /dev/null +++ b/src/main/java/com/tasksprints/auction/bid/application/annotation/BidValidation.java @@ -0,0 +1,11 @@ +package com.tasksprints.auction.bid.application.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface BidValidation { +} diff --git a/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java b/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java index 98b32b29..eda10523 100644 --- a/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java +++ b/src/main/java/com/tasksprints/auction/bid/application/resolver/BidValidationResolver.java @@ -1,4 +1,59 @@ package com.tasksprints.auction.bid.application.resolver; -public class BidValidationResolver { +import com.tasksprints.auction.bid.application.annotation.BidValidation; +import com.tasksprints.auction.bid.application.service.BidService; +import com.tasksprints.auction.bid.domain.dto.BidRequest; +import com.tasksprints.auction.chat.application.service.ChatService; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import java.math.BigDecimal; +import java.util.Objects; + +@Component +public class BidValidationResolver implements HandlerMethodArgumentResolver { + + private final ChatService chatService; + private final BidService bidService; + + public BidValidationResolver(ChatService chatService, BidService bidService) { + this.chatService = chatService; + this.bidService = bidService; + } + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().isAnnotationPresent(BidValidation.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, NativeWebRequest webRequest, WebDataBinderFactory webDataBinderFactory) { + long userId = Long.parseLong(Objects.requireNonNull(webRequest.getParameter("userId"))); + long auctionId = Long.parseLong(Objects.requireNonNull(webRequest.getParameter("auctionId"))); + String chatRoomId = webRequest.getParameter("chatRoomId"); + BigDecimal amount = new BigDecimal(Objects.requireNonNull(webRequest.getParameter("amount"))); + + BidRequest bidRequest = new BidRequest(); + bidRequest.setUserId(userId); + bidRequest.setAuctionId(auctionId); + bidRequest.setChatRoomId(chatRoomId); + bidRequest.setAmount(amount); + + validate(bidRequest); + + return bidRequest; + } + + private void validate(BidRequest bidRequest) { + if (chatService.isUserOwner(bidRequest.getChatRoomId(), bidRequest.getUserId())) { + throw new IllegalArgumentException("Owner can't enter any chatting"); + } + if (bidService.isBidEnd(bidRequest.getAuctionId())) { + throw new IllegalArgumentException("Bid Already Ended."); + } + } } diff --git a/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java b/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java index 0895a3e1..86fe76d9 100644 --- a/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java +++ b/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java @@ -1,5 +1,6 @@ package com.tasksprints.auction.bid.presentation; +import com.tasksprints.auction.bid.application.annotation.BidValidation; import com.tasksprints.auction.bid.application.service.BidService; import com.tasksprints.auction.bid.domain.dto.BidRequest; import com.tasksprints.auction.bid.domain.dto.BidResponse; @@ -33,19 +34,10 @@ public class BidController { private final SimpMessageSendingOperations simpMessageSendingOperations; @MessageMapping("/apply") - public void handleBid(BidRequest bidRequest) { + public void handleBid(@BidValidation BidRequest bidRequest) { /** * 입찰하는거 여기다가 추가하면 좋을 듯 합니다. */ - UserDetailResponse userDetailResponse = userService.getUserDetailsById(bidRequest.getUserId()); - if (chatService.isUserOwner(bidRequest.getChatRoomId(), userDetailResponse.getId())) { - return; - } - - if (bidService.isBidEnd(bidRequest.getAuctionId())) { - return; - } //경매가 종료되었을 경우 채팅 입력 금지 - BidResponse bidResponse = bidService.updateBidAmount(bidRequest.getUserId(), bidRequest.getAuctionId(), bidRequest.getAmount()); simpMessageSendingOperations.convertAndSend("/bid/" + bidResponse.getUuid(), bidResponse); From 43278cd4584a48aeb3613949d268091961e59765 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 27 Dec 2024 21:42:51 +0900 Subject: [PATCH 11/16] =?UTF-8?q?fix:=20=EC=8B=A4=ED=96=89=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auction/common/config/ClockConfig.java | 2 +- .../auction/common/config/JwtConfig.java | 23 ++++++++----------- .../common/properties/PaymentProperties.java | 2 ++ src/main/resources/application.yml | 8 +++---- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/tasksprints/auction/common/config/ClockConfig.java b/src/main/java/com/tasksprints/auction/common/config/ClockConfig.java index 1757f93a..9764216b 100644 --- a/src/main/java/com/tasksprints/auction/common/config/ClockConfig.java +++ b/src/main/java/com/tasksprints/auction/common/config/ClockConfig.java @@ -9,6 +9,6 @@ public class ClockConfig { @Bean public Clock clock() { - return Clock.system(ZoneId.of("Asia/seoul")); + return Clock.system(ZoneId.of("Asia/Seoul")); } } diff --git a/src/main/java/com/tasksprints/auction/common/config/JwtConfig.java b/src/main/java/com/tasksprints/auction/common/config/JwtConfig.java index f272e578..349a1f0c 100644 --- a/src/main/java/com/tasksprints/auction/common/config/JwtConfig.java +++ b/src/main/java/com/tasksprints/auction/common/config/JwtConfig.java @@ -1,24 +1,21 @@ package com.tasksprints.auction.common.config; import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; -@Component @Getter -@RequiredArgsConstructor +@Setter +@Configuration +@ConfigurationProperties(prefix = "jwt") public class JwtConfig { - @Value("${jwt.expire-ms}") - private final Long accessExpireMs; + private Long accessExpireMs; - @Value("${jwt.expire-ms}") - private final Long refreshExpireMs; + private Long refreshExpireMs; - @Value("${jwt.issuer}") - private final String issuer; + private String issuer; - @Value("${jwt.secret}") - private final String secretKey; + private String secretKey; } diff --git a/src/main/java/com/tasksprints/auction/common/properties/PaymentProperties.java b/src/main/java/com/tasksprints/auction/common/properties/PaymentProperties.java index ca6a1650..6a9a2ba1 100644 --- a/src/main/java/com/tasksprints/auction/common/properties/PaymentProperties.java +++ b/src/main/java/com/tasksprints/auction/common/properties/PaymentProperties.java @@ -2,6 +2,7 @@ import lombok.Getter; +import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -10,6 +11,7 @@ @Component @ConfigurationProperties(prefix = "payment.toss") @Getter +@Setter public class PaymentProperties { private String testClientApiKey; private String testSecretApiKey; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 67ef9efc..aa8ede58 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -35,8 +35,8 @@ spring: cache: false profiles: include: - -jwt - -payment + - jwt + - payment springdoc: api-docs: @@ -50,8 +50,8 @@ springdoc: logging: level: org.hibernate.SQL: DEBUG - org.hibernate.type.descriptor.sql.BasicBinder: TRACE - root: debug + org.hibernate.type.descriptor.sql.BasicBinder: INFO + root: INFO server: port: 8080 From 6374bd008bba0eb9ddf2726844b1e7b6d99c875d Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 3 Jan 2025 14:56:00 +0900 Subject: [PATCH 12/16] =?UTF-8?q?chore:=20=EC=A3=BC=EC=84=9D=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 --- .../com/tasksprints/auction/bid/presentation/BidController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java b/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java index 86fe76d9..dd8ac3a3 100644 --- a/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java +++ b/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java @@ -63,7 +63,7 @@ public ResponseEntity> updateBid( @Parameter(description = "auctionId") @RequestParam Long auctionId, @Parameter(description = "ID of the user updating the bid") @RequestParam Long userId, @Parameter(description = "New bid amount") @RequestParam BigDecimal amount) { - log.info("a"); + log.info("a"); //삭제 필요 BidResponse updatedBid = bidService.updateBidAmount(userId, auctionId, amount); return ResponseEntity.ok(ApiResult.success(ApiResponseMessages.BID_UPDATED_SUCCESS, updatedBid)); } From 62c0ac9eb2e483fce2c4fcb00e5753dafc278609 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 3 Jan 2025 15:23:01 +0900 Subject: [PATCH 13/16] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20bid=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 전체 bid 조회 - bid api response message 정의 및 사용 --- .../auction/bid/application/service/BidService.java | 3 +++ .../bid/application/service/BidServiceImpl.java | 7 +++++++ .../auction/bid/presentation/BidController.java | 11 ++++++++++- .../auction/common/constant/ApiResponseMessages.java | 2 ++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tasksprints/auction/bid/application/service/BidService.java b/src/main/java/com/tasksprints/auction/bid/application/service/BidService.java index 7ef99a30..7270f9e2 100644 --- a/src/main/java/com/tasksprints/auction/bid/application/service/BidService.java +++ b/src/main/java/com/tasksprints/auction/bid/application/service/BidService.java @@ -3,6 +3,7 @@ import com.tasksprints.auction.bid.domain.dto.BidResponse; import java.math.BigDecimal; +import java.util.List; public interface BidService { /** @@ -18,4 +19,6 @@ public interface BidService { BidResponse getBidByUuid(String uuid); boolean isBidEnd(Long auctionId); + + List findAllBids(); } diff --git a/src/main/java/com/tasksprints/auction/bid/application/service/BidServiceImpl.java b/src/main/java/com/tasksprints/auction/bid/application/service/BidServiceImpl.java index 8a3906c3..ace333ac 100644 --- a/src/main/java/com/tasksprints/auction/bid/application/service/BidServiceImpl.java +++ b/src/main/java/com/tasksprints/auction/bid/application/service/BidServiceImpl.java @@ -104,4 +104,11 @@ public boolean isBidEnd(Long auctionId) { return auction.getEndTime().isBefore(LocalDateTime.now()); } + + @Override + public List findAllBids() { + return bidRepository.findAll() + .stream().map(BidResponse::of) + .toList(); + } } diff --git a/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java b/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java index dd8ac3a3..bbd94224 100644 --- a/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java +++ b/src/main/java/com/tasksprints/auction/bid/presentation/BidController.java @@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.util.List; @Controller @RequiredArgsConstructor @@ -82,6 +83,14 @@ public ResponseEntity> updateBid( @ApiResponse(responseCode = "200", description = "Bid status retrieved successfully") public ResponseEntity> getBidByUuid(@PathVariable(value = "uuid") String uuid) { BidResponse bid = bidService.getBidByUuid(uuid); - return ResponseEntity.ok(ApiResult.success(ApiResponseMessages.AUCTION_RETRIEVED, bid)); + return ResponseEntity.ok(ApiResult.success(ApiResponseMessages.BID_RETRIEVED, bid)); + } + + @GetMapping() + @Operation(summary = "Get All bids", description = "Get All bids") + @ApiResponse(responseCode = "200", description = "All bids retrieved successfully") + public ResponseEntity>> getAllBids() { + List bids = bidService.findAllBids(); + return ResponseEntity.ok(ApiResult.success(ApiResponseMessages.ALL_BIDS_RETRIEVED, bids)); } } diff --git a/src/main/java/com/tasksprints/auction/common/constant/ApiResponseMessages.java b/src/main/java/com/tasksprints/auction/common/constant/ApiResponseMessages.java index 00aa3e75..0b6d04f0 100644 --- a/src/main/java/com/tasksprints/auction/common/constant/ApiResponseMessages.java +++ b/src/main/java/com/tasksprints/auction/common/constant/ApiResponseMessages.java @@ -24,6 +24,8 @@ public class ApiResponseMessages { public static final String BID_SUBMITTED_SUCCESS = "Bid successfully submitted"; public static final String BID_UPDATED_SUCCESS = "Bid amount successfully updated"; public static final String BID_STATUS_CHECKED = "Bid status successfully checked"; + public static final String ALL_BIDS_RETRIEVED = "All bids successfully retrieved"; + public static final String BID_RETRIEVED = "Bid successfully retrieved"; // REVIEW public static final String REVIEW_CREATED_SUCCESS = "Review successfully created"; From 47a171aef12f9a60c594ec3b46205053bed2211d Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 3 Jan 2025 16:07:46 +0900 Subject: [PATCH 14/16] =?UTF-8?q?feat:=20bid=20uuid=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EB=B0=8F=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auction/auction/domain/entity/Auction.java | 3 +-- .../tasksprints/auction/bid/domain/dto/BidResponse.java | 2 ++ .../com/tasksprints/auction/bid/domain/entity/Bid.java | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tasksprints/auction/auction/domain/entity/Auction.java b/src/main/java/com/tasksprints/auction/auction/domain/entity/Auction.java index d9e9d694..fc0c3991 100644 --- a/src/main/java/com/tasksprints/auction/auction/domain/entity/Auction.java +++ b/src/main/java/com/tasksprints/auction/auction/domain/entity/Auction.java @@ -54,6 +54,7 @@ public class Auction extends BaseEntity { @Builder.Default private List bids = new ArrayList<>(); + @Builder.Default //초기화 값 적용 위함 -> @Builder만 사용할 경우 초기화 값이 무시될 가능성 존재 @Column(nullable = false) private long viewCount = 0L; @@ -82,6 +83,4 @@ public void addUser(User seller) { public void incrementViewCount() { this.viewCount += 1; } - - } diff --git a/src/main/java/com/tasksprints/auction/bid/domain/dto/BidResponse.java b/src/main/java/com/tasksprints/auction/bid/domain/dto/BidResponse.java index 56b12302..2849c7eb 100644 --- a/src/main/java/com/tasksprints/auction/bid/domain/dto/BidResponse.java +++ b/src/main/java/com/tasksprints/auction/bid/domain/dto/BidResponse.java @@ -6,6 +6,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; +import java.util.UUID; @Data @Builder @@ -24,6 +25,7 @@ public static BidResponse of(Bid bid) { .name(bid.getUser().getName()) .auctionId(bid.getAuction().getId()) .amount(bid.getAmount()) + .uuid(bid.getUuid()) .build(); /** 아이템 목록 추가**/ } diff --git a/src/main/java/com/tasksprints/auction/bid/domain/entity/Bid.java b/src/main/java/com/tasksprints/auction/bid/domain/entity/Bid.java index e011318e..e898d817 100644 --- a/src/main/java/com/tasksprints/auction/bid/domain/entity/Bid.java +++ b/src/main/java/com/tasksprints/auction/bid/domain/entity/Bid.java @@ -10,6 +10,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; +import java.util.UUID; @Entity(name = "bids") @AllArgsConstructor @@ -31,16 +32,16 @@ public class Bid extends BaseEntity { @Builder.Default private Auction auction = null; - @ManyToOne(fetch = FetchType.LAZY) //지연 로딩 설정 이유 ? -> N + 1 문제 발생 가능성 있으므로 fetch join 으로 개선 필요 + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") @Builder.Default - private User user = null; //null 설정한 이유가 무엇인지? + private User user = null; public static Bid create(BigDecimal amount, User user, Auction auction) { Bid newBid = Bid.builder() .amount(amount) + .uuid(UUID.randomUUID().toString()) .build(); - newBid.addUserAndAuction(user, auction); return newBid; } @@ -50,7 +51,6 @@ public static Bid create(BigDecimal amount, User user, Auction auction) { */ public void addUser(User user) { this.user = user; - } public void addAuction(Auction auction) { From 756c2058a0925f9a02b175099b4182dbc14fc730 Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 3 Jan 2025 16:50:54 +0900 Subject: [PATCH 15/16] =?UTF-8?q?fix:=20web=20socket=20test=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=84=A4=EC=A0=95=20=EC=9E=AC=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tasksprints/auction/common/config/WebSockConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tasksprints/auction/common/config/WebSockConfig.java b/src/main/java/com/tasksprints/auction/common/config/WebSockConfig.java index 2fd79b21..c28f793d 100644 --- a/src/main/java/com/tasksprints/auction/common/config/WebSockConfig.java +++ b/src/main/java/com/tasksprints/auction/common/config/WebSockConfig.java @@ -26,6 +26,7 @@ public void configureMessageBroker(MessageBrokerRegistry brokerRegistry) { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/ws-stomp").setAllowedOriginPatterns("http://localhost:8080").withSockJS(); + registry.addEndpoint("/ws").setAllowedOriginPatterns("*"); + registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS(); } } From ba24615283a6a873d39084b471ff102c5cc923ef Mon Sep 17 00:00:00 2001 From: world-dv Date: Fri, 3 Jan 2025 22:22:35 +0900 Subject: [PATCH 16/16] =?UTF-8?q?refactor:=20=EC=B1=84=ED=8C=85=EB=B0=A9?= =?UTF-8?q?=20dto=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/application/service/ChatService.java | 9 +++-- .../application/service/ChatServiceImpl.java | 16 +++++--- .../chat/domain/dto/ChatRoomResponse.java | 39 +++++++++++++++++++ .../auction/chat/domain/model/ChatRoom.java | 4 +- .../chat/presentation/ChatRoomController.java | 9 ++--- .../domain/dto/response/UserResponse.java | 11 ++++++ 6 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/tasksprints/auction/chat/domain/dto/ChatRoomResponse.java diff --git a/src/main/java/com/tasksprints/auction/chat/application/service/ChatService.java b/src/main/java/com/tasksprints/auction/chat/application/service/ChatService.java index 25767c9d..4f67542c 100644 --- a/src/main/java/com/tasksprints/auction/chat/application/service/ChatService.java +++ b/src/main/java/com/tasksprints/auction/chat/application/service/ChatService.java @@ -1,18 +1,19 @@ package com.tasksprints.auction.chat.application.service; +import com.tasksprints.auction.chat.domain.dto.ChatRoomResponse; import com.tasksprints.auction.chat.domain.dto.MessageDto; -import com.tasksprints.auction.chat.domain.model.ChatRoom; +import com.tasksprints.auction.user.domain.dto.response.UserResponse; import com.tasksprints.auction.user.domain.entity.User; import java.util.List; public interface ChatService { - List findAllRoom(); + List findAllRoom(); - ChatRoom findRoomById(String id); + ChatRoomResponse findRoomById(String id); - User findOwnerById(String id); + UserResponse findOwnerById(String id); boolean isUserOwner(String id, Long user); diff --git a/src/main/java/com/tasksprints/auction/chat/application/service/ChatServiceImpl.java b/src/main/java/com/tasksprints/auction/chat/application/service/ChatServiceImpl.java index 0e7f839b..5dcb0ae1 100644 --- a/src/main/java/com/tasksprints/auction/chat/application/service/ChatServiceImpl.java +++ b/src/main/java/com/tasksprints/auction/chat/application/service/ChatServiceImpl.java @@ -2,9 +2,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; +import com.tasksprints.auction.chat.domain.dto.ChatRoomResponse; import com.tasksprints.auction.chat.domain.dto.MessageDto; import com.tasksprints.auction.chat.domain.model.ChatRoom; import com.tasksprints.auction.chat.infrastructure.ChatRoomRepository; +import com.tasksprints.auction.user.domain.dto.response.UserResponse; import com.tasksprints.auction.user.domain.entity.User; import jakarta.annotation.PostConstruct; import jakarta.transaction.Transactional; @@ -30,18 +32,22 @@ private void init() { chatRoomMap = new ConcurrentHashMap<>(); } + @Transactional @Override - public List findAllRoom() { - return new ArrayList<>(chatRoomMap.values()); + public List findAllRoom() { + List chatRooms = new ArrayList<>(chatRoomMap.values()); + return chatRooms.stream().map(ChatRoomResponse::of).toList(); } + @Transactional @Override - public ChatRoom findRoomById(String id) { - return chatRoomMap.get(id); + public ChatRoomResponse findRoomById(String id) { + ChatRoom chatRoom = chatRoomMap.get(id); + return ChatRoomResponse.of(chatRoom); } @Override - public User findOwnerById(String id) { + public UserResponse findOwnerById(String id) { return findRoomById(id).getOwner(); } diff --git a/src/main/java/com/tasksprints/auction/chat/domain/dto/ChatRoomResponse.java b/src/main/java/com/tasksprints/auction/chat/domain/dto/ChatRoomResponse.java new file mode 100644 index 00000000..75ca2190 --- /dev/null +++ b/src/main/java/com/tasksprints/auction/chat/domain/dto/ChatRoomResponse.java @@ -0,0 +1,39 @@ +package com.tasksprints.auction.chat.domain.dto; + +import com.tasksprints.auction.chat.domain.model.ChatRoom; +import com.tasksprints.auction.user.domain.dto.response.UserResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.stream.Collectors; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ChatRoomResponse { + String chatRoomId; + String name; + UserResponse owner; + List users; + + public static ChatRoomResponse of(ChatRoom chatRoom) { + return ChatRoomResponse.builder() + .chatRoomId(chatRoom.getChatRoomId()) + .name(chatRoom.getName()) + .owner(UserResponse.builder() + .id(chatRoom.getOwner().getId()) + .nickName(chatRoom.getOwner().getNickName()) + .build()) + .users(chatRoom.getUsers().stream() + .map(user -> UserResponse.builder() + .id(user.getId()) + .nickName(user.getNickName()) + .build()) + .collect(Collectors.toList())) + .build(); + } +} diff --git a/src/main/java/com/tasksprints/auction/chat/domain/model/ChatRoom.java b/src/main/java/com/tasksprints/auction/chat/domain/model/ChatRoom.java index 273eeaa1..5ee5ee42 100644 --- a/src/main/java/com/tasksprints/auction/chat/domain/model/ChatRoom.java +++ b/src/main/java/com/tasksprints/auction/chat/domain/model/ChatRoom.java @@ -24,11 +24,11 @@ public class ChatRoom { private String chatRoomId; @Column(name = "name") - private String name; //채팅방 이름은 상품 이름으로 하면 좋을 것 같습니다. + private String name; @ManyToOne @JoinColumn(name = "owner_id") - private User owner; //입찰자 -> 입찰 불가하도록 ? 설정 후 메시지 보내기 금지 + private User owner; @OneToMany @Column(name = "chat_users") diff --git a/src/main/java/com/tasksprints/auction/chat/presentation/ChatRoomController.java b/src/main/java/com/tasksprints/auction/chat/presentation/ChatRoomController.java index 391852ee..71cfd7d6 100644 --- a/src/main/java/com/tasksprints/auction/chat/presentation/ChatRoomController.java +++ b/src/main/java/com/tasksprints/auction/chat/presentation/ChatRoomController.java @@ -1,26 +1,25 @@ package com.tasksprints.auction.chat.presentation; import com.tasksprints.auction.chat.application.service.ChatService; -import com.tasksprints.auction.chat.domain.model.ChatRoom; +import com.tasksprints.auction.chat.domain.dto.ChatRoomResponse; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; @RequiredArgsConstructor @RestController -@RequestMapping("/chat/room") +@RequestMapping("/api/v1/chat") public class ChatRoomController { private final ChatService chatService; @GetMapping("/all") - public List chatRoomAll() { + public List chatRoomAll() { return chatService.findAllRoom(); } //채팅방 목록 조회 @GetMapping("/{chatRoomId}") - public ChatRoom chatRoom(@PathVariable(value = "chatRoomId") String chatRoomId) { + public ChatRoomResponse chatRoom(@PathVariable(value = "chatRoomId") String chatRoomId) { return chatService.findRoomById(chatRoomId); } //채팅방 조회 } diff --git a/src/main/java/com/tasksprints/auction/user/domain/dto/response/UserResponse.java b/src/main/java/com/tasksprints/auction/user/domain/dto/response/UserResponse.java index a3ccb44e..1a92cfc8 100644 --- a/src/main/java/com/tasksprints/auction/user/domain/dto/response/UserResponse.java +++ b/src/main/java/com/tasksprints/auction/user/domain/dto/response/UserResponse.java @@ -1,4 +1,15 @@ package com.tasksprints.auction.user.domain.dto.response; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class UserResponse { + Long id; + String nickName; }