chore: add models
This commit is contained in:
647
docs/models/backend.qmd
Normal file
647
docs/models/backend.qmd
Normal file
@@ -0,0 +1,647 @@
|
||||
---
|
||||
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 };
|
||||
```
|
||||
Reference in New Issue
Block a user