| Current Path : /home/deltalab/PMS/logistic-backend/src/models/orders/ |
| Current File : //home/deltalab/PMS/logistic-backend/src/models/orders/order.service.ts |
import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Order, OrderDocument } from './order.schema';
import { RouteService } from '../routes/route.service';
import { Route } from '../routes/route.schema';
import { Params } from 'src/common/interfaces/params';
@Injectable()
export class OrderService {
constructor(
private routeService: RouteService,
@InjectModel(Order.name)
private orderModel: Model<OrderDocument>,
) {}
async create(order: Order): Promise<Order> {
const createdCat = new this.orderModel(order);
return createdCat.save();
}
async delete(id: string): Promise<Order> {
return await this.orderModel.findByIdAndRemove(id);
}
async update(id: string, order: Order): Promise<Order> {
return await this.orderModel.findByIdAndUpdate(id, order, {
new: true,
});
}
async updateMany(orders: Order[]) {
const updatedOrderIds = [];
const bulk = this.orderModel.collection.initializeUnorderedBulkOp();
orders.forEach((order) => {
const orderToUpdate = new this.orderModel(order);
bulk.find({ _id: orderToUpdate._id }).updateOne({ $set: orderToUpdate });
updatedOrderIds.push(orderToUpdate._id);
});
await bulk.execute();
const updatedOrders = [];
for (let i = 0; i < updatedOrderIds.length; i++) {
const updatedOrder = await this.readById(updatedOrderIds[i]);
updatedOrders.push(updatedOrder);
}
return updatedOrders;
}
async readAll(params: Params): Promise<Order[]> {
// find all routes according to params
const routes: Route[] = await this.routeService.readAll(params);
// save all the order IDs from each route
const orderIds = [];
for (const route of routes) {
for (const address of route.addresses) {
for (const pickupOrder of address.pickupOrders) {
if (orderIds.indexOf(pickupOrder) === -1) {
orderIds.push(pickupOrder);
}
}
}
}
// find orders using order IDs
const orders: Order[] = [];
for (const orderId of orderIds) {
const order: Order = await this.orderModel.findById(orderId);
orders.push(order);
}
return orders;
}
async readById(id: number): Promise<Order> {
return await this.orderModel.findById(id).exec();
}
}