--- title: "مدل‌ها" author: "تیم توسعه" date: "2025-08-17" format: html lang: fa --- # فیلدهای موجود در دیتابیس مدل *درخواست* کاربر که شامل رویه‌های واردات، صادرات، ترانزیت، تدارکات، تجهیزات، سوخت‌رسانی، آب‌رسانی، عودت تجهیزات (ورود و خروج) می‌شود. ```js const mongoose = require('mongoose'); const REQUEST_STATUSES = { OPEN: 0, // باز IN_PROGRESS: 1, // در حال بررسی CLOSE: 2, // بسته شده END: 3, // پایان عملیات }; const REQUEST_PERMISSIONS_STATUSES = { NOT_HAS: 0, // ندارد HAS: 1, // دارد CANCEL: 2, // لغو شده IN_PROGRESS: 3, // در حال بررسی }; // ['صادرات', 'واردات', 'ترانزیت', 'آب رسانی', 'سوخت رسانی', 'تجهیزات', 'تدارکات'], const OPERATION_TYPES = { EXPORT: 0, IMPORT: 1, TRANSIT: 2, WATER: 3, FUEL: 4, EQUIPMENT: 5, PROVISION: 6, }; // یک تردد، چند تردد، شهری const TRAFFIC_TYPES = { ONE_DIRECTION: 0, MULTIPLE_DIRECTION: 1, CITY: 2, ENTRANCE_PERMISSION: 3, EXIT_PERMISSION: 4, }; // کانتینری، نفتی، عمومی const TERMINAL_OPTIONS = { CONTAINER: 0, OIL: 1, GENERAL: 2, SERVICE: 3, }; // تخلیه، بارگیری، تشریفات گمرکی const ENTRANCE_TRAFFIC_TYPES = { LOAD: 0, UNLOAD: 1, CUSTOM: 2, SERVICE: 3, }; const requestSchema = new mongoose.Schema( { کسی که درخواست ثبت میکنه - واردات صادرات و ... requestBy: { type: mongoose.Types.ObjectId, ref: 'User', }, به نمایندگی از ... درخواست‌ها ثبت میشه. نماینده در واقع requestFor: [ { type: mongoose.Types.ObjectId, ref: 'User', }, ], // نوع عملیات درخواست مثل واردات صادرات و ... operationType: { type: Number, required: [true, 'نوع عملیات الزامی می باشد.'], enum: Object.values(OPERATION_TYPES), }, // فیلدی حمل یکسره و عملیاتی در آن ذخیره میشود options: { type: String, }, // فیلدی که جهت در آن ذخیره میشود. جهت تخلیه، بارگیری و تشریفات گمرکی و ... entranceTrafficType: { type: Number, enum: Object.values(ENTRANCE_TRAFFIC_TYPES), }, // حساسیت کالا در این فیلد ذخیره میشود danger: [ { type: mongoose.Types.ObjectId, ref: 'dangerType', required: false, }, ], // تاییده نهایی نوع تردد که توسط ادمین وارد میشود traffic: { // تردد تایید شده توسط مجوز دهنده type: Number, enum: Object.values(TRAFFIC_TYPES), }, // اظهار نوع تردد که توسط کاربر ثبت میشود و نهایی نیست trafficType: { // اظهار تردد type: Number, enum: Object.values(TRAFFIC_TYPES), }, // پایانه‌ای که کالا برای آن ثبت می‌شود terminalOption: { type: Number, enum: Object.values(TERMINAL_OPTIONS), }, // آدرس فایل حواله سوخت و ... filename: { type: String, }, // نام محصول یا کالایی که کاربر وارد میکند name: { // نام بار type: String, trim: true, }, // شماره سفر voyageNumber: { type: String, }, // کد قبض انبار اگر کالا عمومی و یا کانتینری باشد receiptNumber: [ { type: String, trim: true, }, ], // تناژ کالا tonaj: { type: String, }, // عددی که برای تناژ استفاده میشود tonajNumber: { type: String, }, // واحد تناژ کالا tonajType: { type: String, }, // تعداد محصول یا بار packageNumber: { type: String, }, // شماره پلاک‌های ثبت شده برای درخواست کاربر plates: [ { type: mongoose.Types.ObjectId, ref: 'plates', required: false, }, ], // بدون استفاده truckNumber: { type: String, }, // اسم شناور vesselName: String, // اسم کشتی رانی صاحب شناور shipping: { type: String, }, // منطقه عملیاتی storeRoom: { type: mongoose.Types.ObjectId, ref: 'storeRoom', required: false, }, // نوع منطقه عملیاتی - که استفاده نمیشود storeRoomType: { type: String, }, // دستگاه نظارت درخواست supervisionDepartment: { type: mongoose.Types.ObjectId, ref: 'supervisionDepartment', required: false, }, // کاربری که برای درخواست مشاور است consultingUser: { type: String, }, consultingUsername: { type: String, }, consultingStatus: { type: String, }, supervisionStatus: { type: String, }, propertyBossStatus: { type: String, }, HSEStatus: { type: String, }, portBossStatus: { type: String, }, customsStatus: { type: String, }, selectedStores: { type: Array, }, // مقصد کالا destination: { type: mongoose.SchemaTypes.ObjectId, trim: true, ref: 'city', }, // مجوز یگان حفاظت permissionGuard: { // مجوز یگان حفاظت type: Number, enum: Object.values(REQUEST_PERMISSIONS_STATUSES), default: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS, }, // مجوز پایانه اسکله برای حرکت کردن ناوگان حمل از پایانه کامیونی permissionPier: { // مجوز اسکله type: Number, enum: Object.values(REQUEST_PERMISSIONS_STATUSES), default: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS, }, // اظهارات کوتاژ کاربر userCottages: [ //اظهار کوتاژ { type: String, trim: true, }, ], date: { type: Date, }, dateString: { type: String, }, // کامنت اسکله - بروز میشود pierComment: { type: String, }, // پایانه حمل terminalTruckName: { type: mongoose.Types.ObjectId, ref: 'terminals', required: false, }, // شماره حواله سوخت gasolineRequestNumber: { type: String, }, // شماره سفارش orderNumber: { type: String, }, // دروازه‌ای که درخواست برای gateName: { type: mongoose.Types.ObjectId, ref: 'gate', required: [true, 'نام دروازه الزامی می باشد.'], }, // کد رهگیری تولید شده requestNumber: { type: String, }, supervisionUser: { type: String, }, supervisionUsername: { type: String, }, propertyBossUser: { type: String, }, propertyBossUsername: { type: String, }, HSEUser: { type: String, }, HSEUsername: { type: String, }, portBossUser: { type: String, }, portBossUsername: { type: String, }, terminalUser: { type: String, }, terminalUsername: { type: String, }, permissionPierDate: { type: Date, }, permissionPierDateString: { type: String, }, // وضعیت درخواست کاربر status: { type: Number, enum: Object.values(REQUEST_STATUSES), default: REQUEST_STATUSES.IN_PROGRESS, }, // اظهارات کوتاژ کاربر تایید شده است یا نه cottageVerified: { type: Boolean, default: false, }, verfiedAt: { type: Date, required: false, }, cottages: [ // کوتاژهای تایید شده توسط سرویس استعلام گمرک { type: mongoose.Types.ObjectId, ref: 'cottage', required: false, }, ], // فیلدی برای کانتینر خالی emptyContainer: { type: Boolean, }, // اگر کالا خطرناک باشد unNumber: { type: String, }, // اگر کالا خطرناک باشد casNumber: { type: String, }, process: { // شروع فرآیند type: mongoose.SchemaTypes.ObjectId, ref: 'process', }, commodityList: [ // لیست اقلام { type: mongoose.SchemaTypes.ObjectId, ref: 'equipements', required: false, }, ], }, { timestamps: true } ); const Request = mongoose.model('request', requestSchema); module.exports = { Request, REQUEST_STATUSES, REQUEST_PERMISSIONS_STATUSES, TERMINAL_OPTIONS, TRAFFIC_TYPES, OPERATION_TYPES, }; ``` --- مدل مربوط به شماره پلاک درخواست‌ها که کاربر اطلاعات راننده را وارد می‌کند. ```js const mongoose = require('mongoose'); const { TRAFFIC_TYPES } = require('./request.model'); // وضعیت فعلی پلاک که در چه مرحله‌ای است const PLATE_STATES = { OUT_PORT: 0, IN_PORT: 1, CLOSED: 2, }; // پلاک مجوز حرکت دارد یا ندارد const PLATE_PERMISSIONS = { NOT_HAS: 0, HAS: 1, PENDING: 2, }; // یگان حفاظت مجوز ورود و خروج پلاک را بصورت اتوماتیک توسط دوربین پلاکخوان ثبت کرده یا بصورت دستی const GUARD_REGISTRATION_TYPES = { AUTO: 0, MANUAL: 1, }; // مدل پلاک const platesSchema = new mongoose.Schema( { // شماره پلاک plate: { type: String, trim: true, }, //مجوز ورود به بندر که هم یگان حفاظت برای چند ترددی و شهری صادر می کند و هم پایانه کامیونی permission: { type: Number, enum: Object.values(PLATE_PERMISSIONS), }, // مجوز یگان حفاظت permissionGuard: { type: Number, }, permissionGuardDate: { type: Date, }, status: { type: Number, }, // نوع ترددی که توسط ادمین ثبت شده است traffic: { type: Number, enum: Object.values(TRAFFIC_TYPES), }, // زمان ورود ناوگان حمل به درون بندر entranceTime: [ { type: Date, }, ], entranceTimeString: [ { type: String, }, ], // زمان خروج ناوگان حمل از بندر exitTime: [ { type: Date, }, ], exitTimeString: [ { type: String, }, ], // مجوز پایانه راهداری delfardTerminalTime: { type: Date, }, delfardTerminalTimeString: { type: String, }, // زمان مجوز گرفتن از پایانه کامیونی truckTerminalTime: { type: Date, }, truckTerminalTimeString: { type: String, }, // تخلف violationType: { type: String, }, violationComment: { type: String, }, // حساسیت کالایی که حمل میکند dangers: [ { type: mongoose.SchemaTypes.ObjectId, ref: 'dangerType', }, ], date: { type: Date, }, dateString: { type: String, }, // اگر درخواست از نوع کانتینری باشد شماره‌های کانتینر هم باید وارد شود containerNumbers: [ { type: String, }, ], closeDate: { type: Date, }, // اسم راننده driverName: { type: String, }, // شماره پاسپورت برای خارجی‌ها و کد ملی برای داخلی‌ها driverPersonalCode: { type: String, }, // شماره موبایل راننده driverMobile: { type: String, }, // ملیت راننده driverNationality: { type: String, }, // نوع ناوگان حمل truckType: { type: mongoose.SchemaTypes.ObjectId, ref: 'trucks', }, // کدی که اگر نوع ناوگان از نوع چادری یا یخچالی باشد TYnumber: { type: String, }, // درخواست کنسل شده است یا نه isCancel: { type: Boolean, }, bijakType: { type: String, }, bijakNumber: { type: Number, }, bijakTruckScaleNumber: { type: String, }, bijakUser: { type: String, }, bijakGCOMS: { type: Array, }, // درخواست برای بستن requestForClose: { type: Boolean, }, requestForCloseFullName: { type: String, }, // نوع پلاک که ایرانی خارجی و منطقه آزاد باشد plateOption: { type: String, }, plateState: { type: Number, enum: Object.values(PLATE_STATES), default: PLATE_STATES.OUT_PORT, }, // نوع ورود پلاک به بندر entranceGuardRegistrationType: { type: Number, enum: Object.values(GUARD_REGISTRATION_TYPES), }, // نوع خروج پلاک از بندر exitGuardRegistrationType: { type: Number, enum: Object.values(GUARD_REGISTRATION_TYPES), }, // transportation // شرکت حمل اگر درخواست شهری ثبت شود transportationCompany: { type: mongoose.SchemaTypes.ObjectId, ref: 'terminals', required: false, }, }, { timestamps: true } ); const Plate = mongoose.model('plates', platesSchema); module.exports = { Plate, PLATE_STATES, PLATE_PERMISSIONS }; ```