82 lines
1.8 KiB
JavaScript
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,
|
|
}
|