diff --git a/docs/model.ndm2 b/docs/model.ndm2 index 9e5a081..b1bdadb 100644 --- a/docs/model.ndm2 +++ b/docs/model.ndm2 @@ -4095,404 +4095,6 @@ "dataCompressions": [] } }, - { - "objectType": "Table_MSSQL", - "name": "UserService", - "comment": "سرویس های کاربر", - "owner": "", - "isChangeTracking": false, - "isTrackColumnsUpdated": false, - "oldName": "UserService", - "isSystemTable": false, - "createTime": "", - "modifyTime": "", - "objectID": 4423, - "numberOfRows": 0, - "identityCurrent": 0, - "dataLength": 0, - "indexLength": 0, - "fields": [ - { - "objectType": "TableField_MSSQL", - "name": "UpdateUser", - "type": "UpdateCommand", - "size": -2147483648, - "isNullable": "Yes", - "scale": -2147483648, - "comment": "ویرایش کاربر", - "computedExpression": "", - "defaultValue": "", - "defaultValueType": "Others", - "schema": "", - "userDefinedType": "", - "collate": "", - "isWithValues": false, - "isFilestream": false, - "isColumnSet": false, - "isPersisted": false, - "isSparse": false, - "isRowGUIDColumn": false, - "oldName": "UpdateUser", - "computedBaseType": "", - "isDefaultConstraint": false, - "defaultConstraint": "", - "isIdentity": false, - "isExistingField": false, - "identitySeed": 0, - "identityIncrement": 0, - "identityIsNotForReplication": false - }, - { - "objectType": "TableField_MSSQL", - "name": "DeleteUser", - "type": "DeleteCommand", - "size": -2147483648, - "isNullable": "Yes", - "scale": -2147483648, - "comment": "حذف کاربر", - "computedExpression": "", - "defaultValue": "", - "defaultValueType": "Others", - "schema": "", - "userDefinedType": "", - "collate": "", - "isWithValues": false, - "isFilestream": false, - "isColumnSet": false, - "isPersisted": false, - "isSparse": false, - "isRowGUIDColumn": false, - "oldName": "DeleteUser", - "computedBaseType": "", - "isDefaultConstraint": false, - "defaultConstraint": "", - "isIdentity": false, - "isExistingField": false, - "identitySeed": 0, - "identityIncrement": 0, - "identityIsNotForReplication": false - }, - { - "objectType": "TableField_MSSQL", - "name": "GetUser", - "type": "GetOneQuery", - "size": -2147483648, - "isNullable": "Yes", - "scale": -2147483648, - "comment": "واکشی یک کاربر", - "computedExpression": "", - "defaultValue": "", - "defaultValueType": "Others", - "schema": "", - "userDefinedType": "", - "collate": "", - "isWithValues": false, - "isFilestream": false, - "isColumnSet": false, - "isPersisted": false, - "isSparse": false, - "isRowGUIDColumn": false, - "oldName": "GetUser", - "computedBaseType": "", - "isDefaultConstraint": false, - "defaultConstraint": "", - "isIdentity": false, - "isExistingField": false, - "identitySeed": 0, - "identityIncrement": 0, - "identityIsNotForReplication": false - }, - { - "objectType": "TableField_MSSQL", - "name": "GetAllUserByFilter", - "type": "GetAllByFilterQuery", - "size": -2147483648, - "isNullable": "Yes", - "scale": -2147483648, - "comment": "واکشی کاربر ها بر مبنای فیلتر", - "computedExpression": "", - "defaultValue": "", - "defaultValueType": "Others", - "schema": "", - "userDefinedType": "", - "collate": "", - "isWithValues": false, - "isFilestream": false, - "isColumnSet": false, - "isPersisted": false, - "isSparse": false, - "isRowGUIDColumn": false, - "oldName": "GetAllUserByFilter", - "computedBaseType": "", - "isDefaultConstraint": false, - "defaultConstraint": "", - "isIdentity": false, - "isExistingField": false, - "identitySeed": 0, - "identityIncrement": 0, - "identityIsNotForReplication": false - }, - { - "objectType": "TableField_MSSQL", - "name": "CreateNewOtpToken", - "type": "CreateCommand", - "size": -2147483648, - "isNullable": "Yes", - "scale": -2147483648, - "comment": "ایجاد توکن Otp جدید", - "computedExpression": "", - "defaultValue": "", - "defaultValueType": "Others", - "schema": "", - "userDefinedType": "", - "collate": "", - "isWithValues": false, - "isFilestream": false, - "isColumnSet": false, - "isPersisted": false, - "isSparse": false, - "isRowGUIDColumn": false, - "oldName": "CreateNewOtpToken", - "computedBaseType": "", - "isDefaultConstraint": false, - "defaultConstraint": "", - "isIdentity": false, - "isExistingField": false, - "identitySeed": 0, - "identityIncrement": 0, - "identityIsNotForReplication": false - }, - { - "objectType": "TableField_MSSQL", - "name": "VerifyOtpToken", - "type": "Command", - "size": -2147483648, - "isNullable": "Yes", - "scale": -2147483648, - "comment": "فعال سازی توکن", - "computedExpression": "", - "defaultValue": "", - "defaultValueType": "Others", - "schema": "", - "userDefinedType": "", - "collate": "", - "isWithValues": false, - "isFilestream": false, - "isColumnSet": false, - "isPersisted": false, - "isSparse": false, - "isRowGUIDColumn": false, - "oldName": "VerifyOtpToken", - "computedBaseType": "", - "isDefaultConstraint": false, - "defaultConstraint": "", - "isIdentity": false, - "isExistingField": false, - "identitySeed": 0, - "identityIncrement": 0, - "identityIsNotForReplication": false - } - ], - "indexes": [], - "foreignKeys": [ - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_UpdateUserRequest_1", - "fields": [ - "UpdateUser" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "UpdateUserRequest", - "referencedFields": [ - "Id" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": false, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_DeleteUserRequest_1", - "fields": [ - "DeleteUser" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "DeleteUserRequest", - "referencedFields": [ - "Id" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": false, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_GetUserResponse_1", - "fields": [ - "GetUser" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "GetUserResponse", - "referencedFields": [ - "Id" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": false, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_GetAllUserByFilterRequest_1", - "fields": [ - "GetAllUserByFilter" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "GetAllUserByFilterRequest", - "referencedFields": [ - "PaginationState" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": false, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_GetAllUserByFilterResponse_1", - "fields": [ - "GetAllUserByFilter" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "GetAllUserByFilterResponse", - "referencedFields": [ - "MetaData" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": false, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_CreateNewOtpTokenRequest_1", - "fields": [ - "CreateNewOtpToken" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "CreateNewOtpTokenRequest", - "referencedFields": [ - "Mobile" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": true, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_CreateNewOtpTokenResponse_1", - "fields": [ - "CreateNewOtpToken" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "CreateNewOtpTokenResponse", - "referencedFields": [ - "Success" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": true, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_VerifyOtpTokenResponse_1", - "fields": [ - "VerifyOtpToken" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "VerifyOtpTokenResponse", - "referencedFields": [ - "Success" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": true, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - }, - { - "objectType": "ForeignKey_MSSQL", - "name": "fk_UserService_VerifyOtpTokenRequest_1", - "fields": [ - "VerifyOtpToken" - ], - "referencedSchema": "FrontOffice", - "referencedTable": "VerifyOtpTokenRequest", - "referencedFields": [ - "Mobile" - ], - "onDelete": "", - "onUpdate": "", - "isNotForReplication": false, - "isEnabled": true, - "comment": "", - "sourceCardinality": "NoneRelationship", - "targetCardinality": "NoneRelationship", - "oldName": "" - } - ], - "uniques": [], - "checks": [], - "triggers": [], - "storage": { - "objectType": "Storage_MSSQL", - "name": "", - "oldName": "", - "storageType": "Default", - "filegroup": "", - "textImageFilegroup": "", - "filestreamFilegroup": "", - "partitionScheme": "", - "partitionColumn": "", - "filestreamPartitionScheme": "", - "dataCompressions": [] - } - }, { "objectType": "Table_MSSQL", "name": "VerifyOtpTokenResponse", @@ -12930,6 +12532,921 @@ "filestreamPartitionScheme": "", "dataCompressions": [] } + }, + { + "objectType": "Table_MSSQL", + "name": "UserService", + "comment": "سرویس های کاربر", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "UserService", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 4423, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "UpdateUser", + "type": "UpdateCommand", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "ویرایش کاربر", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "UpdateUser", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "DeleteUser", + "type": "DeleteCommand", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "حذف کاربر", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "DeleteUser", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "GetUser", + "type": "GetOneQuery", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "واکشی یک کاربر", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "GetUser", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "GetAllUserByFilter", + "type": "GetAllByFilterQuery", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "واکشی کاربر ها بر مبنای فیلتر", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "GetAllUserByFilter", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "CreateNewOtpToken", + "type": "CreateCommand", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "ایجاد توکن Otp جدید", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "CreateNewOtpToken", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "VerifyOtpToken", + "type": "Command", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "فعال سازی توکن", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "VerifyOtpToken", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "AdminGetJwtToken", + "type": "Query", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "واکشی توکن مدیر", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "AdminGetJwtToken", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "SetPasswordForUser", + "type": "Command", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "تنظیم کلمه عبور", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "SetPasswordForUser", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MSSQL", + "name": "_copy_13", + "fields": [], + "fillFactor": 0, + "oldName": "", + "isClustered": true, + "isPadded": false, + "noRecomputeStatistics": false, + "ignoreDuplicatedKeyValues": false, + "allowRowLocks": true, + "allowPageLocks": true, + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + "foreignKeys": [ + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_UpdateUserRequest_1", + "fields": [ + "UpdateUser" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "UpdateUserRequest", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_DeleteUserRequest_1", + "fields": [ + "DeleteUser" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "DeleteUserRequest", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_GetUserResponse_1", + "fields": [ + "GetUser" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "GetUserResponse", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_GetAllUserByFilterRequest_1", + "fields": [ + "GetAllUserByFilter" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "GetAllUserByFilterRequest", + "referencedFields": [ + "PaginationState" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_GetAllUserByFilterResponse_1", + "fields": [ + "GetAllUserByFilter" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "GetAllUserByFilterResponse", + "referencedFields": [ + "MetaData" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_CreateNewOtpTokenRequest_1", + "fields": [ + "CreateNewOtpToken" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "CreateNewOtpTokenRequest", + "referencedFields": [ + "Mobile" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_CreateNewOtpTokenResponse_1", + "fields": [ + "CreateNewOtpToken" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "CreateNewOtpTokenResponse", + "referencedFields": [ + "Success" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_VerifyOtpTokenResponse_1", + "fields": [ + "VerifyOtpToken" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "VerifyOtpTokenResponse", + "referencedFields": [ + "Success" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_VerifyOtpTokenRequest_1", + "fields": [ + "VerifyOtpToken" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "VerifyOtpTokenRequest", + "referencedFields": [ + "Mobile" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_AdminGetJwtTokenRequest_1", + "fields": [ + "AdminGetJwtToken" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "AdminGetJwtTokenRequest", + "referencedFields": [ + "Username" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_AdminGetJwtTokenResponse_1", + "fields": [ + "AdminGetJwtToken" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "AdminGetJwtTokenResponse", + "referencedFields": [ + "Token" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_UserService_SetPasswordForUserRequest_1", + "fields": [ + "SetPasswordForUser" + ], + "referencedSchema": "FrontOffice", + "referencedTable": "SetPasswordForUserRequest", + "referencedFields": [ + "CurrentPassword" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + } + ], + "uniques": [], + "checks": [], + "triggers": [], + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + { + "objectType": "Table_MSSQL", + "name": "AdminGetJwtTokenRequest", + "comment": "ورودی حذف کاربر", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 2924, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "Username", + "type": "nvarchar", + "size": -2147483648, + "isNullable": "No", + "scale": -2147483648, + "comment": "نام کاربری", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "Username", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": -2147483648, + "identityIncrement": -2147483648, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "Password", + "type": "nvarchar", + "size": -2147483648, + "isNullable": "No", + "scale": -2147483648, + "comment": "کلمه عبور", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "Password", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MSSQL", + "name": "_copy_43_copy_2", + "fields": [ + "Username" + ], + "fillFactor": 0, + "oldName": "", + "isClustered": false, + "isPadded": false, + "noRecomputeStatistics": false, + "ignoreDuplicatedKeyValues": false, + "allowRowLocks": false, + "allowPageLocks": false, + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + "foreignKeys": [], + "uniques": [], + "checks": [], + "triggers": [], + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + { + "objectType": "Table_MSSQL", + "name": "AdminGetJwtTokenResponse", + "comment": "خروجی واکشی توکن", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 6042, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "Token", + "type": "nvarchar", + "size": -2147483648, + "isNullable": "No", + "scale": -2147483648, + "comment": "توکن", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "Others", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "Token", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": true, + "isExistingField": false, + "identitySeed": -2147483648, + "identityIncrement": -2147483648, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MSSQL", + "name": "_copy_46_copy_1", + "fields": [], + "fillFactor": 0, + "oldName": "", + "isClustered": false, + "isPadded": false, + "noRecomputeStatistics": false, + "ignoreDuplicatedKeyValues": false, + "allowRowLocks": false, + "allowPageLocks": false, + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + "foreignKeys": [], + "uniques": [], + "checks": [], + "triggers": [], + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + { + "objectType": "Table_MSSQL", + "name": "SetPasswordForUserRequest", + "comment": "ورودی حذف کاربر", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 2924, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "CurrentPassword", + "type": "nvarchar", + "size": -2147483648, + "isNullable": "Yes", + "scale": -2147483648, + "comment": "کلمه عبور فعلی", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "CurrentPassword", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "NewPassword", + "type": "nvarchar", + "size": -2147483648, + "isNullable": "No", + "scale": -2147483648, + "comment": "کلمه عبور", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "NewPassword", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "ConfirmPassword", + "type": "nvarchar", + "size": -2147483648, + "isNullable": "No", + "scale": -2147483648, + "comment": "تایید کلمه عبور", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "None", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "ConfirmPassword", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MSSQL", + "name": "_copy_43_copy_3", + "fields": [], + "fillFactor": 0, + "oldName": "", + "isClustered": false, + "isPadded": false, + "noRecomputeStatistics": false, + "ignoreDuplicatedKeyValues": false, + "allowRowLocks": false, + "allowPageLocks": false, + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + "foreignKeys": [], + "uniques": [], + "checks": [], + "triggers": [], + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } } ], "views": [] @@ -12957,9 +13474,9 @@ "schemaName": "FrontOffice", "tableName": "UserService", "x": 990, - "y": 3180, + "y": 3270, "width": 400, - "height": 200, + "height": 251, "isBold": false, "titleColor": { "r": 0, @@ -12972,8 +13489,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "UpdateUserRequest", - "x": 1370, - "y": 2810, + "x": 1300, + "y": 2900, "width": 400, "height": 270, "isBold": false, @@ -12988,10 +13505,10 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "DeleteUserRequest", - "x": 1510, - "y": 3130, + "x": 1500, + "y": 3220, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13004,8 +13521,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetUserResponse", - "x": 860, - "y": 2160, + "x": 840, + "y": 2250, "width": 400, "height": 390, "isBold": false, @@ -13021,7 +13538,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserByFilterRequest", "x": 480, - "y": 3210, + "y": 3330, "width": 400, "height": 137, "isBold": false, @@ -13037,7 +13554,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserByFilterFilter", "x": 30, - "y": 3110, + "y": 3230, "width": 400, "height": 330, "isBold": false, @@ -13053,7 +13570,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserByFilterResponse", "x": 990, - "y": 3430, + "y": 3570, "width": 400, "height": 118, "isBold": false, @@ -13069,7 +13586,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserByFilterResponseModel", "x": 990, - "y": 3610, + "y": 3740, "width": 400, "height": 350, "isBold": false, @@ -13085,7 +13602,7 @@ "schemaName": "FrontOffice", "tableName": "UserAddressService", "x": 540, - "y": 4640, + "y": 4770, "width": 400, "height": 200, "isBold": false, @@ -13101,7 +13618,7 @@ "schemaName": "FrontOffice", "tableName": "CreateNewUserAddressRequest", "x": 1570, - "y": 4510, + "y": 4650, "width": 400, "height": 213, "isBold": false, @@ -13117,9 +13634,9 @@ "schemaName": "FrontOffice", "tableName": "CreateNewUserAddressResponse", "x": 920, - "y": 4330, + "y": 4460, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 200, @@ -13133,7 +13650,7 @@ "schemaName": "FrontOffice", "tableName": "UpdateUserAddressRequest", "x": 1060, - "y": 4480, + "y": 4610, "width": 400, "height": 213, "isBold": false, @@ -13149,9 +13666,9 @@ "schemaName": "FrontOffice", "tableName": "DeleteUserAddressRequest", "x": 410, - "y": 4030, + "y": 4160, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13165,9 +13682,9 @@ "schemaName": "FrontOffice", "tableName": "GetUserAddressRequest", "x": 30, - "y": 4680, + "y": 4820, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13181,7 +13698,7 @@ "schemaName": "FrontOffice", "tableName": "GetUserAddressResponse", "x": 540, - "y": 4890, + "y": 5030, "width": 400, "height": 213, "isBold": false, @@ -13197,7 +13714,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserAddressByFilterRequest", "x": 2090, - "y": 4780, + "y": 4910, "width": 400, "height": 137, "isBold": false, @@ -13213,7 +13730,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserAddressByFilterFilter", "x": 2540, - "y": 4780, + "y": 4920, "width": 400, "height": 213, "isBold": false, @@ -13229,7 +13746,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserAddressByFilterResponse", "x": 2090, - "y": 4600, + "y": 4730, "width": 400, "height": 118, "isBold": false, @@ -13245,7 +13762,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllUserAddressByFilterResponseModel", "x": 2540, - "y": 4510, + "y": 4650, "width": 400, "height": 213, "isBold": false, @@ -13261,7 +13778,7 @@ "schemaName": "FrontOffice", "tableName": "PackageService", "x": 3890, - "y": 2560, + "y": 4570, "width": 400, "height": 120, "isBold": false, @@ -13277,9 +13794,9 @@ "schemaName": "FrontOffice", "tableName": "GetPackageRequest", "x": 4330, - "y": 2560, + "y": 4570, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13293,7 +13810,7 @@ "schemaName": "FrontOffice", "tableName": "GetPackageResponse", "x": 3890, - "y": 2740, + "y": 4740, "width": 400, "height": 175, "isBold": false, @@ -13309,7 +13826,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllPackageByFilterRequest", "x": 3450, - "y": 2560, + "y": 4560, "width": 400, "height": 137, "isBold": false, @@ -13325,7 +13842,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllPackageByFilterFilter", "x": 3000, - "y": 2540, + "y": 4540, "width": 400, "height": 175, "isBold": false, @@ -13341,7 +13858,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllPackageByFilterResponse", "x": 3890, - "y": 2380, + "y": 4390, "width": 400, "height": 118, "isBold": false, @@ -13357,7 +13874,7 @@ "schemaName": "FrontOffice", "tableName": "GetAllPackageByFilterResponseModel", "x": 3890, - "y": 2150, + "y": 4160, "width": 400, "height": 175, "isBold": false, @@ -13372,7 +13889,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "UserOrderService", - "x": 3320, + "x": 3310, "y": 630, "width": 400, "height": 175, @@ -13388,7 +13905,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "CreateNewUserOrderRequest", - "x": 3820, + "x": 3810, "y": 440, "width": 400, "height": 230, @@ -13404,10 +13921,10 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "CreateNewUserOrderResponse", - "x": 4330, + "x": 4310, "y": 600, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 200, @@ -13420,7 +13937,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "UpdateUserOrderRequest", - "x": 3200, + "x": 3180, "y": 30, "width": 400, "height": 130, @@ -13436,10 +13953,10 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "DeleteUserOrderRequest", - "x": 2820, + "x": 2810, "y": 670, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13452,10 +13969,10 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetUserOrderRequest", - "x": 3320, + "x": 3310, "y": 860, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13468,7 +13985,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetUserOrderResponse", - "x": 4830, + "x": 4810, "y": 720, "width": 400, "height": 230, @@ -13484,7 +14001,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllUserOrderByFilterRequest", - "x": 4830, + "x": 4810, "y": 530, "width": 400, "height": 137, @@ -13500,7 +14017,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllUserOrderByFilterFilter", - "x": 5270, + "x": 5260, "y": 480, "width": 400, "height": 240, @@ -13516,7 +14033,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllUserOrderByFilterResponse", - "x": 3580, + "x": 3570, "y": 210, "width": 400, "height": 118, @@ -13532,7 +14049,7 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllUserOrderByFilterResponseModel", - "x": 4030, + "x": 4010, "y": 160, "width": 400, "height": 230, @@ -13548,8 +14065,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "CreateNewOtpTokenRequest", - "x": 2540, - "y": 3330, + "x": 4040, + "y": 3470, "width": 400, "height": 110, "isBold": false, @@ -13564,8 +14081,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "CreateNewOtpTokenResponse", - "x": 2540, - "y": 3120, + "x": 4040, + "y": 3270, "width": 400, "height": 150, "isBold": false, @@ -13580,8 +14097,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "VerifyOtpTokenRequest", - "x": 1250, - "y": 2600, + "x": 3020, + "y": 3250, "width": 400, "height": 150, "isBold": false, @@ -13596,8 +14113,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "VerifyOtpTokenResponse", - "x": 2020, - "y": 3100, + "x": 3530, + "y": 3250, "width": 400, "height": 170, "isBold": false, @@ -13612,8 +14129,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "UserAvatarFileModel", - "x": 1830, - "y": 2870, + "x": 1750, + "y": 2960, "width": 280, "height": 140, "isBold": false, @@ -13629,9 +14146,9 @@ "schemaName": "FrontOffice", "tableName": "SetAddressAsDefaultRequest", "x": 800, - "y": 4180, + "y": 4310, "width": 400, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 255, @@ -13644,8 +14161,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "TransactionTypeEnum", - "x": 2370, - "y": 1410, + "x": 2360, + "y": 1270, "width": 250, "height": 110, "isBold": false, @@ -13660,8 +14177,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "CurrencyEnum", - "x": 1960, - "y": 870, + "x": 2010, + "y": 730, "width": 200, "height": 110, "isBold": false, @@ -13677,7 +14194,7 @@ "schemaName": "FrontOffice", "tableName": "TransactionService", "x": 500, - "y": 1780, + "y": 1870, "width": 520, "height": 160, "isBold": false, @@ -13693,7 +14210,7 @@ "schemaName": "FrontOffice", "tableName": "GetTransactionRequest", "x": 1190, - "y": 1890, + "y": 1980, "width": 400, "height": 110, "isBold": false, @@ -13708,8 +14225,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetTransactionResponse", - "x": 1850, - "y": 30, + "x": 1190, + "y": 1440, "width": 420, "height": 490, "isBold": false, @@ -13724,8 +14241,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllTransactionByFilterRequest", - "x": 1410, - "y": 1430, + "x": 1460, + "y": 1250, "width": 400, "height": 137, "isBold": false, @@ -13740,8 +14257,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllTransactionByFilterFilter", - "x": 1860, - "y": 1220, + "x": 1910, + "y": 1080, "width": 400, "height": 490, "isBold": false, @@ -13756,8 +14273,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllTransactionByFilterResponse", - "x": 2320, - "y": 520, + "x": 2310, + "y": 370, "width": 350, "height": 118, "isBold": false, @@ -13772,8 +14289,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "GetAllTransactionByFilterResponseModel", - "x": 2290, - "y": 680, + "x": 2280, + "y": 540, "width": 410, "height": 490, "isBold": false, @@ -13788,8 +14305,8 @@ "type": "table", "schemaName": "FrontOffice", "tableName": "PaymentRequestRequest", - "x": 1190, - "y": 1610, + "x": 1940, + "y": 100, "width": 330, "height": 230, "isBold": false, @@ -13805,9 +14322,9 @@ "schemaName": "FrontOffice", "tableName": "PaymentRequestResponse", "x": 570, - "y": 1990, + "y": 2080, "width": 380, - "height": 100, + "height": 106, "isBold": false, "titleColor": { "r": 200, @@ -13821,7 +14338,7 @@ "schemaName": "FrontOffice", "tableName": "PaymentVerificationRequest", "x": 410, - "y": 100, + "y": 30, "width": 330, "height": 120, "isBold": false, @@ -13837,7 +14354,7 @@ "schemaName": "FrontOffice", "tableName": "PaymentVerificationResponse", "x": 30, - "y": 1760, + "y": 1850, "width": 360, "height": 190, "isBold": false, @@ -13847,6 +14364,54 @@ "b": 160, "a": 1 } + }, + { + "type": "table", + "schemaName": "FrontOffice", + "tableName": "AdminGetJwtTokenRequest", + "x": 2510, + "y": 3240, + "width": 400, + "height": 128, + "isBold": false, + "titleColor": { + "r": 255, + "g": 214, + "b": 147, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "FrontOffice", + "tableName": "AdminGetJwtTokenResponse", + "x": 2000, + "y": 3240, + "width": 400, + "height": 106, + "isBold": false, + "titleColor": { + "r": 200, + "g": 255, + "b": 160, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "FrontOffice", + "tableName": "SetPasswordForUserRequest", + "x": 1200, + "y": 2690, + "width": 400, + "height": 155, + "isBold": false, + "titleColor": { + "r": 255, + "g": 214, + "b": 147, + "a": 1 + } } ], "layers": [], @@ -13859,23 +14424,23 @@ "visible": true, "vertices": [ { - "x": 1320, - "y": 3165 + "x": 1250, + "y": 3255 }, { - "x": 1320, - "y": 2940 + "x": 1250, + "y": 3040 }, { - "x": 1355, - "y": 2940 + "x": 1285, + "y": 3040 } ], "label": { - "x": 1328, - "y": 3175, + "x": 1258, + "y": 3265, "width": 254, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -13898,18 +14463,18 @@ "vertices": [ { "x": 1405, - "y": 3200 + "y": 3290 }, { - "x": 1495, - "y": 3200 + "x": 1485, + "y": 3290 } ], "label": { "x": 1401, - "y": 3172, + "y": 3262, "width": 249, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -13931,19 +14496,19 @@ "visible": true, "vertices": [ { - "x": 1060, - "y": 3165 + "x": 1050, + "y": 3255 }, { - "x": 1060, - "y": 2565 + "x": 1050, + "y": 2655 } ], "label": { - "x": 1068, - "y": 3175, + "x": 1058, + "y": 3265, "width": 238, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -13966,18 +14531,18 @@ "vertices": [ { "x": 975, - "y": 3280 + "y": 3400 }, { "x": 895, - "y": 3280 + "y": 3400 } ], "label": { "x": 991, - "y": 3282, + "y": 3402, "width": 295, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14000,18 +14565,18 @@ "vertices": [ { "x": 1190, - "y": 3395 + "y": 3536 }, { "x": 1190, - "y": 3415 + "y": 3555 } ], "label": { "x": 1198, - "y": 3385, + "y": 3526, "width": 305, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14034,18 +14599,18 @@ "vertices": [ { "x": 465, - "y": 3280 + "y": 3400 }, { "x": 445, - "y": 3280 + "y": 3400 } ], "label": { "x": 481, - "y": 3282, + "y": 3402, "width": 357, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14068,18 +14633,18 @@ "vertices": [ { "x": 1190, - "y": 3563 + "y": 3703 }, { "x": 1190, - "y": 3595 + "y": 3725 } ], "label": { "x": 1198, - "y": 3553, + "y": 3693, "width": 442, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14102,22 +14667,22 @@ "vertices": [ { "x": 870, - "y": 4625 + "y": 4755 }, { "x": 870, - "y": 4380 + "y": 4520 }, { "x": 905, - "y": 4380 + "y": 4520 } ], "label": { "x": 878, - "y": 4605, + "y": 4735, "width": 394, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14140,26 +14705,26 @@ "vertices": [ { "x": 955, - "y": 4660 + "y": 4790 }, { "x": 1000, - "y": 4660 + "y": 4790 }, { "x": 1000, - "y": 4630 + "y": 4760 }, { "x": 1045, - "y": 4630 + "y": 4760 } ], "label": { "x": 951, - "y": 4662, + "y": 4792, "width": 360, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14182,18 +14747,18 @@ "vertices": [ { "x": 610, - "y": 4625 + "y": 4755 }, { "x": 610, - "y": 4145 + "y": 4281 } ], "label": { "x": 618, - "y": 4605, + "y": 4735, "width": 355, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14216,18 +14781,18 @@ "vertices": [ { "x": 525, - "y": 4740 + "y": 4870 }, { "x": 445, - "y": 4740 + "y": 4870 } ], "label": { "x": 541, - "y": 4712, + "y": 4842, "width": 334, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14250,18 +14815,18 @@ "vertices": [ { "x": 740, - "y": 4855 + "y": 4985 }, { "x": 740, - "y": 4875 + "y": 5015 } ], "label": { "x": 748, - "y": 4845, + "y": 4975, "width": 344, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14284,18 +14849,18 @@ "vertices": [ { "x": 955, - "y": 4820 + "y": 4950 }, { "x": 2075, - "y": 4820 + "y": 4950 } ], "label": { "x": 951, - "y": 4822, + "y": 4952, "width": 401, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14318,26 +14883,26 @@ "vertices": [ { "x": 955, - "y": 4780 + "y": 4920 }, { "x": 2030, - "y": 4780 + "y": 4920 }, { "x": 2030, - "y": 4680 + "y": 4820 }, { "x": 2075, - "y": 4680 + "y": 4820 } ], "label": { "x": 951, - "y": 4782, + "y": 4922, "width": 411, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14360,18 +14925,18 @@ "vertices": [ { "x": 2505, - "y": 4850 + "y": 4980 }, { "x": 2525, - "y": 4850 + "y": 4980 } ], "label": { "x": 2501, - "y": 4852, + "y": 4982, "width": 463, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14394,18 +14959,18 @@ "vertices": [ { "x": 2505, - "y": 4660 + "y": 4790 }, { "x": 2525, - "y": 4660 + "y": 4790 } ], "label": { "x": 2501, - "y": 4662, + "y": 4792, "width": 548, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14428,18 +14993,18 @@ "vertices": [ { "x": 4305, - "y": 2610 + "y": 4620 }, { "x": 4315, - "y": 2610 + "y": 4620 } ], "label": { "x": 4301, - "y": 2582, + "y": 4592, "width": 280, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14462,18 +15027,18 @@ "vertices": [ { "x": 4090, - "y": 2695 + "y": 4705 }, { "x": 4090, - "y": 2725 + "y": 4725 } ], "label": { "x": 4098, - "y": 2685, + "y": 4695, "width": 290, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14496,18 +15061,18 @@ "vertices": [ { "x": 3875, - "y": 2610 + "y": 4620 }, { "x": 3865, - "y": 2610 + "y": 4620 } ], "label": { "x": 3891, - "y": 2612, + "y": 4622, "width": 347, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14530,18 +15095,18 @@ "vertices": [ { "x": 4090, - "y": 2545 + "y": 4555 }, { "x": 4090, - "y": 2513 + "y": 4523 } ], "label": { "x": 4098, - "y": 2555, + "y": 4565, "width": 357, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14564,18 +15129,18 @@ "vertices": [ { "x": 3435, - "y": 2610 + "y": 4620 }, { "x": 3415, - "y": 2610 + "y": 4620 } ], "label": { "x": 3451, - "y": 2612, + "y": 4622, "width": 409, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14598,18 +15163,18 @@ "vertices": [ { "x": 4090, - "y": 2365 + "y": 4375 }, { "x": 4090, - "y": 2340 + "y": 4350 } ], "label": { "x": 4098, - "y": 2375, + "y": 4385, "width": 494, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14631,27 +15196,27 @@ "visible": true, "vertices": [ { - "x": 3735, + "x": 3725, "y": 650 }, { - "x": 3770, + "x": 3760, "y": 650 }, { - "x": 3770, + "x": 3760, "y": 600 }, { - "x": 3805, + "x": 3795, "y": 600 } ], "label": { - "x": 3731, + "x": 3721, "y": 652, "width": 354, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14673,27 +15238,27 @@ "visible": true, "vertices": [ { - "x": 3735, + "x": 3725, "y": 720 }, { - "x": 4270, + "x": 4260, "y": 720 }, { - "x": 4270, + "x": 4260, "y": 670 }, { - "x": 4315, + "x": 4295, "y": 670 } ], "label": { - "x": 3731, + "x": 3721, "y": 692, "width": 364, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14715,19 +15280,19 @@ "visible": true, "vertices": [ { - "x": 3400, + "x": 3380, "y": 615 }, { - "x": 3400, + "x": 3380, "y": 175 } ], "label": { - "x": 3408, + "x": 3388, "y": 625, "width": 330, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14749,19 +15314,19 @@ "visible": true, "vertices": [ { - "x": 3305, + "x": 3295, "y": 720 }, { - "x": 3235, + "x": 3225, "y": 720 } ], "label": { - "x": 3321, + "x": 3311, "y": 692, "width": 325, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14783,19 +15348,19 @@ "visible": true, "vertices": [ { - "x": 3520, + "x": 3510, "y": 820 }, { - "x": 3520, + "x": 3510, "y": 845 } ], "label": { - "x": 3528, + "x": 3518, "y": 780, "width": 304, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14817,19 +15382,19 @@ "visible": true, "vertices": [ { - "x": 3735, + "x": 3725, "y": 790 }, { - "x": 4815, + "x": 4795, "y": 790 } ], "label": { - "x": 3731, + "x": 3721, "y": 792, "width": 314, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14851,27 +15416,27 @@ "visible": true, "vertices": [ { - "x": 3735, + "x": 3725, "y": 750 }, { - "x": 4780, + "x": 4760, "y": 750 }, { - "x": 4780, + "x": 4760, "y": 640 }, { - "x": 4815, + "x": 4795, "y": 640 } ], "label": { - "x": 3731, + "x": 3721, "y": 752, "width": 371, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14893,23 +15458,23 @@ "visible": true, "vertices": [ { - "x": 3530, + "x": 3520, "y": 615 }, { - "x": 3530, + "x": 3520, "y": 270 }, { - "x": 3565, + "x": 3555, "y": 270 } ], "label": { - "x": 3538, + "x": 3528, "y": 625, "width": 381, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14931,19 +15496,19 @@ "visible": true, "vertices": [ { - "x": 5245, + "x": 5225, "y": 600 }, { - "x": 5255, + "x": 5245, "y": 600 } ], "label": { - "x": 5241, + "x": 5221, "y": 602, "width": 433, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -14965,19 +15530,19 @@ "visible": true, "vertices": [ { - "x": 3995, + "x": 3985, "y": 270 }, { - "x": 4015, + "x": 3995, "y": 270 } ], "label": { - "x": 3991, + "x": 3981, "y": 272, "width": 518, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15000,18 +15565,18 @@ "vertices": [ { "x": 1405, - "y": 3360 + "y": 3500 }, { - "x": 2525, - "y": 3360 + "x": 4025, + "y": 3500 } ], "label": { "x": 1395, - "y": 3322, + "y": 3462, "width": 315, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15034,26 +15599,26 @@ "vertices": [ { "x": 1405, - "y": 3330 + "y": 3480 }, { - "x": 2480, - "y": 3330 + "x": 3980, + "y": 3480 }, { - "x": 2480, - "y": 3210 + "x": 3980, + "y": 3370 }, { - "x": 2525, - "y": 3210 + "x": 4025, + "y": 3370 } ], "label": { "x": 1395, - "y": 3292, + "y": 3442, "width": 325, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15076,26 +15641,26 @@ "vertices": [ { "x": 1405, - "y": 3280 + "y": 3450 }, { - "x": 1970, - "y": 3280 + "x": 3480, + "y": 3450 }, { - "x": 1970, - "y": 3200 + "x": 3480, + "y": 3360 }, { - "x": 2005, - "y": 3200 + "x": 3515, + "y": 3360 } ], "label": { "x": 1395, - "y": 3242, + "y": 3412, "width": 290, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15117,23 +15682,27 @@ "visible": true, "vertices": [ { - "x": 1190, - "y": 3165 + "x": 1405, + "y": 3420 }, { - "x": 1190, - "y": 2680 + "x": 2970, + "y": 3420 }, { - "x": 1235, - "y": 2680 + "x": 2970, + "y": 3340 + }, + { + "x": 3005, + "y": 3340 } ], "label": { - "x": 1192, - "y": 3135, + "x": 1395, + "y": 3382, "width": 280, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15155,19 +15724,19 @@ "visible": true, "vertices": [ { - "x": 1785, - "y": 2940 + "x": 1715, + "y": 3040 }, { - "x": 1815, - "y": 2940 + "x": 1735, + "y": 3040 } ], "label": { - "x": 1775, - "y": 2902, + "x": 1705, + "y": 3002, "width": 317, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15190,26 +15759,26 @@ "vertices": [ { "x": 955, - "y": 4750 + "y": 4890 }, { "x": 1520, - "y": 4750 + "y": 4890 }, { "x": 1520, - "y": 4660 + "y": 4790 }, { "x": 1555, - "y": 4660 + "y": 4790 } ], "label": { "x": 945, - "y": 4712, + "y": 4852, "width": 384, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15232,22 +15801,22 @@ "vertices": [ { "x": 740, - "y": 4625 + "y": 4755 }, { "x": 740, - "y": 4230 + "y": 4360 }, { "x": 785, - "y": 4230 + "y": 4360 } ], "label": { "x": 742, - "y": 4595, + "y": 4725, "width": 369, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15269,27 +15838,23 @@ "visible": true, "vertices": [ { - "x": 2285, - "y": 280 + "x": 1625, + "y": 1690 }, { - "x": 2750, - "y": 280 + "x": 2480, + "y": 1690 }, { - "x": 2750, - "y": 1460 - }, - { - "x": 2635, - "y": 1460 + "x": 2480, + "y": 1395 } ], "label": { - "x": 1623, - "y": 242, + "x": 963, + "y": 1652, "width": 360, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15311,19 +15876,23 @@ "visible": true, "vertices": [ { - "x": 2060, - "y": 535 + "x": 1400, + "y": 1425 }, { - "x": 2060, - "y": 855 + "x": 1400, + "y": 790 + }, + { + "x": 1995, + "y": 790 } ], "label": { - "x": 1221, - "y": 485, + "x": 561, + "y": 1395, "width": 309, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15345,19 +15914,19 @@ "visible": true, "vertices": [ { - "x": 2275, - "y": 1460 + "x": 2325, + "y": 1320 }, { - "x": 2355, - "y": 1460 + "x": 2345, + "y": 1320 } ], "label": { - "x": 1620, - "y": 1422, + "x": 1670, + "y": 1282, "width": 396, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15379,19 +15948,19 @@ "visible": true, "vertices": [ { - "x": 2060, - "y": 1205 + "x": 2110, + "y": 1065 }, { - "x": 2060, - "y": 995 + "x": 2110, + "y": 855 } ], "label": { - "x": 1220, - "y": 1175, + "x": 1270, + "y": 1035, "width": 345, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15413,19 +15982,19 @@ "visible": true, "vertices": [ { - "x": 2500, - "y": 1185 + "x": 2480, + "y": 1045 }, { - "x": 2500, - "y": 1395 + "x": 2480, + "y": 1255 } ], "label": { - "x": 2057, - "y": 1135, + "x": 2037, + "y": 995, "width": 471, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15447,19 +16016,19 @@ "visible": true, "vertices": [ { - "x": 2275, - "y": 930 + "x": 2265, + "y": 790 }, { - "x": 2175, - "y": 930 + "x": 2225, + "y": 790 } ], "label": { - "x": 2063, - "y": 892, + "x": 2053, + "y": 752, "width": 420, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15482,18 +16051,18 @@ "vertices": [ { "x": 1035, - "y": 1920 + "y": 2010 }, { "x": 1175, - "y": 1920 + "y": 2010 } ], "label": { "x": 1031, - "y": 1892, + "y": 1982, "width": 326, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15515,23 +16084,27 @@ "visible": true, "vertices": [ { - "x": 720, - "y": 1765 + "x": 1035, + "y": 1980 }, { - "x": 720, - "y": 280 + "x": 1140, + "y": 1980 }, { - "x": 1835, - "y": 280 + "x": 1140, + "y": 1850 + }, + { + "x": 1175, + "y": 1850 } ], "label": { - "x": 728, - "y": 1775, + "x": 1031, + "y": 1982, "width": 336, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15554,26 +16127,26 @@ "vertices": [ { "x": 1035, - "y": 1800 + "y": 1890 }, { "x": 1080, - "y": 1800 + "y": 1890 }, { "x": 1080, - "y": 1530 + "y": 1360 }, { - "x": 1395, - "y": 1530 + "x": 1445, + "y": 1360 } ], "label": { "x": 1031, - "y": 1802, + "y": 1892, "width": 393, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15596,22 +16169,22 @@ "vertices": [ { "x": 860, - "y": 1765 + "y": 1855 }, { "x": 860, - "y": 580 + "y": 430 }, { - "x": 2305, - "y": 580 + "x": 2295, + "y": 430 } ], "label": { "x": 868, - "y": 1775, + "y": 1865, "width": 403, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15633,19 +16206,19 @@ "visible": true, "vertices": [ { - "x": 1825, - "y": 1490 + "x": 1875, + "y": 1320 }, { - "x": 1845, - "y": 1490 + "x": 1895, + "y": 1320 } ], "label": { - "x": 1380, - "y": 1492, + "x": 1430, + "y": 1322, "width": 455, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15667,19 +16240,19 @@ "visible": true, "vertices": [ { - "x": 2500, - "y": 653 + "x": 2480, + "y": 503 }, { - "x": 2500, - "y": 665 + "x": 2480, + "y": 525 } ], "label": { - "x": 2150, - "y": 643, + "x": 2130, + "y": 493, "width": 540, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15701,23 +16274,27 @@ "visible": true, "vertices": [ { - "x": 1535, - "y": 1760 + "x": 2285, + "y": 210 }, { - "x": 2500, - "y": 1760 + "x": 2740, + "y": 210 }, { - "x": 2500, - "y": 1535 + "x": 2740, + "y": 1320 + }, + { + "x": 2625, + "y": 1320 } ], "label": { - "x": 890, - "y": 1732, + "x": 1640, + "y": 182, "width": 452, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15739,23 +16316,19 @@ "visible": true, "vertices": [ { - "x": 1360, - "y": 1595 + "x": 2110, + "y": 345 }, { - "x": 1360, - "y": 930 - }, - { - "x": 1945, - "y": 930 + "x": 2110, + "y": 715 } ], "label": { - "x": 900, - "y": 1575, + "x": 1650, + "y": 305, "width": 401, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15777,27 +16350,23 @@ "visible": true, "vertices": [ { - "x": 1035, - "y": 1890 + "x": 720, + "y": 1855 }, { - "x": 1140, - "y": 1890 + "x": 720, + "y": 210 }, { - "x": 1140, - "y": 1760 - }, - { - "x": 1175, - "y": 1760 + "x": 1925, + "y": 210 } ], "label": { - "x": 688, - "y": 1852, + "x": 385, + "y": 1825, "width": 337, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15820,18 +16389,18 @@ "vertices": [ { "x": 760, - "y": 1955 + "y": 2045 }, { "x": 760, - "y": 1975 + "y": 2065 } ], "label": { "x": 479, - "y": 1905, + "y": 1995, "width": 283, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15854,18 +16423,18 @@ "vertices": [ { "x": 580, - "y": 1765 + "y": 1855 }, { "x": 580, - "y": 235 + "y": 165 } ], "label": { "x": 222, - "y": 1735, + "y": 1825, "width": 360, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15888,18 +16457,18 @@ "vertices": [ { "x": 485, - "y": 1860 + "y": 1950 }, { "x": 405, - "y": 1860 + "y": 1950 } ], "label": { "x": 495, - "y": 1822, + "y": 1912, "width": 370, - "height": 30, + "height": 32, "fontName": "Arial Unicode MS", "fontSize": 14, "fontColor": { @@ -15912,6 +16481,128 @@ "isFontItalic": false, "isVisible": false } + }, + { + "name": "fk_UserService_AdminGetJwtTokenRequest_1", + "sourceTableName": "UserService", + "sourceSchemaName": "FrontOffice", + "lineWidth": 1, + "visible": true, + "vertices": [ + { + "x": 1405, + "y": 3400 + }, + { + "x": 2460, + "y": 3400 + }, + { + "x": 2460, + "y": 3310 + }, + { + "x": 2495, + "y": 3310 + } + ], + "label": { + "x": 1089, + "y": 3360, + "width": 306, + "height": 32, + "fontName": "Sans", + "fontSize": 14, + "fontColor": { + "r": 51, + "g": 51, + "b": 51, + "a": 1 + }, + "isFontBold": false, + "isFontItalic": false, + "isVisible": false + } + }, + { + "name": "fk_UserService_AdminGetJwtTokenResponse_1", + "sourceTableName": "UserService", + "sourceSchemaName": "FrontOffice", + "lineWidth": 1, + "visible": true, + "vertices": [ + { + "x": 1405, + "y": 3370 + }, + { + "x": 1950, + "y": 3370 + }, + { + "x": 1950, + "y": 3310 + }, + { + "x": 1985, + "y": 3310 + } + ], + "label": { + "x": 1079, + "y": 3330, + "width": 316, + "height": 32, + "fontName": "Sans", + "fontSize": 14, + "fontColor": { + "r": 51, + "g": 51, + "b": 51, + "a": 1 + }, + "isFontBold": false, + "isFontItalic": false, + "isVisible": false + } + }, + { + "name": "fk_UserService_SetPasswordForUserRequest_1", + "sourceTableName": "UserService", + "sourceSchemaName": "FrontOffice", + "lineWidth": 1, + "visible": true, + "vertices": [ + { + "x": 1150, + "y": 3255 + }, + { + "x": 1150, + "y": 2770 + }, + { + "x": 1185, + "y": 2770 + } + ], + "label": { + "x": 1152, + "y": 3223, + "width": 317, + "height": 32, + "fontName": "Sans", + "fontSize": 14, + "fontColor": { + "r": 51, + "g": 51, + "b": 51, + "a": 1 + }, + "isFontBold": false, + "isFontItalic": false, + "isVisible": false + } } ], "viewRelations": [] diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/.gitignore b/src/.idea/.idea.FrontOffice.BFF/.idea/.gitignore new file mode 100644 index 0000000..b983822 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/projectSettingsUpdater.xml +/modules.xml +/.idea.FrontOffice.BFF.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/.name b/src/.idea/.idea.FrontOffice.BFF/.idea/.name new file mode 100644 index 0000000..5ed33a8 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/.name @@ -0,0 +1 @@ +FrontOffice.BFF \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.agent.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.agent.xml new file mode 100644 index 0000000..4ea72a9 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.agent.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.ask.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.ask.xml new file mode 100644 index 0000000..7ef04e2 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.ask.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.ask2agent.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.ask2agent.xml new file mode 100644 index 0000000..1f2ea11 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.ask2agent.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.edit.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.edit.xml new file mode 100644 index 0000000..8648f94 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/copilot.data.migration.edit.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/encodings.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/indexLayout.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/.idea/.idea.FrontOffice.BFF/.idea/vcs.xml b/src/.idea/.idea.FrontOffice.BFF/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/src/.idea/.idea.FrontOffice.BFF/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/FrontOffice.BFF.Application/FrontOffice.BFF.Application.csproj b/src/FrontOffice.BFF.Application/FrontOffice.BFF.Application.csproj index 8935960..e80bab5 100644 --- a/src/FrontOffice.BFF.Application/FrontOffice.BFF.Application.csproj +++ b/src/FrontOffice.BFF.Application/FrontOffice.BFF.Application.csproj @@ -1,15 +1,15 @@ - net7.0 + net9.0 enable - - - - + + + + diff --git a/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommand.cs b/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommand.cs new file mode 100644 index 0000000..1b31646 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommand.cs @@ -0,0 +1,11 @@ +namespace FrontOffice.BFF.Application.UserCQ.Commands.SetPasswordForUser; +public record SetPasswordForUserCommand : IRequest +{ + //کلمه عبور فعلی + public string? CurrentPassword { get; init; } + //کلمه عبور + public string NewPassword { get; init; } + //تایید کلمه عبور + public string ConfirmPassword { get; init; } + +} \ No newline at end of file diff --git a/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommandHandler.cs b/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommandHandler.cs new file mode 100644 index 0000000..2ce2e78 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommandHandler.cs @@ -0,0 +1,24 @@ +using CMSMicroservice.Protobuf.Protos.User; + +namespace FrontOffice.BFF.Application.UserCQ.Commands.SetPasswordForUser; +public class SetPasswordForUserCommandHandler : IRequestHandler +{ + private readonly IApplicationContractContext _context; + private readonly ICurrentUserService _currentUserService; + + public SetPasswordForUserCommandHandler(IApplicationContractContext context, ICurrentUserService currentUserService) + { + _context = context; + _currentUserService = currentUserService; + } + + public async Task Handle(SetPasswordForUserCommand request, CancellationToken cancellationToken) + { + var setPasswordRequest = request.Adapt(); + setPasswordRequest.UserId = long.Parse(_currentUserService.UserId ?? throw new InvalidOperationException()); + await _context.User.SetPasswordForUserAsync(setPasswordRequest, cancellationToken: cancellationToken); + return new Unit(); + + + } +} diff --git a/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommandValidator.cs b/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommandValidator.cs new file mode 100644 index 0000000..547365c --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Commands/SetPasswordForUser/SetPasswordForUserCommandValidator.cs @@ -0,0 +1,18 @@ +namespace FrontOffice.BFF.Application.UserCQ.Commands.SetPasswordForUser; +public class SetPasswordForUserCommandValidator : AbstractValidator +{ + public SetPasswordForUserCommandValidator() + { + RuleFor(model => model.NewPassword) + .NotEmpty(); + RuleFor(model => model.ConfirmPassword) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((SetPasswordForUserCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} diff --git a/src/FrontOffice.BFF.Application/UserCQ/Commands/UpdateUser/UpdateUserCommandHandler.cs b/src/FrontOffice.BFF.Application/UserCQ/Commands/UpdateUser/UpdateUserCommandHandler.cs index eec6fa3..7704731 100644 --- a/src/FrontOffice.BFF.Application/UserCQ/Commands/UpdateUser/UpdateUserCommandHandler.cs +++ b/src/FrontOffice.BFF.Application/UserCQ/Commands/UpdateUser/UpdateUserCommandHandler.cs @@ -1,6 +1,7 @@ using CMSMicroservice.Protobuf.Protos.User; namespace FrontOffice.BFF.Application.UserCQ.Commands.UpdateUser; + public class UpdateUserCommandHandler : IRequestHandler { private readonly IApplicationContractContext _context; @@ -12,7 +13,56 @@ public class UpdateUserCommandHandler : IRequestHandler public async Task Handle(UpdateUserCommand request, CancellationToken cancellationToken) { - await _context.User.UpdateUserAsync(request: request.Adapt(), cancellationToken: cancellationToken); + var updatingUserRequest = new UpdateUserRequest(); + var existUser = await _context.User.GetUserAsync(new GetUserRequest() + { + Id = request.Id + }, cancellationToken: cancellationToken); + if (existUser == null) + throw new NotFoundException("User not found"); + + if (!string.IsNullOrEmpty(request.FirstName)) + { + updatingUserRequest.FirstName = request.FirstName; + } + + if (!string.IsNullOrEmpty(request.LastName)) + { + updatingUserRequest.LastName = request.LastName; + } + + if (!string.IsNullOrEmpty(request.NationalCode)) + { + updatingUserRequest.NationalCode = request.NationalCode; + } + if (request.BirthDate.HasValue) + { + updatingUserRequest.BirthDate = Timestamp.FromDateTime(DateTime.SpecifyKind(request.BirthDate.Value, DateTimeKind.Utc));; + } + if (!string.IsNullOrEmpty(request.AvatarPath)) + { + updatingUserRequest.AvatarPath = request.AvatarPath; + } + // if (request.AvatarFile!= null) + // { + // } + if (request.PushNotifications!=existUser.PushNotifications) + { + updatingUserRequest.PushNotifications = request.PushNotifications; + } + + if (request.EmailNotifications!=existUser.EmailNotifications) + { + updatingUserRequest.EmailNotifications = request.EmailNotifications; + } + + if (request.SmsNotifications!=existUser.SmsNotifications) + { + updatingUserRequest.SmsNotifications = request.SmsNotifications; + } + + await _context.User.UpdateUserAsync(request: request.Adapt(), + cancellationToken: cancellationToken); return Unit.Value; } -} +} \ No newline at end of file diff --git a/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQuery.cs b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQuery.cs new file mode 100644 index 0000000..c5a8b56 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQuery.cs @@ -0,0 +1,9 @@ +namespace FrontOffice.BFF.Application.UserCQ.Queries.AdminGetJwtToken; +public record AdminGetJwtTokenQuery : IRequest +{ + //نام کاربری + public string Username { get; init; } + //کلمه عبور + public string Password { get; init; } + +} \ No newline at end of file diff --git a/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQueryHandler.cs b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQueryHandler.cs new file mode 100644 index 0000000..dd0c329 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQueryHandler.cs @@ -0,0 +1,19 @@ +using CMSMicroservice.Protobuf.Protos.User; + +namespace FrontOffice.BFF.Application.UserCQ.Queries.AdminGetJwtToken; +public class AdminGetJwtTokenQueryHandler : IRequestHandler +{ + private readonly IApplicationContractContext _context; + + public AdminGetJwtTokenQueryHandler(IApplicationContractContext context) + { + _context = context; + } + + public async Task Handle(AdminGetJwtTokenQuery request, CancellationToken cancellationToken) + { + var response = await _context.User.AdminGetJwtTokenAsync(request.Adapt(), + cancellationToken: cancellationToken); + return response.Adapt(); + } +} diff --git a/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQueryValidator.cs b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQueryValidator.cs new file mode 100644 index 0000000..316cbb3 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenQueryValidator.cs @@ -0,0 +1,18 @@ +namespace FrontOffice.BFF.Application.UserCQ.Queries.AdminGetJwtToken; +public class AdminGetJwtTokenQueryValidator : AbstractValidator +{ + public AdminGetJwtTokenQueryValidator() + { + RuleFor(model => model.Username) + .NotEmpty(); + RuleFor(model => model.Password) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((AdminGetJwtTokenQuery)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} diff --git a/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenResponseDto.cs b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenResponseDto.cs new file mode 100644 index 0000000..a14e488 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserCQ/Queries/AdminGetJwtToken/AdminGetJwtTokenResponseDto.cs @@ -0,0 +1,7 @@ +namespace FrontOffice.BFF.Application.UserCQ.Queries.AdminGetJwtToken; +public class AdminGetJwtTokenResponseDto +{ + //توکن + public string Token { get; set; } + +} \ No newline at end of file diff --git a/src/FrontOffice.BFF.Domain/FrontOffice.BFF.Domain.csproj b/src/FrontOffice.BFF.Domain/FrontOffice.BFF.Domain.csproj index 5d1c474..e230e35 100644 --- a/src/FrontOffice.BFF.Domain/FrontOffice.BFF.Domain.csproj +++ b/src/FrontOffice.BFF.Domain/FrontOffice.BFF.Domain.csproj @@ -1,16 +1,16 @@ - net7.0 + net9.0 enable - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FrontOffice.BFF.Infrastructure/ConfigureServices.cs b/src/FrontOffice.BFF.Infrastructure/ConfigureServices.cs index 02a49f5..53fae38 100644 --- a/src/FrontOffice.BFF.Infrastructure/ConfigureServices.cs +++ b/src/FrontOffice.BFF.Infrastructure/ConfigureServices.cs @@ -31,8 +31,8 @@ public static class ConfigureServices jwtBearerOptions.RequireHttpsMetadata = false; jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters { - ValidateIssuer = true, - ValidateAudience = true, + ValidateIssuer = false,//todo change to true in production + ValidateAudience = false,//todo change to true in production ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = configuration["JwtIssuer"], diff --git a/src/FrontOffice.BFF.Infrastructure/FrontOffice.BFF.Infrastructure.csproj b/src/FrontOffice.BFF.Infrastructure/FrontOffice.BFF.Infrastructure.csproj index 662eaae..d5724aa 100644 --- a/src/FrontOffice.BFF.Infrastructure/FrontOffice.BFF.Infrastructure.csproj +++ b/src/FrontOffice.BFF.Infrastructure/FrontOffice.BFF.Infrastructure.csproj @@ -1,13 +1,13 @@ - net7.0 + net9.0 enable - + diff --git a/src/FrontOffice.BFF.WebApi/Common/Behaviours/LoggingBehaviour.cs b/src/FrontOffice.BFF.WebApi/Common/Behaviours/LoggingBehaviour.cs new file mode 100644 index 0000000..7f842fd --- /dev/null +++ b/src/FrontOffice.BFF.WebApi/Common/Behaviours/LoggingBehaviour.cs @@ -0,0 +1,38 @@ +using Grpc.Core.Interceptors; +using Microsoft.Extensions.Logging; +using FrontOffice.BFF.Application.Common.Interfaces; + +namespace FrontOffice.BFF.WebApi.Common.Behaviours; + +public class LoggingBehaviour : Interceptor +{ + private readonly ILogger _logger; + private readonly ICurrentUserService _currentUserService; + public LoggingBehaviour(ILogger logger, ICurrentUserService currentUserService) + { + _logger = logger; + _currentUserService = currentUserService; + } + + public override async Task UnaryServerHandler( + TRequest request, + ServerCallContext context, + UnaryServerMethod continuation) + { + var requestName = typeof(TRequest).Name; + var userId = _currentUserService.UserId ?? string.Empty; + _logger.LogInformation("gRPC Starting receiving call. Type/Method: {Type} / {Method} Request: {Name} {@UserId} {@Request}", + MethodType.Unary, context.Method , requestName, userId, request); + + try + { + return await continuation(request, context); + } + catch (Exception ex) + { + _logger.LogError(ex, "gRPC Request: Unhandled Exception for Request {Name} {@Request}", requestName, request); + + throw; + } + } +} diff --git a/src/FrontOffice.BFF.WebApi/Common/Behaviours/PerformanceBehaviour.cs b/src/FrontOffice.BFF.WebApi/Common/Behaviours/PerformanceBehaviour.cs new file mode 100644 index 0000000..f34a289 --- /dev/null +++ b/src/FrontOffice.BFF.WebApi/Common/Behaviours/PerformanceBehaviour.cs @@ -0,0 +1,44 @@ +using Grpc.Core.Interceptors; +using Microsoft.Extensions.Logging; +using System.Diagnostics; +using FrontOffice.BFF.Application.Common.Interfaces; + +namespace FrontOffice.BFF.WebApi.Common.Behaviours; + +public class PerformanceBehaviour : Interceptor +{ + private readonly Stopwatch _timer; + private readonly ILogger _logger; + private readonly ICurrentUserService _currentUserService; + public PerformanceBehaviour(ILogger logger, ICurrentUserService currentUserService) + { + _timer = new Stopwatch(); + _logger = logger; + _currentUserService = currentUserService; + } + + public override async Task UnaryServerHandler( + TRequest request, + ServerCallContext context, + UnaryServerMethod continuation) + { + _timer.Start(); + + var response = await continuation(request, context); + + _timer.Stop(); + + var elapsedMilliseconds = _timer.ElapsedMilliseconds; + + if (elapsedMilliseconds > 500) + { + var requestName = typeof(TRequest).Name; + var userId = _currentUserService.UserId ?? string.Empty; + + _logger.LogWarning("gRPC Long Running Request: {Name} ({ElapsedMilliseconds} milliseconds) {@UserId} {@Request}", + requestName, elapsedMilliseconds, userId, request); + } + return response; + } +} + diff --git a/src/FrontOffice.BFF.WebApi/FrontOffice.BFF.WebApi.csproj b/src/FrontOffice.BFF.WebApi/FrontOffice.BFF.WebApi.csproj index 7bcbc88..615d477 100644 --- a/src/FrontOffice.BFF.WebApi/FrontOffice.BFF.WebApi.csproj +++ b/src/FrontOffice.BFF.WebApi/FrontOffice.BFF.WebApi.csproj @@ -1,7 +1,7 @@ - net7.0 + net9.0 enable Linux ..\..\.. @@ -10,11 +10,11 @@ - - - - - + + + + + diff --git a/src/FrontOffice.BFF.WebApi/Services/UserService.cs b/src/FrontOffice.BFF.WebApi/Services/UserService.cs index 132c948..f3e64af 100644 --- a/src/FrontOffice.BFF.WebApi/Services/UserService.cs +++ b/src/FrontOffice.BFF.WebApi/Services/UserService.cs @@ -1,4 +1,3 @@ -using FrontOffice.BFF.User.Protobuf.Protos.User; using FrontOffice.BFF.WebApi.Common.Services; using FrontOffice.BFF.Application.UserCQ.Commands.UpdateUser; using FrontOffice.BFF.Application.UserCQ.Commands.DeleteUser; @@ -6,6 +5,10 @@ using FrontOffice.BFF.Application.UserCQ.Queries.GetUser; using FrontOffice.BFF.Application.UserCQ.Queries.GetAllUserByFilter; using FrontOffice.BFF.Application.UserCQ.Commands.CreateNewOtpToken; using FrontOffice.BFF.Application.UserCQ.Commands.VerifyOtpToken; +using FrontOffice.BFF.Application.UserCQ.Queries.AdminGetJwtToken; +using FrontOffice.BFF.Application.UserCQ.Commands.SetPasswordForUser; +using FrontOffice.BFF.User.Protobuf.Protos.User; + namespace FrontOffice.BFF.WebApi.Services; public class UserService : UserContract.UserContractBase { @@ -15,6 +18,7 @@ public class UserService : UserContract.UserContractBase { _dispatchRequestToCQRS = dispatchRequestToCQRS; } + [Authorize(Roles = "user")] public override async Task UpdateUser(UpdateUserRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); @@ -39,4 +43,12 @@ public class UserService : UserContract.UserContractBase { return await _dispatchRequestToCQRS.Handle(request, context); } + public override async Task AdminGetJwtToken(AdminGetJwtTokenRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task SetPasswordForUser(SetPasswordForUserRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } } diff --git a/src/Protobufs/FrontOffice.BFF.Package.Protobuf/FrontOffice.BFF.Package.Protobuf.csproj b/src/Protobufs/FrontOffice.BFF.Package.Protobuf/FrontOffice.BFF.Package.Protobuf.csproj index a914d10..9f36a59 100644 --- a/src/Protobufs/FrontOffice.BFF.Package.Protobuf/FrontOffice.BFF.Package.Protobuf.csproj +++ b/src/Protobufs/FrontOffice.BFF.Package.Protobuf/FrontOffice.BFF.Package.Protobuf.csproj @@ -1,7 +1,7 @@ - net7.0 + net9.0 enable enable 0.0.112 @@ -12,14 +12,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/Protobufs/FrontOffice.BFF.Transaction.Protobuf/FrontOffice.BFF.Transaction.Protobuf.csproj b/src/Protobufs/FrontOffice.BFF.Transaction.Protobuf/FrontOffice.BFF.Transaction.Protobuf.csproj index a727cbd..b5d90dd 100644 --- a/src/Protobufs/FrontOffice.BFF.Transaction.Protobuf/FrontOffice.BFF.Transaction.Protobuf.csproj +++ b/src/Protobufs/FrontOffice.BFF.Transaction.Protobuf/FrontOffice.BFF.Transaction.Protobuf.csproj @@ -1,7 +1,7 @@ - net7.0 + net9.0 enable enable 0.0.111 @@ -12,14 +12,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/Protobufs/FrontOffice.BFF.User.Protobuf/FrontOffice.BFF.User.Protobuf.csproj b/src/Protobufs/FrontOffice.BFF.User.Protobuf/FrontOffice.BFF.User.Protobuf.csproj index bdcc70a..75129fe 100644 --- a/src/Protobufs/FrontOffice.BFF.User.Protobuf/FrontOffice.BFF.User.Protobuf.csproj +++ b/src/Protobufs/FrontOffice.BFF.User.Protobuf/FrontOffice.BFF.User.Protobuf.csproj @@ -1,7 +1,7 @@  - net7.0 + net9.0 enable enable 0.0.115 @@ -12,14 +12,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/Protobufs/FrontOffice.BFF.User.Protobuf/Protos/user.proto b/src/Protobufs/FrontOffice.BFF.User.Protobuf/Protos/user.proto index e1ddf6f..b4c270f 100644 --- a/src/Protobufs/FrontOffice.BFF.User.Protobuf/Protos/user.proto +++ b/src/Protobufs/FrontOffice.BFF.User.Protobuf/Protos/user.proto @@ -48,6 +48,18 @@ service UserContract body: "*" }; }; + rpc AdminGetJwtToken(AdminGetJwtTokenRequest) returns (AdminGetJwtTokenResponse){ + option (google.api.http) = { + get: "/AdminGetJwtToken" + + }; + }; + rpc SetPasswordForUser(SetPasswordForUserRequest) returns (google.protobuf.Empty){ + option (google.api.http) = { + post: "/SetPasswordForUser" + body: "*" + }; + }; } message UpdateUserRequest { @@ -161,31 +173,47 @@ message VerifyOtpTokenResponse int32 remaining_attempts = 4; int32 remaining_seconds = 5; } - -message PaginationState +message AdminGetJwtTokenRequest { - int32 page_number = 1; - - int32 page_size = 2; + string username = 1; + string password = 2; } -message MetaData +message AdminGetJwtTokenResponse { - int64 current_page = 1; - - int64 total_page = 2; - - int64 page_size = 3; - - int64 total_count = 4; - - bool has_previous = 5; - - bool has_next = 6; + string token = 1; } -message DecimalValue +message SetPasswordForUserRequest { - - int64 units = 1; - - sfixed32 nanos = 2; + google.protobuf.StringValue current_password = 1; + string new_password = 2; + string confirm_password = 3; } + + message PaginationState + { + int32 page_number = 1; + + int32 page_size = 2; + } + message MetaData + { + int64 current_page = 1; + + int64 total_page = 2; + + int64 page_size = 3; + + int64 total_count = 4; + + bool has_previous = 5; + + bool has_next = 6; + } + message DecimalValue + { + + int64 units = 1; + + sfixed32 nanos = 2; + } + \ No newline at end of file diff --git a/src/Protobufs/FrontOffice.BFF.User.Protobuf/Validator/AdminGetJwtTokenRequestValidator.cs b/src/Protobufs/FrontOffice.BFF.User.Protobuf/Validator/AdminGetJwtTokenRequestValidator.cs new file mode 100644 index 0000000..554c345 --- /dev/null +++ b/src/Protobufs/FrontOffice.BFF.User.Protobuf/Validator/AdminGetJwtTokenRequestValidator.cs @@ -0,0 +1,21 @@ +using FluentValidation; +using FrontOffice.BFF.User.Protobuf.Protos.User; +namespace FrontOfficeMicroservice.Protobuf.Validator.User; + +public class AdminGetJwtTokenRequestValidator : AbstractValidator +{ + public AdminGetJwtTokenRequestValidator() + { + RuleFor(model => model.Username) + .NotEmpty(); + RuleFor(model => model.Password) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((AdminGetJwtTokenRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} diff --git a/src/Protobufs/FrontOffice.BFF.User.Protobuf/Validator/SetPasswordForUserRequestValidator.cs b/src/Protobufs/FrontOffice.BFF.User.Protobuf/Validator/SetPasswordForUserRequestValidator.cs new file mode 100644 index 0000000..d497c7b --- /dev/null +++ b/src/Protobufs/FrontOffice.BFF.User.Protobuf/Validator/SetPasswordForUserRequestValidator.cs @@ -0,0 +1,21 @@ +using FluentValidation; +using FrontOffice.BFF.User.Protobuf.Protos.User; +namespace FrontOfficeMicroservice.Protobuf.Validator.User; + +public class SetPasswordForUserRequestValidator : AbstractValidator +{ + public SetPasswordForUserRequestValidator() + { + RuleFor(model => model.NewPassword) + .NotEmpty(); + RuleFor(model => model.ConfirmPassword) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((SetPasswordForUserRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} diff --git a/src/Protobufs/FrontOffice.BFF.UserAddress.Protobuf/FrontOffice.BFF.UserAddress.Protobuf.csproj b/src/Protobufs/FrontOffice.BFF.UserAddress.Protobuf/FrontOffice.BFF.UserAddress.Protobuf.csproj index 122e0cd..7dacf1e 100644 --- a/src/Protobufs/FrontOffice.BFF.UserAddress.Protobuf/FrontOffice.BFF.UserAddress.Protobuf.csproj +++ b/src/Protobufs/FrontOffice.BFF.UserAddress.Protobuf/FrontOffice.BFF.UserAddress.Protobuf.csproj @@ -1,7 +1,7 @@ - net7.0 + net9.0 enable enable 0.0.114 @@ -12,14 +12,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/FrontOffice.BFF.UserOrder.Protobuf.csproj b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/FrontOffice.BFF.UserOrder.Protobuf.csproj index d923dad..4923449 100644 --- a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/FrontOffice.BFF.UserOrder.Protobuf.csproj +++ b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/FrontOffice.BFF.UserOrder.Protobuf.csproj @@ -1,7 +1,7 @@ - net7.0 + net9.0 enable enable 0.0.112 @@ -12,14 +12,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + +