redhare-demo/app/api/reviews/[id]/route.js

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'