75 lines
1.7 KiB
JavaScript
75 lines
1.7 KiB
JavaScript
import joi from 'joi'
|
|
|
|
import { setJson, apiHandler } from '@/helpers/api'
|
|
import { productRepo, reviewRepo } from '@/helpers'
|
|
|
|
const getDetail = apiHandler(async (req, { params }) => {
|
|
const { id } = params
|
|
const result = await reviewRepo.getById(id)
|
|
return setJson({
|
|
data: result,
|
|
})
|
|
})
|
|
|
|
const update = apiHandler(
|
|
async (req, { params }) => {
|
|
const { id } = params
|
|
const body = await req.json()
|
|
const review = await reviewRepo.update(id, body)
|
|
const product = await productRepo.getById(review.product)
|
|
const reviews = await reviewRepo.getAll(
|
|
{ page: 0, page_size: 0 },
|
|
{
|
|
product: product?._id,
|
|
}
|
|
)
|
|
|
|
if (product && reviews.reviews.length) {
|
|
let { totalRating, totalReviews } = reviews.reviews.reduce(
|
|
(total, item) => {
|
|
if (item.status === 2) {
|
|
total.totalRating += item.rating
|
|
total.totalReviews += 1
|
|
}
|
|
return total
|
|
},
|
|
{ totalRating: 0, totalReviews: 0 }
|
|
)
|
|
await productRepo.update(review.product, {
|
|
numReviews: totalReviews,
|
|
rating: totalReviews ? totalRating / totalReviews : 0,
|
|
})
|
|
}
|
|
|
|
return setJson({
|
|
message: '更新成功',
|
|
})
|
|
},
|
|
{
|
|
isJwt: true,
|
|
identity: 'admin',
|
|
schema: joi.object({
|
|
status: joi.number().required(),
|
|
}),
|
|
}
|
|
)
|
|
|
|
const _delete = apiHandler(
|
|
async (req, { params }) => {
|
|
const { id } = params
|
|
await reviewRepo.delete(id)
|
|
return setJson({
|
|
message: '删除成功',
|
|
})
|
|
},
|
|
{
|
|
isJwt: true,
|
|
identity: 'root',
|
|
}
|
|
)
|
|
|
|
export const GET = getDetail
|
|
export const PATCH = update
|
|
export const DELETE = _delete
|
|
export const dynamic = 'force-dynamic'
|