Your IP : 216.73.216.220


Current Path : /home/deltalab/PMS/logistic-backend/src/models/orders/
Upload File :
Current File : //home/deltalab/PMS/logistic-backend/src/models/orders/order.schema.ts

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { Coordinates } from '../shared/coordinates.schema';
import * as mongoose from 'mongoose';
import { PickupPoint } from '../pickup-points/pickup-point.schema';

export type OrderDocument = Order & Document;

enum OrderStatus {
  CONFIRMED = 'confirmed',
  SHIPPED = 'shipped',
  CLOSED = 'closed',
  CANCELED = 'canceled',
}

class Customer extends Document {
  @Prop()
  firstName: string;

  @Prop()
  lastName: string;

  @Prop()
  phoneNumber: string;
}

class ParcelData extends Document {
  @Prop()
  kilograms: number;

  @Prop()
  cubicMeters: number;

  @Prop()
  nPackages: number;
}

@Schema({ timestamps: true, versionKey: false })
export class Order {
  @Prop()
  _id: number;

  @Prop({ type: Customer })
  customer: Customer;

  @Prop({ required: true })
  address: string;

  @Prop({ type: Coordinates })
  coordinates: Coordinates;

  @Prop({ type: ParcelData })
  parcelData: ParcelData;

  @Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'PickupPoint' })
  pickupPoint: PickupPoint;

  @Prop({
    type: String,
    enum: Object.values(OrderStatus),
    default: OrderStatus.CONFIRMED,
  })
  status: OrderStatus;

  @Prop({ type: String })
  deliveryException: string;

  @Prop({ type: String })
  pickupException: string;
}

export const OrderSchema = SchemaFactory.createForClass(Order);