From b99ea54e88f7fd51818fb34dc80dcb87081b87fa Mon Sep 17 00:00:00 2001 From: kon28289 Date: Sat, 6 Sep 2025 16:25:29 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EB=B0=98=ED=99=98=20=EC=8B=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=A0=20=EC=A0=84=EC=9A=A9=20dto=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 --- .../dto/response/ChatRoomProductResponse.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/com/uhdyl/backend/product/dto/response/ChatRoomProductResponse.java diff --git a/src/main/java/com/uhdyl/backend/product/dto/response/ChatRoomProductResponse.java b/src/main/java/com/uhdyl/backend/product/dto/response/ChatRoomProductResponse.java new file mode 100644 index 0000000..d147337 --- /dev/null +++ b/src/main/java/com/uhdyl/backend/product/dto/response/ChatRoomProductResponse.java @@ -0,0 +1,37 @@ +package com.uhdyl.backend.product.dto.response; + +import com.querydsl.core.annotations.QueryProjection; +import com.uhdyl.backend.product.domain.Product; + +public record ChatRoomProductResponse( + Long id, + String title, + Long price, + String sellerName, + String sellerPicture, + String mainImageUrl, + boolean isCompleted +) { + @QueryProjection + public ChatRoomProductResponse(Long id, String title, Long price, String sellerName, String sellerPicture, String mainImageUrl, boolean isCompleted) { + this.id = id; + this.title = title; + this.price = price; + this.sellerName = sellerName; + this.sellerPicture = sellerPicture; + this.mainImageUrl = mainImageUrl; + this.isCompleted = isCompleted; + } + + public static ChatRoomProductResponse to(Product product){ + return new ChatRoomProductResponse( + product.getId(), + product.getTitle(), + product.getPrice(), + product.getUser().getNickname(), + product.getUser().getPicture(), + product.getImages().get(0).getImageUrl(), + product.isSale() + ); + } +} From db8fc1bd551828cbe0e95c829cbea468c7b69df0 Mon Sep 17 00:00:00 2001 From: kon28289 Date: Sat, 6 Sep 2025 16:29:01 +0900 Subject: [PATCH 2/5] =?UTF-8?q?chore:=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uhdyl/backend/chat/dto/response/ChatRoomResponse.java | 5 +++-- .../chat/repository/CustomChatRoomRepositoryImpl.java | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/uhdyl/backend/chat/dto/response/ChatRoomResponse.java b/src/main/java/com/uhdyl/backend/chat/dto/response/ChatRoomResponse.java index 009e760..2f94566 100644 --- a/src/main/java/com/uhdyl/backend/chat/dto/response/ChatRoomResponse.java +++ b/src/main/java/com/uhdyl/backend/chat/dto/response/ChatRoomResponse.java @@ -3,6 +3,7 @@ import com.uhdyl.backend.chat.domain.ChatMessage; import com.uhdyl.backend.chat.domain.ChatRoom; import com.uhdyl.backend.product.domain.Product; +import com.uhdyl.backend.product.dto.response.ChatRoomProductResponse; import com.uhdyl.backend.product.dto.response.ProductListResponse; import java.time.LocalDateTime; @@ -11,7 +12,7 @@ public record ChatRoomResponse( Long chatRoomId, String chatRoomName, - ProductListResponse product, + ChatRoomProductResponse product, String message, LocalDateTime timestamp, boolean isTradeCompleted @@ -20,7 +21,7 @@ public static ChatRoomResponse to(ChatRoom chatRoom, Product product, ChatMessag return new ChatRoomResponse( chatRoom.getId(), chatRoom.getChatRoomTitle(), - ProductListResponse.to(product), + ChatRoomProductResponse.to(product), chatMessage == null ? "" : chatMessage.getMessage(), chatMessage == null ? chatRoom.getCreatedAt() : chatMessage.getCreatedAt(), chatRoom.isTradeCompleted() diff --git a/src/main/java/com/uhdyl/backend/chat/repository/CustomChatRoomRepositoryImpl.java b/src/main/java/com/uhdyl/backend/chat/repository/CustomChatRoomRepositoryImpl.java index 7e970cc..434f86f 100644 --- a/src/main/java/com/uhdyl/backend/chat/repository/CustomChatRoomRepositoryImpl.java +++ b/src/main/java/com/uhdyl/backend/chat/repository/CustomChatRoomRepositoryImpl.java @@ -12,6 +12,7 @@ import com.uhdyl.backend.global.response.GlobalPageResponse; import com.uhdyl.backend.image.domain.QImage; import com.uhdyl.backend.product.domain.QProduct; +import com.uhdyl.backend.product.dto.response.ChatRoomProductResponse; import com.uhdyl.backend.product.dto.response.ProductListResponse; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -52,7 +53,7 @@ public GlobalPageResponse getChatRooms(Long userId, Pageable p qChatRoom.id, qChatRoom.chatRoomTitle, Projections.constructor( - ProductListResponse.class, + ChatRoomProductResponse.class, qProduct.id, qProduct.title, qProduct.price, From cfda9af03d1f6f282a35998cbc498c59f369236d Mon Sep 17 00:00:00 2001 From: kon28289 Date: Sat, 6 Sep 2025 16:30:06 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=EC=83=81=ED=92=88=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EA=B0=81=20?= =?UTF-8?q?=EC=83=81=ED=92=88=EC=9D=98=20=EC=B0=9C=20=ED=9A=9F=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=ED=95=A8=EA=BB=98=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/ProductListResponse.java | 18 ++++-------------- .../CustomProductRepositoryImpl.java | 7 ++++++- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/uhdyl/backend/product/dto/response/ProductListResponse.java b/src/main/java/com/uhdyl/backend/product/dto/response/ProductListResponse.java index 534845b..ad5123f 100644 --- a/src/main/java/com/uhdyl/backend/product/dto/response/ProductListResponse.java +++ b/src/main/java/com/uhdyl/backend/product/dto/response/ProductListResponse.java @@ -10,10 +10,11 @@ public record ProductListResponse( String sellerName, String sellerPicture, String mainImageUrl, - boolean isCompleted + boolean isCompleted, + Long zzimCount ) { @QueryProjection - public ProductListResponse(Long id, String title, Long price, String sellerName, String sellerPicture, String mainImageUrl, boolean isCompleted) { + public ProductListResponse(Long id, String title, Long price, String sellerName, String sellerPicture, String mainImageUrl, boolean isCompleted, Long zzimCount) { this.id = id; this.title = title; this.price = price; @@ -21,17 +22,6 @@ public ProductListResponse(Long id, String title, Long price, String sellerName, this.sellerPicture = sellerPicture; this.mainImageUrl = mainImageUrl; this.isCompleted = isCompleted; - } - - public static ProductListResponse to(Product product){ - return new ProductListResponse( - product.getId(), - product.getTitle(), - product.getPrice(), - product.getUser().getNickname(), - product.getUser().getPicture(), - product.getImages().get(0).getImageUrl(), - product.isSale() - ); + this.zzimCount = zzimCount; } } \ No newline at end of file diff --git a/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java b/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java index 7b7a8fa..6646677 100644 --- a/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java +++ b/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java @@ -200,6 +200,7 @@ public GlobalPageResponse getAllProducts(Pageable pageable) QProduct product = QProduct.product; QImage image = QImage.image; QUser user = QUser.user; + QZzim zzim = QZzim.zzim; PathBuilder entityPath = new PathBuilder<>(Product.class, "product"); @@ -213,13 +214,17 @@ public GlobalPageResponse getAllProducts(Pageable pageable) user.nickname.coalesce(user.name).coalesce(""), user.picture.coalesce(""), image.imageUrl, - product.isSale.not() + product.isSale.not(), + zzim.id.count() + )) .from(product) .leftJoin(product.images, image).on(image.imageOrder.eq(0L)) .leftJoin(product.user, user) + .leftJoin(zzim).on(zzim.product.id.eq(product.id)) .where(product.isSale.eq(true)) .orderBy(orderSpecifiers) + .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale, zzim.id) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); From 0b38fe0a16a0200a4daaa05164eb8aae8f5381d1 Mon Sep 17 00:00:00 2001 From: kon28289 Date: Sat, 6 Sep 2025 16:36:20 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EC=83=81=ED=92=88=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EC=8B=9C=20=EA=B0=81=20=EC=83=81=ED=92=88=EC=9D=98?= =?UTF-8?q?=20=EC=B0=9C=20=ED=9A=9F=EC=88=98=EB=A5=BC=20=ED=95=A8=EA=BB=98?= =?UTF-8?q?=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/repository/CustomProductRepositoryImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java b/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java index 6646677..21a0fd2 100644 --- a/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java +++ b/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java @@ -245,6 +245,7 @@ public GlobalPageResponse searchProducts(String keyword, Ca QProduct product = QProduct.product; QImage image = QImage.image; QUser user = QUser.user; + QZzim zzim = QZzim.zzim; BooleanBuilder whereClause = new BooleanBuilder(); whereClause.and(product.isSale.eq(true)); @@ -269,13 +270,16 @@ public GlobalPageResponse searchProducts(String keyword, Ca user.nickname.coalesce(user.name).coalesce(""), user.picture.coalesce(""), image.imageUrl, - product.isSale.not() + product.isSale.not(), + zzim.id.count() )) .from(product) .leftJoin(product.user, user) .leftJoin(product.images, image).on(image.imageOrder.eq(0L)) + .leftJoin(zzim).on(zzim.product.id.eq(product.id)) .where(whereClause) .orderBy(orderSpecifiers) + .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale, zzim.id) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); From cec23bd1533f7ee7b3bf3299fa41e94f7561476c Mon Sep 17 00:00:00 2001 From: kon28289 Date: Sat, 6 Sep 2025 18:58:23 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20groupBy=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/CustomProductRepositoryImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java b/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java index 21a0fd2..a3d0235 100644 --- a/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java +++ b/src/main/java/com/uhdyl/backend/product/repository/CustomProductRepositoryImpl.java @@ -57,6 +57,7 @@ public MyProductListResponse getMyProducts(Long userId, Pageable pageable){ QProduct product = QProduct.product; QImage image = QImage.image; QUser user = QUser.user; + QZzim zzim = QZzim.zzim; PathBuilder entityPath = new PathBuilder<>(Product.class, "product"); @@ -70,12 +71,15 @@ public MyProductListResponse getMyProducts(Long userId, Pageable pageable){ user.nickname.coalesce(user.name).coalesce(""), user.picture, image.imageUrl.min(), - product.isSale.not() + product.isSale.not(), + zzim.id.count() )) .from(product) + .leftJoin(product.user, user) .leftJoin(product.images, image).on(image.imageOrder.eq(0L)) + .leftJoin(zzim).on(zzim.product.id.eq(product.id)) .where(product.user.id.eq(userId)) - .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, product.isSale) + .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale) .orderBy(orderSpecifiers) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) @@ -224,7 +228,7 @@ public GlobalPageResponse getAllProducts(Pageable pageable) .leftJoin(zzim).on(zzim.product.id.eq(product.id)) .where(product.isSale.eq(true)) .orderBy(orderSpecifiers) - .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale, zzim.id) + .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); @@ -279,7 +283,7 @@ public GlobalPageResponse searchProducts(String keyword, Ca .leftJoin(zzim).on(zzim.product.id.eq(product.id)) .where(whereClause) .orderBy(orderSpecifiers) - .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale, zzim.id) + .groupBy(product.id, product.title, product.price, user.nickname, user.name, user.picture, image.imageUrl, product.isSale) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch();