MeshiTrack/packages/api/src/schemas/organizer-fill.schema.ts

55 lines
1.8 KiB
TypeScript

import mongoose from 'mongoose';
import { OrganizerFillStatus } from '@meshitrack/shared';
const organizerDeductionSchema = new mongoose.Schema(
{
cabinetItemId: { type: String, required: true },
quantityTaken: { type: Number, required: true },
},
{ _id: false },
);
const organizerFillItemSchema = new mongoose.Schema(
{
medicineId: { type: String, required: true },
medicineName: { type: String, required: true },
quantityNeeded: { type: Number, required: true },
quantityTaken: { type: Number, required: true },
wasShort: { type: Boolean, required: true },
shortage: { type: Number, required: true },
deductions: { type: [organizerDeductionSchema], required: true },
},
{ _id: false },
);
const organizerFillSchema = new mongoose.Schema(
{
householdId: { type: String, required: true },
userId: { type: String, required: true },
regimenId: { type: String, required: true },
regimenName: { type: String, required: true },
numberOfDays: { type: Number, required: true },
fillDate: { type: Date, required: true },
items: { type: [organizerFillItemSchema], required: true },
status: {
type: String,
enum: Object.values(OrganizerFillStatus),
required: true,
},
notes: { type: String },
},
{
timestamps: true,
toJSON: { virtuals: true },
toObject: { virtuals: true },
},
);
organizerFillSchema.index({ householdId: 1, userId: 1, fillDate: -1 });
organizerFillSchema.index({ householdId: 1, regimenId: 1, fillDate: -1 });
organizerFillSchema.index({ householdId: 1, status: 1 });
export const OrganizerFillModel = mongoose.model('OrganizerFill', organizerFillSchema);
export type OrganizerFillDocument = mongoose.InferSchemaType<typeof organizerFillSchema> & {
_id: mongoose.Types.ObjectId;
};