redhare-demo/helpers/db-repo/order-repo.js

82 lines
1.8 KiB
JavaScript

import { Product, Order } from '@/models'
import { db } from '..'
const getAll = async ({ page, page_size }, filter) => {
await db.connect()
const orders = await Order.find(filter)
.populate('user', '-password')
.skip((page - 1) * page_size)
.limit(page_size)
.sort({
createdAt: 'desc',
})
const ordersLength = await Order.countDocuments(filter)
await db.disconnect()
return {
orders,
ordersLength,
pagination: {
currentPage: page,
nextPage: page + 1,
previousPage: page - 1,
hasNextPage: page_size * page < ordersLength,
hasPreviousPage: page > 1,
lastPage: Math.ceil(ordersLength / page_size),
},
}
}
const getById = async id => {
await db.connect()
const result = await Order.findById(id)
if (!result) throw '订单不存在'
await db.disconnect()
return result
}
const create = async (id, params) => {
await db.connect()
const newOrder = new Order({
user: id,
...params,
})
params.cart.forEach(item => sold(item.productID, item.quantity, item.inStock, item.sold))
await newOrder.save()
await db.disconnect()
}
const sold = async (_id, quantity, oldStock, oldSold) => {
await Product.findByIdAndUpdate(
{ _id },
{
inStock: oldStock - quantity,
sold: quantity + oldSold,
}
)
}
const _delete = async id => {
await db.connect()
const order = await Order.findById(id)
if (!order) throw '订单不存在'
await Order.findByIdAndDelete(id)
await db.disconnect()
}
const update = async (id, params) => {
await db.connect()
const order = await Order.findById(id)
if (!order) throw '订单不存在'
await Order.findByIdAndUpdate({ _id: id }, { ...params })
await db.disconnect()
}
export const orderRepo = {
getAll,
getById,
create,
update,
delete: _delete,
}