From bd56e15f3cb640311585a55fb321c441d0cd6a6f Mon Sep 17 00:00:00 2001 From: MohammadHoseinPaymard Date: Tue, 7 Jan 2025 10:20:22 +0330 Subject: [PATCH] first_commit --- .gitignore | 2 + index.js | 104 +++++++++++++ package.json | 12 ++ result.js | 422 +++++++++++++++++++++++++++++++++++++++++++++++++++ schema.js | 379 +++++++++++++++++++++++++++++++++++++++++++++ schema.json | 379 +++++++++++++++++++++++++++++++++++++++++++++ schema.txt | 379 +++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1677 insertions(+) create mode 100644 .gitignore create mode 100644 index.js create mode 100644 package.json create mode 100644 result.js create mode 100644 schema.js create mode 100644 schema.json create mode 100644 schema.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2206544 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.codegpt \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..a856d9f --- /dev/null +++ b/index.js @@ -0,0 +1,104 @@ +const fs = require('fs'); + +const modelName = "user" + + +fs.writeFileSync("./result.js",""); +// خواندن فایل متنی +fs.readFile('schema.txt', 'utf8', (err, data) => { + if (err) { + console.error('Error reading file:', err); + return; + } + + // پردازش و تبدیل متن به آبجکت + const parsedObject = parseTextToObject(data); + console.log(parsedObject); +}); + +const sleep = (ms)=>{ + return new Promise(resolve=>{ + setTimeout(resolve,ms); + }) +} + +// تابع برای پردازش و تبدیل متن +function parseTextToObject(data) { + const cleanedData = data + .replace(/\/\/.*$/gm, '') // حذف کامنت‌ها + .replace(/(this\.DataTypes\.[A-Z]+)((\([0-9]{1,4}\))?)/g, '"$1$2"'); // ساده‌سازی نام DataTypes + try { + // return fs.(`(${cleanedData})`); + fs.writeFileSync("./schema.js",`module.exports = { schemaObject: ${cleanedData} }`,{encoding:"utf-8"}) + console.log("done") + getObject(); +} catch (error) { + console.error('Error parsing text to object:', error); + return null; + } +} + + +async function getObject(){ + console.log('in getobjects and wait 3 seconds') + await sleep(3000); + const {schemaObject} = require('./schema'); + console.log("schemaObject",schemaObject); + for(let keys in schemaObject){ + let dynamicContent= ""; + let dynamicContent2="" + let takeProperties = {} + let theType="string"; + for(let property in schemaObject[keys]){ + switch(property){ + case "type": + if(schemaObject[keys][property]?.includes("string".toUpperCase())){ + takeProperties[property] = schemaObject[keys][property].replace(/\([0-9]{1,4}\)/g,"").replace("this.DataTypes","DataType").replace(/\"/g,""); + theType="string"; + console.log(schemaObject[keys][property].replace(/\([0-9]{1-4}\)/g,"").replace(/\([0-9]{1-4}\)/g,"").replace("this.DataTypes","DataType")) + }else if(schemaObject[keys][property]?.includes("date".toUpperCase())){ + takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); + theType="Date"; + }else if(schemaObject[keys][property]?.includes("int".toUpperCase())){ + takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); + theType="number"; + }else if(schemaObject[keys][property]?.includes("char".toUpperCase())){ + takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); + theType="string"; + }else if(schemaObject[keys][property]?.includes("text".toUpperCase())){ + takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); + theType="string"; + }else if(schemaObject[keys][property]?.includes("bool".toUpperCase())){ + takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); + theType="boolean"; + }else{ + console.log('oh what was it !!!!'); + console.log(property,schemaObject[keys][property]); + console.log("--------------------------------------------") + takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); + theType="string"; + } + break; + case "regex": + const regexContent = schemaObject[keys][property]; + takeProperties[property] = schemaObject[keys][property]; + takeProperties['validate'] = `{is:/${regexContent}}/}` + break; + default: + takeProperties[property] = schemaObject[keys][property]; + break; + } + } + for(let i in takeProperties){ + dynamicContent2+=`\n\t${i}:${JSON.stringify(takeProperties[i])},` + } + + dynamicContent2=dynamicContent2.replace(/\"(DataType\.[a-zA-Z]{1,10}(\([0-9]{1,5}\))?)\"/g,"$1").replace(/\"(\{is\:\/.{1,300}\})\"/gi,"$1") + dynamicContent+=`@Column({${dynamicContent2} +}) +${keys}:${theType};\n\n` + fs.appendFileSync("./result.js",dynamicContent); + console.log('append') + } + console.log("finish") +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..ab51313 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "convert-schema-to-nestjs-model", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} diff --git a/result.js b/result.js new file mode 100644 index 0000000..2f31f7c --- /dev/null +++ b/result.js @@ -0,0 +1,422 @@ +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"نام کاربری", + category:"اطلاعات هویتی", + regex:"[^a-zA-Z0-9@_./-]+", + validate:{is:/[^a-zA-Z0-9@_./-]+}/}, +}) +username:string; + +@Column({ + type:DataType.TEXT, + allowNull:true, + desc:"کلمه‌ی عبور", +}) +password:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"نام", + category:"اطلاعات هویتی", + regex:"[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + validate:{is:/[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+}/}, + readOnly:true, +}) +firstName:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"نام خانوادگی", + category:"اطلاعات هویتی", + regex:"[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + validate:{is:/[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+}/}, + readOnly:true, +}) +lastName:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"نام نمایشی", + category:"اطلاعات هویتی", + regex:"[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + validate:{is:/[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+}/}, +}) +displayName:string; + +@Column({ + type:DataType.STRING, + allowNull:false, + desc:"کد ملی", + category:"اطلاعات هویتی", + inputType:"number", + maxLength:16, +}) +nationalId:string; + +@Column({ + type:DataType.DATE, + allowNull:false, + desc:"تاریخ تولد", + category:"اطلاعات هویتی", + max:"now()", +}) +birthDate:Date; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + desc:"جنسیت", + category:"اطلاعات هویتی", + options:{"0":"مرد","1":"زن","2":"دوجنس و نامشخص"}, +}) +gender:number; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"نام پدر", + category:"اطلاعات هویتی", + regex:"[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + validate:{is:/[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+}/}, + readOnly:true, +}) +fatherName:string; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + defaultValue:1, + desc:"وضعیت", + options:{"0":"غیر فعال","1":"فعال","-1":"مسدود شده"}, +}) +status:number; + +@Column({ + type:DataType.CHAR(11), + allowNull:true, + validate:{"is":{}}, + desc:"تلفن همراه", + required:true, + category:"اطلاعات تماس", + inputType:"number", + maxLength:11, +}) +cellphone:string; + +@Column({ + type:DataType.CHAR(11), + allowNull:true, + desc:"تلفن ثابت", + category:"اطلاعات تماس", + inputType:"number", + maxLength:11, +}) +phone:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"ایمیل", + category:"اطلاعات تماس", +}) +email:string; + +@Column({ + type:DataType.TEXT, + allowNull:true, + desc:"آدرس", + category:"اطلاعات تماس", +}) +address:string; + +@Column({ + type:DataType.CHAR(10), + allowNull:true, + desc:"کد پستی", + category:"اطلاعات تماس", + inputType:"number", + maxLength:10, +}) +postalCode:string; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + validate:{"min":0,"max":10}, + desc:"میزان تحصیلات", + options:{"0":"بی‌سواد","1":"ابتدایی","2":"راهنمایی","3":"دیپلم","4":"کاردانی","5":"کارشناسی","6":"کارشناسی ارشد","7":"دکترای عمومی","8":"دکترای حرفه‌ای","9":"دکترای تخصصی","10":"فوق تخصص"}, + category:"تحصیلات کاربر", +}) +education:number; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"رشته‌ی تحصیلی", + category:"تحصیلات کاربر", + maxLength:32, +}) +studiesField:string; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + maxLength:4, + desc:"سال اخذ مدرک", + category:"تحصیلات کاربر", +}) +graduationYear:number; + +@Column({ + type:DataType.BIGINT, + allowNull:true, + desc:"معرف", + maxLength:32, + category:"اطلاعات هویتی", +}) +referenceId:number; + +@Column({ + type:DataType.BOOLEAN, + allowNull:true, + defaultValue:false, + desc:"آیا کاربر از اتباع خارجی است؟", + category:"اطلاعات هویتی", + options:{"0":"خیر","1":"بله"}, +}) +isForeigner:boolean; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + defaultValue:0, + desc:"وضعیت استعلام ثبت احوال", + options:{"0":"استعلام نشده","1":"استعلام موفق","-1":"استعلام ناموفق"}, + category:"اطلاعات هویتی", +}) +civilRegValidation:number; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + desc:"تعداد فرزندان", + category:"اطلاعات هویتی", + maxLength:2, +}) +childCount:number; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + desc:"وضعیت تاهل", + category:"اطلاعات هویتی", + options:{"0":"مجرد","1":"متاهل"}, +}) +maritalStatus:number; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + desc:"وضعیت نظام وظیفه", + category:"اطلاعات هویتی", + options:{"1":"معافیت پزشکی","2":"معافیت غیر پزشکی","3":"انجام شده","4":"انجام نشده"}, +}) +militaryServiceStatus:number; + +@Column({ + type:DataType.TEXT, + allowNull:true, + desc:"علت معافیت", + category:"اطلاعات هویتی", +}) +reasonOfExemption:string; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + desc:"سال معافیت", + maxLength:4, + category:"اطلاعات هویتی", +}) +yearOfExemption:number; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"بند معافیت", + category:"اطلاعات هویتی", +}) +paraghraphOfExemption:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"ماده معافیت", + category:"اطلاعات هویتی", + maxLength:32, +}) +noteOfExemption:string; + +@Column({ + type:DataType.DATEONLY, + allowNull:true, + desc:"تاریخ صدور مجوز", + category:"اطلاعات هویتی", +}) +permitIssueDate:Date; + +@Column({ + type:DataType.DATEONLY, + allowNull:true, + desc:"تاریخ پایان اعتبار مجوز", + category:"اطلاعات هویتی", +}) +permitExpirationDate:Date; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل مجوز", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +premitFileId:string; + +@Column({ + type:DataType.SMALLINT, + allowNull:true, + desc:"تعداد سال‌های تجربه‌ی کار", + category:"اطلاعات هویتی", + maxLength:"2", +}) +experienceYears:number; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل کارت ملی", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +nationalCardFileId:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل شناسنامه", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +birthCertificateFileId:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل پایان خدمت", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +militaryServiceCardFileId:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل عدم سوء پیشینه", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +policeClearanceFileId:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل عکس پرسنلی", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +personalImageFileId:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"فایل کارت بهداشت", + category:"ضمائم", + relation:"file", + inputType:"file", +}) +healthCardFileId:string; + +@Column({ + type:DataType.BIGINT, + allowNull:true, + desc:"آخرین نقش و سمت انتخاب شده", + relation:"userRole", + readOnly:true, + category:"اطلاعات ورود", +}) +lastUserRoleId:number; + +@Column({ + type:DataType.TEXT, + allowNull:true, + category:"ضمائم", + inputType:"sign", +}) +signatureFile:string; + +@Column({ + type:DataType.STRING, + allowNull:true, + desc:"تصویر امضا", + relation:"file", + category:"ضمائم", +}) +signatureFileId:string; + +@Column({ + type:DataType.DATE, + allowNull:true, + desc:"زمان آخرین ورود موفق", + readOnly:true, + category:"اطلاعات ورود", +}) +lastSuccessfulLogin:Date; + +@Column({ + type:DataType.DATE, + allowNull:true, + desc:"زمان آخرین تلاش ورود ناموفق", + readOnly:true, + category:"اطلاعات ورود", +}) +lastFailedLogin:Date; + +@Column({ + type:DataType.INTEGER, + allowNull:false, + defaultValue:0, + desc:"تعداد دفعات ورود ناموفق قبل از ورود موفق", + readOnly:true, + category:"اطلاعات ورود", +}) +consecutiveLoginFailures:number; + +@Column({ + type:DataType.DATE, + allowNull:true, + desc:"زمان پایان محدودیت ورود", + readOnly:true, + category:"اطلاعات ورود", +}) +loginRestrictionEnd:Date; + diff --git a/schema.js b/schema.js new file mode 100644 index 0000000..6b70e65 --- /dev/null +++ b/schema.js @@ -0,0 +1,379 @@ +module.exports = { schemaObject: { + + username: { + type: "this.DataTypes.STRING(50)", + allowNull: true, + desc: "نام کاربری", + category: "اطلاعات هویتی", + regex: "[^a-zA-Z0-9@_./-]+", + }, + password: { + type: "this.DataTypes.TEXT", + allowNull: true, + desc: "کلمه‌ی عبور", + }, + firstName: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "نام", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + lastName: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "نام خانوادگی", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + displayName: { + type: "this.DataTypes.STRING(128)", + allowNull: true, + desc: "نام نمایشی", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + }, + + nationalId: { + type: "this.DataTypes.STRING(16)", + allowNull: false, + desc: "کد ملی", + category: "اطلاعات هویتی", + inputType: "number", + maxLength: 16, + }, + birthDate: { + type: "this.DataTypes.DATE", + allowNull: false, + desc: "تاریخ تولد", + category: "اطلاعات هویتی", + max: "now()", + }, + gender: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + desc: "جنسیت", + category: "اطلاعات هویتی", + options: { + 0: "مرد", + 1: "زن", + 2: "دوجنس و نامشخص", + }, + }, + fatherName: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "نام پدر", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + status: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + defaultValue: 1, + desc: "وضعیت", + options: { + "-1": "مسدود شده", + 0: "غیر فعال", + 1: "فعال", + }, + }, + + + cellphone: { + type: "this.DataTypes.CHAR(11)", + allowNull: true, + validate: { is: /^09[0-9]{9}/ }, + desc: "تلفن همراه", + required: true, + category: "اطلاعات تماس", + inputType: "number", + maxLength: 11, + }, + phone: { + type: "this.DataTypes.CHAR(11)", + allowNull: true, + desc: "تلفن ثابت", + category: "اطلاعات تماس", + inputType: "number", + maxLength: 11, + }, + email: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "ایمیل", + category: "اطلاعات تماس", + }, + address: { + type: "this.DataTypes.TEXT", + allowNull: true, + desc: "آدرس", + category: "اطلاعات تماس", + }, + postalCode: { + type: "this.DataTypes.CHAR(10)", + allowNull: true, + desc: "کد پستی", + category: "اطلاعات تماس", + inputType: "number", + maxLength: 10, + }, + + + education: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + validate: { min: 0, max: 10 }, + desc: `میزان تحصیلات`, + options: { + 0: "بی‌سواد", + 1: "ابتدایی", + 2: "راهنمایی", + 3: "دیپلم", + 4: "کاردانی", + 5: "کارشناسی", + 6: "کارشناسی ارشد", + 7: "دکترای عمومی", + 8: "دکترای حرفه‌ای", + 9: "دکترای تخصصی", + 10: "فوق تخصص", + }, + category: "تحصیلات کاربر", + }, + studiesField: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "رشته‌ی تحصیلی", + category: "تحصیلات کاربر", + maxLength: 32, + }, + graduationYear: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + maxLength: 4, + desc: "سال اخذ مدرک", + category: "تحصیلات کاربر", + }, + + referenceId: { + type: "this.DataTypes.BIGINT", + allowNull: true, + desc: "معرف", + maxLength: 32, + category: "اطلاعات هویتی", + }, + + isForeigner: { + type: "this.DataTypes.BOOLEAN", + allowNull: true, + defaultValue: false, + desc: "آیا کاربر از اتباع خارجی است؟", + category: "اطلاعات هویتی", + options: { + 0: "خیر", + 1: "بله", + }, + }, + civilRegValidation: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + defaultValue: 0, + desc: "وضعیت استعلام ثبت احوال", + options: { + "-1": "استعلام ناموفق", + 0: "استعلام نشده", + 1: "استعلام موفق", + }, + category: "اطلاعات هویتی", + }, + childCount: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + desc: "تعداد فرزندان", + category: "اطلاعات هویتی", + maxLength: 2, + }, + maritalStatus: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + desc: `وضعیت تاهل`, + category: "اطلاعات هویتی", + options: { + 0: "مجرد", + 1: "متاهل", + }, + }, + militaryServiceStatus: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + desc: `وضعیت نظام وظیفه`, + category: "اطلاعات هویتی", + options: { + 1: "معافیت پزشکی", + 2: "معافیت غیر پزشکی", + 3: "انجام شده", + 4: "انجام نشده", + }, + }, + reasonOfExemption: { + type: "this.DataTypes.TEXT", + allowNull: true, + desc: "علت معافیت", + category: "اطلاعات هویتی", + }, + yearOfExemption: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + desc: "سال معافیت", + maxLength: 4, + category: "اطلاعات هویتی", + }, + paraghraphOfExemption: { + type: "this.DataTypes.STRING(4)", + allowNull: true, + desc: "بند معافیت", + category: "اطلاعات هویتی", + }, + noteOfExemption: { + type: "this.DataTypes.STRING(4)", + allowNull: true, + desc: "ماده معافیت", + category: "اطلاعات هویتی", + maxLength: 32, + }, + + permitIssueDate: { + type: "this.DataTypes.DATEONLY", + allowNull: true, + desc: "تاریخ صدور مجوز", + category: "اطلاعات هویتی", + }, + permitExpirationDate: { + type: "this.DataTypes.DATEONLY", + allowNull: true, + desc: "تاریخ پایان اعتبار مجوز", + category: "اطلاعات هویتی", + }, + premitFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل مجوز", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + experienceYears: { + type: "this.DataTypes.SMALLINT", + allowNull: true, + desc: "تعداد سال‌های تجربه‌ی کار", + category: "اطلاعات هویتی", + maxLength: "2", + }, + nationalCardFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل کارت ملی", + category: "اطلاعات هویتی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + birthCertificateFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل شناسنامه", + category: "اطلاعات هویتی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + militaryServiceCardFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل پایان خدمت", + + category: "ضمائم", + relation: "file", + inputType: "file", + }, + policeClearanceFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل عدم سوء پیشینه", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + personalImageFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل عکس پرسنلی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + healthCardFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "فایل کارت بهداشت", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + + + + lastUserRoleId: { + type: "this.DataTypes.BIGINT", + allowNull: true, + desc: "آخرین نقش و سمت انتخاب شده", + relation: "userRole", + readOnly: true, + category: "اطلاعات ورود", + }, + signatureFile: { + type: "this.DataTypes.TEXT", + allowNull: true, + category: "ضمائم", + inputType: "sign", + }, + signatureFileId: { + type: "this.DataTypes.STRING", + allowNull: true, + desc: "تصویر امضا", + relation: "file", + category: "ضمائم", + }, + lastSuccessfulLogin: { + type: "this.DataTypes.DATE", + allowNull: true, + desc: "زمان آخرین ورود موفق", + readOnly: true, + category: "اطلاعات ورود", + }, + lastFailedLogin: { + type: "this.DataTypes.DATE", + allowNull: true, + desc: "زمان آخرین تلاش ورود ناموفق", + readOnly: true, + category: "اطلاعات ورود", + }, + consecutiveLoginFailures: { + type: "this.DataTypes.INTEGER", + allowNull: false, + defaultValue: 0, + desc: "تعداد دفعات ورود ناموفق قبل از ورود موفق", + readOnly: true, + category: "اطلاعات ورود", + }, + loginRestrictionEnd: { + type: "this.DataTypes.DATE", + allowNull: true, + desc: "زمان پایان محدودیت ورود", + readOnly: true, + category: "اطلاعات ورود", + } +} } \ No newline at end of file diff --git a/schema.json b/schema.json new file mode 100644 index 0000000..e3f32ed --- /dev/null +++ b/schema.json @@ -0,0 +1,379 @@ +{ + // category: 'اطلاعات هویتی' + username: { + type: this.DataTypes.STRING(50), + allowNull: true, + desc: "نام کاربری", + category: "اطلاعات هویتی", + regex: "[^a-zA-Z0-9@_./-]+", + }, + password: { + type: this.DataTypes.TEXT, + allowNull: true, + desc: "کلمه‌ی عبور", + }, + firstName: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "نام", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + lastName: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "نام خانوادگی", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + displayName: { + type: this.DataTypes.STRING(128), + allowNull: true, + desc: "نام نمایشی", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + }, + + nationalId: { + type: this.DataTypes.STRING(16), + allowNull: false, + desc: "کد ملی", + category: "اطلاعات هویتی", + inputType: "number", + maxLength: 16, + }, + birthDate: { + type: this.DataTypes.DATE, + allowNull: false, + desc: "تاریخ تولد", + category: "اطلاعات هویتی", + max: "now()", + }, + gender: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "جنسیت", + category: "اطلاعات هویتی", + options: { + 0: "مرد", + 1: "زن", + 2: "دوجنس و نامشخص", + }, + }, + fatherName: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "نام پدر", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + status: { + type: this.DataTypes.SMALLINT, + allowNull: true, + defaultValue: 1, + desc: "وضعیت", + options: { + "-1": "مسدود شده", + 0: "غیر فعال", + 1: "فعال", + }, + }, + + // category: 'اطلاعات تماس' + cellphone: { + type: this.DataTypes.CHAR(11), + allowNull: true, + validate: { is: /^09[0-9]{9}/ }, + desc: "تلفن همراه", + required: true, + category: "اطلاعات تماس", + inputType: "number", + maxLength: 11, + }, + phone: { + type: this.DataTypes.CHAR(11), + allowNull: true, + desc: "تلفن ثابت", + category: "اطلاعات تماس", + inputType: "number", + maxLength: 11, + }, + email: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "ایمیل", + category: "اطلاعات تماس", + }, + address: { + type: this.DataTypes.TEXT, + allowNull: true, + desc: "آدرس", + category: "اطلاعات تماس", + }, + postalCode: { + type: this.DataTypes.CHAR(10), + allowNull: true, + desc: "کد پستی", + category: "اطلاعات تماس", + inputType: "number", + maxLength: 10, + }, + + // category: 'تحصیلات کاربر' + education: { + type: this.DataTypes.SMALLINT, + allowNull: true, + validate: { min: 0, max: 10 }, + desc: `میزان تحصیلات`, + options: { + 0: "بی‌سواد", + 1: "ابتدایی", + 2: "راهنمایی", + 3: "دیپلم", + 4: "کاردانی", + 5: "کارشناسی", + 6: "کارشناسی ارشد", + 7: "دکترای عمومی", + 8: "دکترای حرفه‌ای", + 9: "دکترای تخصصی", + 10: "فوق تخصص", + }, + category: "تحصیلات کاربر", + }, + studiesField: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "رشته‌ی تحصیلی", + category: "تحصیلات کاربر", + maxLength: 32, + }, + graduationYear: { + type: this.DataTypes.SMALLINT, + allowNull: true, + maxLength: 4, + desc: "سال اخذ مدرک", + category: "تحصیلات کاربر", + }, + + referenceId: { + type: this.DataTypes.BIGINT, + allowNull: true, + desc: "معرف", + maxLength: 32, + category: "اطلاعات هویتی", + }, + + isForeigner: { + type: this.DataTypes.BOOLEAN, + allowNull: true, + defaultValue: false, + desc: "آیا کاربر از اتباع خارجی است؟", + category: "اطلاعات هویتی", + options: { + 0: "خیر", + 1: "بله", + }, + }, + civilRegValidation: { + type: this.DataTypes.SMALLINT, + allowNull: true, + defaultValue: 0, + desc: "وضعیت استعلام ثبت احوال", + options: { + "-1": "استعلام ناموفق", + 0: "استعلام نشده", + 1: "استعلام موفق", + }, + category: "اطلاعات هویتی", + }, + childCount: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "تعداد فرزندان", + category: "اطلاعات هویتی", + maxLength: 2, + }, + maritalStatus: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: `وضعیت تاهل`, + category: "اطلاعات هویتی", + options: { + 0: "مجرد", + 1: "متاهل", + }, + }, + militaryServiceStatus: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: `وضعیت نظام وظیفه`, + category: "اطلاعات هویتی", + options: { + 1: "معافیت پزشکی", + 2: "معافیت غیر پزشکی", + 3: "انجام شده", + 4: "انجام نشده", + }, + }, + reasonOfExemption: { + type: this.DataTypes.TEXT, + allowNull: true, + desc: "علت معافیت", + category: "اطلاعات هویتی", + }, + yearOfExemption: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "سال معافیت", + maxLength: 4, + category: "اطلاعات هویتی", + }, + paraghraphOfExemption: { + type: this.DataTypes.STRING(4), + allowNull: true, + desc: "بند معافیت", + category: "اطلاعات هویتی", + }, + noteOfExemption: { + type: this.DataTypes.STRING(4), + allowNull: true, + desc: "ماده معافیت", + category: "اطلاعات هویتی", + maxLength: 32, + }, + + permitIssueDate: { + type: this.DataTypes.DATEONLY, + allowNull: true, + desc: "تاریخ صدور مجوز", + category: "اطلاعات هویتی", + }, + permitExpirationDate: { + type: this.DataTypes.DATEONLY, + allowNull: true, + desc: "تاریخ پایان اعتبار مجوز", + category: "اطلاعات هویتی", + }, + premitFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل مجوز", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + experienceYears: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "تعداد سال‌های تجربه‌ی کار", + category: "اطلاعات هویتی", + maxLength: "2", + }, + nationalCardFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل کارت ملی", + category: "اطلاعات هویتی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + birthCertificateFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل شناسنامه", + category: "اطلاعات هویتی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + militaryServiceCardFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل پایان خدمت", + + category: "ضمائم", + relation: "file", + inputType: "file", + }, + policeClearanceFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل عدم سوء پیشینه", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + personalImageFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل عکس پرسنلی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + healthCardFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل کارت بهداشت", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + + // + + lastUserRoleId: { + type: this.DataTypes.BIGINT, + allowNull: true, + desc: "آخرین نقش و سمت انتخاب شده", + relation: "userRole", + readOnly: true, + category: "اطلاعات ورود", + }, + signatureFile: { + type: this.DataTypes.TEXT, + allowNull: true, + category: "ضمائم", + inputType: "sign", + }, + signatureFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "تصویر امضا", + relation: "file", + category: "ضمائم", + }, + lastSuccessfulLogin: { + type: this.DataTypes.DATE, + allowNull: true, + desc: "زمان آخرین ورود موفق", + readOnly: true, + category: "اطلاعات ورود", + }, + lastFailedLogin: { + type: this.DataTypes.DATE, + allowNull: true, + desc: "زمان آخرین تلاش ورود ناموفق", + readOnly: true, + category: "اطلاعات ورود", + }, + consecutiveLoginFailures: { + type: this.DataTypes.INTEGER, + allowNull: false, + defaultValue: 0, + desc: "تعداد دفعات ورود ناموفق قبل از ورود موفق", + readOnly: true, + category: "اطلاعات ورود", + }, + loginRestrictionEnd: { + type: this.DataTypes.DATE, + allowNull: true, + desc: "زمان پایان محدودیت ورود", + readOnly: true, + category: "اطلاعات ورود", + }, + } \ No newline at end of file diff --git a/schema.txt b/schema.txt new file mode 100644 index 0000000..6ac5cf3 --- /dev/null +++ b/schema.txt @@ -0,0 +1,379 @@ +{ + // category: 'اطلاعات هویتی' + username: { + type: this.DataTypes.STRING(50), + allowNull: true, + desc: "نام کاربری", + category: "اطلاعات هویتی", + regex: "[^a-zA-Z0-9@_./-]+", + }, + password: { + type: this.DataTypes.TEXT, + allowNull: true, + desc: "کلمه‌ی عبور", + }, + firstName: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "نام", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + lastName: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "نام خانوادگی", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + displayName: { + type: this.DataTypes.STRING(128), + allowNull: true, + desc: "نام نمایشی", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + }, + + nationalId: { + type: this.DataTypes.STRING(16), + allowNull: false, + desc: "کد ملی", + category: "اطلاعات هویتی", + inputType: "number", + maxLength: 16, + }, + birthDate: { + type: this.DataTypes.DATE, + allowNull: false, + desc: "تاریخ تولد", + category: "اطلاعات هویتی", + max: "now()", + }, + gender: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "جنسیت", + category: "اطلاعات هویتی", + options: { + 0: "مرد", + 1: "زن", + 2: "دوجنس و نامشخص", + }, + }, + fatherName: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "نام پدر", + category: "اطلاعات هویتی", + regex: "[^ آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ]+", + readOnly: true, + }, + status: { + type: this.DataTypes.SMALLINT, + allowNull: true, + defaultValue: 1, + desc: "وضعیت", + options: { + "-1": "مسدود شده", + 0: "غیر فعال", + 1: "فعال", + }, + }, + + // category: 'اطلاعات تماس' + cellphone: { + type: this.DataTypes.CHAR(11), + allowNull: true, + validate: { is: /^09[0-9]{9}/ }, + desc: "تلفن همراه", + required: true, + category: "اطلاعات تماس", + inputType: "number", + maxLength: 11, + }, + phone: { + type: this.DataTypes.CHAR(11), + allowNull: true, + desc: "تلفن ثابت", + category: "اطلاعات تماس", + inputType: "number", + maxLength: 11, + }, + email: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "ایمیل", + category: "اطلاعات تماس", + }, + address: { + type: this.DataTypes.TEXT, + allowNull: true, + desc: "آدرس", + category: "اطلاعات تماس", + }, + postalCode: { + type: this.DataTypes.CHAR(10), + allowNull: true, + desc: "کد پستی", + category: "اطلاعات تماس", + inputType: "number", + maxLength: 10, + }, + + // category: 'تحصیلات کاربر' + education: { + type: this.DataTypes.SMALLINT, + allowNull: true, + validate: { min: 0, max: 10 }, + desc: `میزان تحصیلات`, + options: { + 0: "بی‌سواد", + 1: "ابتدایی", + 2: "راهنمایی", + 3: "دیپلم", + 4: "کاردانی", + 5: "کارشناسی", + 6: "کارشناسی ارشد", + 7: "دکترای عمومی", + 8: "دکترای حرفه‌ای", + 9: "دکترای تخصصی", + 10: "فوق تخصص", + }, + category: "تحصیلات کاربر", + }, + studiesField: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "رشته‌ی تحصیلی", + category: "تحصیلات کاربر", + maxLength: 32, + }, + graduationYear: { + type: this.DataTypes.SMALLINT, + allowNull: true, + maxLength: 4, + desc: "سال اخذ مدرک", + category: "تحصیلات کاربر", + }, + + referenceId: { + type: this.DataTypes.BIGINT, + allowNull: true, + desc: "معرف", + maxLength: 32, + category: "اطلاعات هویتی", + }, + + isForeigner: { + type: this.DataTypes.BOOLEAN, + allowNull: true, + defaultValue: false, + desc: "آیا کاربر از اتباع خارجی است؟", + category: "اطلاعات هویتی", + options: { + 0: "خیر", + 1: "بله", + }, + }, + civilRegValidation: { + type: this.DataTypes.SMALLINT, + allowNull: true, + defaultValue: 0, + desc: "وضعیت استعلام ثبت احوال", + options: { + "-1": "استعلام ناموفق", + 0: "استعلام نشده", + 1: "استعلام موفق", + }, + category: "اطلاعات هویتی", + }, + childCount: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "تعداد فرزندان", + category: "اطلاعات هویتی", + maxLength: 2, + }, + maritalStatus: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: `وضعیت تاهل`, + category: "اطلاعات هویتی", + options: { + 0: "مجرد", + 1: "متاهل", + }, + }, + militaryServiceStatus: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: `وضعیت نظام وظیفه`, + category: "اطلاعات هویتی", + options: { + 1: "معافیت پزشکی", + 2: "معافیت غیر پزشکی", + 3: "انجام شده", + 4: "انجام نشده", + }, + }, + reasonOfExemption: { + type: this.DataTypes.TEXT, + allowNull: true, + desc: "علت معافیت", + category: "اطلاعات هویتی", + }, + yearOfExemption: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "سال معافیت", + maxLength: 4, + category: "اطلاعات هویتی", + }, + paraghraphOfExemption: { + type: this.DataTypes.STRING(4), + allowNull: true, + desc: "بند معافیت", + category: "اطلاعات هویتی", + }, + noteOfExemption: { + type: this.DataTypes.STRING(4), + allowNull: true, + desc: "ماده معافیت", + category: "اطلاعات هویتی", + maxLength: 32, + }, + + permitIssueDate: { + type: this.DataTypes.DATEONLY, + allowNull: true, + desc: "تاریخ صدور مجوز", + category: "اطلاعات هویتی", + }, + permitExpirationDate: { + type: this.DataTypes.DATEONLY, + allowNull: true, + desc: "تاریخ پایان اعتبار مجوز", + category: "اطلاعات هویتی", + }, + premitFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل مجوز", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + experienceYears: { + type: this.DataTypes.SMALLINT, + allowNull: true, + desc: "تعداد سال‌های تجربه‌ی کار", + category: "اطلاعات هویتی", + maxLength: "2", + }, + nationalCardFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل کارت ملی", + category: "اطلاعات هویتی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + birthCertificateFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل شناسنامه", + category: "اطلاعات هویتی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + militaryServiceCardFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل پایان خدمت", + + category: "ضمائم", + relation: "file", + inputType: "file", + }, + policeClearanceFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل عدم سوء پیشینه", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + personalImageFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل عکس پرسنلی", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + healthCardFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "فایل کارت بهداشت", + category: "ضمائم", + relation: "file", + inputType: "file", + }, + + // + + lastUserRoleId: { + type: this.DataTypes.BIGINT, + allowNull: true, + desc: "آخرین نقش و سمت انتخاب شده", + relation: "userRole", + readOnly: true, + category: "اطلاعات ورود", + }, + signatureFile: { + type: this.DataTypes.TEXT, + allowNull: true, + category: "ضمائم", + inputType: "sign", + }, + signatureFileId: { + type: this.DataTypes.STRING, + allowNull: true, + desc: "تصویر امضا", + relation: "file", + category: "ضمائم", + }, + lastSuccessfulLogin: { + type: this.DataTypes.DATE, + allowNull: true, + desc: "زمان آخرین ورود موفق", + readOnly: true, + category: "اطلاعات ورود", + }, + lastFailedLogin: { + type: this.DataTypes.DATE, + allowNull: true, + desc: "زمان آخرین تلاش ورود ناموفق", + readOnly: true, + category: "اطلاعات ورود", + }, + consecutiveLoginFailures: { + type: this.DataTypes.INTEGER, + allowNull: false, + defaultValue: 0, + desc: "تعداد دفعات ورود ناموفق قبل از ورود موفق", + readOnly: true, + category: "اطلاعات ورود", + }, + loginRestrictionEnd: { + type: this.DataTypes.DATE, + allowNull: true, + desc: "زمان پایان محدودیت ورود", + readOnly: true, + category: "اطلاعات ورود", + } +} \ No newline at end of file