힘겹게 erd 기능을 반드시 필요한 필수기능과 그렇지 않은 심호기능으로 나눠서 우선 필수부터 해서 erd를 완성하고, 그것에 따라 api를 완성했다. 여기소 노란색이 필수구현이다.
그리고 내가 맡기로 한 부분이 바로 물품, 좋아요, 검색인데 검색에는 페이징을 적용한다고 한다. 그런데 난 그걸 모른다?? 거기다 캐시도 쓴다고? 난 그것도 모른다!! 그리고 소프트 딜리트도!!! 역시 그것도 모른다!!!
그래도 해볼수밖에... 뭐 좋은걸 배운다고 치기로 하자.
아는걸 하는것보다 그게 나으니까.
물론 검색기능도 해본적없다.
어쨋든 상품 조회의 리스폰스는 { id: Long, title: String, content: String, ImageUrl: String, created_At: LocalDateTime, price: Int, product_discount: Double, purchase_able: Boolean, rating_average: Double, Likes: Int },
등록의 리스폰스는 { id: Long, sellerId: Long, title: String, content: String, imageUrl: String, created_At: LocalDateTime, price: Int, purchase_able: Boolean, is_deleted : Boolean },
수정은 { id: Long title: String, content: String, ImageUrl: String, price: Int, purchase_able: Boolean, is_deleted : Boolean }
이것들을 전부 ProductResponse안에 넣어야 한다.
package com.teamsparta.moamoa.product.dto
import com.teamsparta.moamoa.product.model.Product
import java.time.LocalDateTime
data class ProductResponse(
val id: Long?,
val title: String,
val content: String,
val imageUrl: String,
val createdAt: LocalDateTime,
val price: Int,
val productDiscount: Double,
val purchaseAble: Boolean,
val ratingAverage: Double,
val likes: Int,
val isDeleted: Boolean
) {
constructor(product: Product) : this(
id = product.id,
title = product.title,
content = product.content,
imageUrl = product.imageUrl,
createdAt = product.createdAt,
price = product.price,
productDiscount = product.productDiscount,
purchaseAble = product.purchaseAble,
ratingAverage = product.ratingAverage,
likes = product.likes,
isDeleted = product.isDeleted
)
}
리퀘스트도 마찬가지다. 하나로 합치지 않았다가 물품 생성을 넣었을때 api명세서에서 필요한것이 { title: String, content: String, imageUrl: String, price: Int, purchase_able: Boolean, is_deleted : Boolean }
이것뿐이여서 그것만 넣었더니 오류가 났다.
No value passed for parameter 'likes', No value passed for parameter 'productDiscount', No value passed for parameter 'ratingAverage', No value passed for parameter 'sellerId'
이게 리퀘스트에 ''이 안의 부분이 안들어갔다는 뜻이라 넣어주니 문제가 해결되었다.
data class ProductRequest(
val title: String,
val content: String,
val imageUrl: String,
val price: Int,
val purchaseAble: Boolean,
val isDeleted: Boolean,
val likes: Int, // 추가
val productDiscount: Double, // 추가
val ratingAverage: Double, // 추가
val sellerId: Long // 추가
)
참고로
ModelNotFoundException은 상품 조회 시 해당 ID의 상품이 데이터베이스에 없을 때 발생하는 예외라서 상품을 조회하는 getProduct 메서드에서만 사용되고 다른 메서드인 getAllProducts와 createProduct에서는 ModelNotFoundException을 사용할 필요가 없다.