diff --git a/docs/model.ndm2 b/docs/model.ndm2 index 7fff470..9b62053 100644 --- a/docs/model.ndm2 +++ b/docs/model.ndm2 @@ -47330,6 +47330,795 @@ "dataCompressions": [] } }, + { + "objectType": "Table_MSSQL", + "name": "Tag", + "comment": "تگ", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 0, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "Id", + "type": "bigint", + "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": "Id", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": true, + "isExistingField": false, + "identitySeed": -2147483648, + "identityIncrement": -2147483648, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "Name", + "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": "Name", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "Title", + "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": "Title", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "Description", + "type": "nvarchar", + "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": "Description", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "IsActive", + "type": "bit", + "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": "IsActive", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "SortOrder", + "type": "int", + "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": "SortOrder", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MSSQL", + "name": "_pk_Tag", + "fields": [ + "Id" + ], + "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": [], + "uniques": [], + "checks": [], + "triggers": [], + "storage": { + "objectType": "Storage_MSSQL", + "name": "", + "oldName": "", + "storageType": "Default", + "filegroup": "", + "textImageFilegroup": "", + "filestreamFilegroup": "", + "partitionScheme": "", + "partitionColumn": "", + "filestreamPartitionScheme": "", + "dataCompressions": [] + } + }, + { + "objectType": "Table_MSSQL", + "name": "PruductTag", + "comment": "برچسب محصول", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 0, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "Id", + "type": "bigint", + "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": "Id", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": true, + "isExistingField": false, + "identitySeed": -2147483648, + "identityIncrement": -2147483648, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "ProductId", + "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": "ProductId", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "TagId", + "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": "TagId", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MSSQL", + "name": "_pk_PruductTag", + "fields": [ + "Id" + ], + "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_PruductTag_Products_1", + "fields": [ + "ProductId" + ], + "referencedSchema": "CMS", + "referencedTable": "Products", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": true, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_PruductTag_Tag_1", + "fields": [ + "TagId" + ], + "referencedSchema": "CMS", + "referencedTable": "Tag", + "referencedFields": [ + "Id" + ], + "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": "TagService", + "comment": "سرویس های تگ", + "owner": "", + "isChangeTracking": false, + "isTrackColumnsUpdated": false, + "oldName": "TagService", + "isSystemTable": false, + "createTime": "", + "modifyTime": "", + "objectID": 0, + "numberOfRows": 0, + "identityCurrent": 0, + "dataLength": 0, + "indexLength": 0, + "fields": [ + { + "objectType": "TableField_MSSQL", + "name": "CreateNewTag", + "type": "CreateCommand", + "size": 0, + "isNullable": "Default", + "scale": 0, + "comment": "ایجاد تگ جدید", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "Others", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "CreateNewTag", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "UpdateTag", + "type": "UpdateCommand", + "size": 0, + "isNullable": "Default", + "scale": 0, + "comment": "ویرایش تگ", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "Others", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "UpdateTag", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "DeleteTag", + "type": "DeleteCommand", + "size": 0, + "isNullable": "Default", + "scale": 0, + "comment": "حذف تگ", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "Others", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "DeleteTag", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "GetTag", + "type": "GetOneQuery", + "size": 0, + "isNullable": "Default", + "scale": 0, + "comment": "واکشی یک تگ", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "Others", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "GetTag", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + }, + { + "objectType": "TableField_MSSQL", + "name": "GetAllTagByFilter", + "type": "GetAllByFilterQuery", + "size": 0, + "isNullable": "Default", + "scale": 0, + "comment": "واکشی تگ ها بر مبنای فیلتر", + "computedExpression": "", + "defaultValue": "", + "defaultValueType": "Others", + "schema": "", + "userDefinedType": "", + "collate": "", + "isWithValues": false, + "isFilestream": false, + "isColumnSet": false, + "isPersisted": false, + "isSparse": false, + "isRowGUIDColumn": false, + "oldName": "GetAllTagByFilter", + "computedBaseType": "", + "isDefaultConstraint": false, + "defaultConstraint": "", + "isIdentity": false, + "isExistingField": false, + "identitySeed": 0, + "identityIncrement": 0, + "identityIsNotForReplication": false + } + ], + "indexes": [], + "foreignKeys": [ + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_CreateNewTagRequest_1", + "fields": [ + "CreateNewTag" + ], + "referencedSchema": "CMS", + "referencedTable": "CreateNewTagRequest", + "referencedFields": [ + "Name" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_CreateNewTagResponse_1", + "fields": [ + "CreateNewTag" + ], + "referencedSchema": "CMS", + "referencedTable": "CreateNewTagResponse", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_UpdateTagRequest_1", + "fields": [ + "UpdateTag" + ], + "referencedSchema": "CMS", + "referencedTable": "UpdateTagRequest", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_DeleteTagRequest_1", + "fields": [ + "DeleteTag" + ], + "referencedSchema": "CMS", + "referencedTable": "DeleteTagRequest", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_GetTagRequest_1", + "fields": [ + "GetTag" + ], + "referencedSchema": "CMS", + "referencedTable": "GetTagRequest", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_GetTagResponse_1", + "fields": [ + "GetTag" + ], + "referencedSchema": "CMS", + "referencedTable": "GetTagResponse", + "referencedFields": [ + "Id" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_GetAllTagByFilterRequest_1", + "fields": [ + "GetAllTagByFilter" + ], + "referencedSchema": "CMS", + "referencedTable": "GetAllTagByFilterRequest", + "referencedFields": [ + "PaginationState" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "comment": "", + "sourceCardinality": "NoneRelationship", + "targetCardinality": "NoneRelationship", + "oldName": "" + }, + { + "objectType": "ForeignKey_MSSQL", + "name": "fk_TagService_GetAllTagByFilterResponse_1", + "fields": [ + "GetAllTagByFilter" + ], + "referencedSchema": "CMS", + "referencedTable": "GetAllTagByFilterResponse", + "referencedFields": [ + "MetaData" + ], + "onDelete": "", + "onUpdate": "", + "isNotForReplication": false, + "isEnabled": false, + "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": "CreateNewPruductCategoryRequest", @@ -48734,7 +49523,7 @@ "type": "table", "schemaName": "CMS", "tableName": "UserAddress", - "x": 23450, + "x": 23400, "y": 4230, "width": 310, "height": 220, @@ -48751,7 +49540,7 @@ "schemaName": "CMS", "tableName": "Package", "x": 23230, - "y": 2570, + "y": 2310, "width": 310, "height": 170, "isBold": false, @@ -48767,7 +49556,7 @@ "schemaName": "CMS", "tableName": "UserOrder", "x": 22870, - "y": 2430, + "y": 2310, "width": 310, "height": 285, "isBold": false, @@ -48815,7 +49604,7 @@ "schemaName": "CMS", "tableName": "UserService", "x": 8880, - "y": 11120, + "y": 11280, "width": 400, "height": 284, "isBold": false, @@ -48831,7 +49620,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserRequest", "x": 9100, - "y": 10470, + "y": 10640, "width": 400, "height": 270, "isBold": false, @@ -48847,7 +49636,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserResponse", "x": 8740, - "y": 10320, + "y": 10480, "width": 400, "height": 106, "isBold": false, @@ -48878,7 +49667,7 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteUserRequest", - "x": 8760, + "x": 8370, "y": 11460, "width": 400, "height": 106, @@ -48894,7 +49683,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetUserRequest", - "x": 9020, + "x": 8880, "y": 11620, "width": 400, "height": 106, @@ -48911,7 +49700,7 @@ "schemaName": "CMS", "tableName": "GetUserResponse", "x": 11500, - "y": 11310, + "y": 11480, "width": 400, "height": 350, "isBold": false, @@ -48927,7 +49716,7 @@ "schemaName": "CMS", "tableName": "GetAllUserByFilterRequest", "x": 11500, - "y": 11120, + "y": 11290, "width": 400, "height": 137, "isBold": false, @@ -48943,7 +49732,7 @@ "schemaName": "CMS", "tableName": "GetAllUserByFilterFilter", "x": 12020, - "y": 11130, + "y": 11290, "width": 400, "height": 350, "isBold": false, @@ -48959,7 +49748,7 @@ "schemaName": "CMS", "tableName": "GetAllUserByFilterResponse", "x": 11440, - "y": 10950, + "y": 11120, "width": 400, "height": 118, "isBold": false, @@ -48975,7 +49764,7 @@ "schemaName": "CMS", "tableName": "GetAllUserByFilterResponseModel", "x": 11890, - "y": 10730, + "y": 10890, "width": 400, "height": 350, "isBold": false, @@ -48991,7 +49780,7 @@ "schemaName": "CMS", "tableName": "UserAddressService", "x": 11530, - "y": 10210, + "y": 10380, "width": 400, "height": 200, "isBold": false, @@ -49007,7 +49796,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserAddressRequest", "x": 9610, - "y": 10500, + "y": 10670, "width": 400, "height": 213, "isBold": false, @@ -49023,7 +49812,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserAddressResponse", "x": 9870, - "y": 10340, + "y": 10500, "width": 400, "height": 106, "isBold": false, @@ -49039,7 +49828,7 @@ "schemaName": "CMS", "tableName": "UpdateUserAddressRequest", "x": 11530, - "y": 10460, + "y": 10630, "width": 400, "height": 213, "isBold": false, @@ -49055,7 +49844,7 @@ "schemaName": "CMS", "tableName": "DeleteUserAddressRequest", "x": 12050, - "y": 10250, + "y": 10420, "width": 400, "height": 106, "isBold": false, @@ -49071,7 +49860,7 @@ "schemaName": "CMS", "tableName": "GetUserAddressRequest", "x": 11530, - "y": 10050, + "y": 10220, "width": 400, "height": 106, "isBold": false, @@ -49087,7 +49876,7 @@ "schemaName": "CMS", "tableName": "GetUserAddressResponse", "x": 11020, - "y": 9990, + "y": 10160, "width": 400, "height": 213, "isBold": false, @@ -49103,7 +49892,7 @@ "schemaName": "CMS", "tableName": "GetAllUserAddressByFilterRequest", "x": 10450, - "y": 9750, + "y": 9920, "width": 400, "height": 137, "isBold": false, @@ -49119,7 +49908,7 @@ "schemaName": "CMS", "tableName": "GetAllUserAddressByFilterFilter", "x": 9990, - "y": 9660, + "y": 9830, "width": 400, "height": 213, "isBold": false, @@ -49135,7 +49924,7 @@ "schemaName": "CMS", "tableName": "GetAllUserAddressByFilterResponse", "x": 10450, - "y": 10020, + "y": 10190, "width": 400, "height": 118, "isBold": false, @@ -49151,7 +49940,7 @@ "schemaName": "CMS", "tableName": "GetAllUserAddressByFilterResponseModel", "x": 9990, - "y": 9930, + "y": 10100, "width": 400, "height": 213, "isBold": false, @@ -49167,7 +49956,7 @@ "schemaName": "CMS", "tableName": "PackageService", "x": 9190, - "y": 8500, + "y": 8670, "width": 400, "height": 175, "isBold": false, @@ -49183,7 +49972,7 @@ "schemaName": "CMS", "tableName": "CreateNewPackageRequest", "x": 9220, - "y": 10170, + "y": 10340, "width": 400, "height": 175, "isBold": false, @@ -49199,7 +49988,7 @@ "schemaName": "CMS", "tableName": "CreateNewPackageResponse", "x": 9480, - "y": 10010, + "y": 10180, "width": 400, "height": 106, "isBold": false, @@ -49215,7 +50004,7 @@ "schemaName": "CMS", "tableName": "UpdatePackageRequest", "x": 9640, - "y": 8500, + "y": 8670, "width": 400, "height": 175, "isBold": false, @@ -49231,7 +50020,7 @@ "schemaName": "CMS", "tableName": "DeletePackageRequest", "x": 9190, - "y": 8280, + "y": 8450, "width": 400, "height": 106, "isBold": false, @@ -49247,7 +50036,7 @@ "schemaName": "CMS", "tableName": "GetPackageRequest", "x": 8740, - "y": 8530, + "y": 8700, "width": 400, "height": 106, "isBold": false, @@ -49262,8 +50051,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetPackageResponse", - "x": 8870, - "y": 8790, + "x": 8850, + "y": 8960, "width": 400, "height": 175, "isBold": false, @@ -49278,8 +50067,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllPackageByFilterRequest", - "x": 8940, - "y": 9080, + "x": 8930, + "y": 9240, "width": 400, "height": 137, "isBold": false, @@ -49294,8 +50083,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllPackageByFilterFilter", - "x": 8940, - "y": 9270, + "x": 8930, + "y": 9430, "width": 400, "height": 175, "isBold": false, @@ -49310,8 +50099,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllPackageByFilterResponse", - "x": 9010, - "y": 9550, + "x": 9000, + "y": 9720, "width": 400, "height": 118, "isBold": false, @@ -49326,8 +50115,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllPackageByFilterResponseModel", - "x": 9010, - "y": 9730, + "x": 9000, + "y": 9890, "width": 400, "height": 175, "isBold": false, @@ -49342,8 +50131,8 @@ "type": "table", "schemaName": "CMS", "tableName": "UserOrderService", - "x": 6380, - "y": 12010, + "x": 6700, + "y": 11390, "width": 400, "height": 175, "isBold": false, @@ -49358,8 +50147,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewUserOrderRequest", - "x": 8250, - "y": 11460, + "x": 8110, + "y": 10840, "width": 400, "height": 220, "isBold": false, @@ -49374,8 +50163,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewUserOrderResponse", - "x": 6600, - "y": 11410, + "x": 6920, + "y": 10790, "width": 400, "height": 106, "isBold": false, @@ -49390,8 +50179,8 @@ "type": "table", "schemaName": "CMS", "tableName": "UpdateUserOrderRequest", - "x": 6240, - "y": 11120, + "x": 6560, + "y": 10510, "width": 400, "height": 230, "isBold": false, @@ -49406,8 +50195,8 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteUserOrderRequest", - "x": 5860, - "y": 12050, + "x": 6180, + "y": 11430, "width": 400, "height": 106, "isBold": false, @@ -49422,8 +50211,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetUserOrderRequest", - "x": 6380, - "y": 12240, + "x": 6700, + "y": 11620, "width": 400, "height": 106, "isBold": false, @@ -49438,8 +50227,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetUserOrderResponse", - "x": 6950, - "y": 12100, + "x": 7270, + "y": 11480, "width": 400, "height": 240, "isBold": false, @@ -49454,8 +50243,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserOrderByFilterRequest", - "x": 6950, - "y": 11910, + "x": 7270, + "y": 11300, "width": 400, "height": 137, "isBold": false, @@ -49470,8 +50259,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserOrderByFilterFilter", - "x": 7460, - "y": 11910, + "x": 7780, + "y": 11290, "width": 400, "height": 240, "isBold": false, @@ -49486,8 +50275,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserOrderByFilterResponse", - "x": 6890, - "y": 11740, + "x": 7210, + "y": 11130, "width": 400, "height": 118, "isBold": false, @@ -49502,8 +50291,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserOrderByFilterResponseModel", - "x": 7340, - "y": 11620, + "x": 7660, + "y": 11010, "width": 400, "height": 240, "isBold": false, @@ -49518,8 +50307,8 @@ "type": "table", "schemaName": "CMS", "tableName": "RoleService", - "x": 8080, - "y": 13150, + "x": 7950, + "y": 13240, "width": 400, "height": 175, "isBold": false, @@ -49534,8 +50323,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewRoleRequest", - "x": 8250, - "y": 11730, + "x": 8110, + "y": 11820, "width": 400, "height": 137, "isBold": false, @@ -49550,8 +50339,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewRoleResponse", - "x": 7790, - "y": 11760, + "x": 7660, + "y": 11910, "width": 400, "height": 106, "isBold": false, @@ -49566,8 +50355,8 @@ "type": "table", "schemaName": "CMS", "tableName": "UpdateRoleRequest", - "x": 7630, - "y": 13160, + "x": 7500, + "y": 13250, "width": 400, "height": 137, "isBold": false, @@ -49582,8 +50371,8 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteRoleRequest", - "x": 8080, - "y": 13370, + "x": 7950, + "y": 13460, "width": 400, "height": 106, "isBold": false, @@ -49598,8 +50387,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetRoleRequest", - "x": 8540, - "y": 13180, + "x": 8400, + "y": 13270, "width": 400, "height": 106, "isBold": false, @@ -49614,8 +50403,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetRoleResponse", - "x": 8420, - "y": 12900, + "x": 8280, + "y": 12990, "width": 400, "height": 137, "isBold": false, @@ -49630,8 +50419,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllRoleByFilterRequest", - "x": 8340, - "y": 12650, + "x": 8210, + "y": 12740, "width": 400, "height": 137, "isBold": false, @@ -49646,8 +50435,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllRoleByFilterFilter", - "x": 8340, - "y": 12460, + "x": 8210, + "y": 12550, "width": 400, "height": 137, "isBold": false, @@ -49662,8 +50451,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllRoleByFilterResponse", - "x": 8260, - "y": 12230, + "x": 8120, + "y": 12320, "width": 400, "height": 118, "isBold": false, @@ -49678,8 +50467,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllRoleByFilterResponseModel", - "x": 8260, - "y": 12040, + "x": 8120, + "y": 12130, "width": 400, "height": 137, "isBold": false, @@ -49695,7 +50484,7 @@ "schemaName": "CMS", "tableName": "UserRoleService", "x": 14100, - "y": 11630, + "y": 11720, "width": 400, "height": 175, "isBold": false, @@ -49710,8 +50499,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewUserRoleRequest", - "x": 12440, - "y": 11730, + "x": 12400, + "y": 11820, "width": 400, "height": 137, "isBold": false, @@ -49727,7 +50516,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserRoleResponse", "x": 12950, - "y": 11730, + "y": 11820, "width": 400, "height": 106, "isBold": false, @@ -49743,7 +50532,7 @@ "schemaName": "CMS", "tableName": "UpdateUserRoleRequest", "x": 14100, - "y": 11850, + "y": 11940, "width": 400, "height": 137, "isBold": false, @@ -49759,7 +50548,7 @@ "schemaName": "CMS", "tableName": "DeleteUserRoleRequest", "x": 14610, - "y": 11660, + "y": 11750, "width": 400, "height": 106, "isBold": false, @@ -49775,7 +50564,7 @@ "schemaName": "CMS", "tableName": "GetUserRoleRequest", "x": 14100, - "y": 11470, + "y": 11560, "width": 400, "height": 106, "isBold": false, @@ -49791,7 +50580,7 @@ "schemaName": "CMS", "tableName": "GetUserRoleResponse", "x": 13580, - "y": 11490, + "y": 11580, "width": 400, "height": 137, "isBold": false, @@ -49807,7 +50596,7 @@ "schemaName": "CMS", "tableName": "GetAllUserRoleByFilterRequest", "x": 13010, - "y": 11300, + "y": 11390, "width": 400, "height": 137, "isBold": false, @@ -49823,7 +50612,7 @@ "schemaName": "CMS", "tableName": "GetAllUserRoleByFilterFilter", "x": 12560, - "y": 11300, + "y": 11390, "width": 400, "height": 137, "isBold": false, @@ -49839,7 +50628,7 @@ "schemaName": "CMS", "tableName": "GetAllUserRoleByFilterResponse", "x": 13010, - "y": 11500, + "y": 11590, "width": 400, "height": 118, "isBold": false, @@ -49855,7 +50644,7 @@ "schemaName": "CMS", "tableName": "GetAllUserRoleByFilterResponseModel", "x": 12560, - "y": 11480, + "y": 11570, "width": 400, "height": 137, "isBold": false, @@ -49871,7 +50660,7 @@ "schemaName": "CMS", "tableName": "OtpToken", "x": 22070, - "y": 1720, + "y": 1600, "width": 310, "height": 258, "isBold": false, @@ -49886,8 +50675,8 @@ "type": "table", "schemaName": "CMS", "tableName": "OtpTokenService", - "x": 6040, - "y": 7660, + "x": 12030, + "y": 7820, "width": 400, "height": 150, "isBold": false, @@ -49902,8 +50691,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewOtpTokenRequest", - "x": 6060, - "y": 8160, + "x": 12050, + "y": 8310, "width": 400, "height": 154, "isBold": false, @@ -49918,8 +50707,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewOtpTokenResponse", - "x": 6320, - "y": 7930, + "x": 12300, + "y": 8080, "width": 400, "height": 180, "isBold": false, @@ -49934,8 +50723,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllOtpTokenByFilterRequest", - "x": 6500, - "y": 7670, + "x": 12480, + "y": 7830, "width": 400, "height": 137, "isBold": false, @@ -49950,8 +50739,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllOtpTokenByFilterFilter", - "x": 6950, - "y": 7630, + "x": 12930, + "y": 7790, "width": 400, "height": 213, "isBold": false, @@ -49966,8 +50755,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllOtpTokenByFilterResponse", - "x": 6040, - "y": 7490, + "x": 12030, + "y": 7650, "width": 400, "height": 118, "isBold": false, @@ -49982,8 +50771,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllOtpTokenByFilterResponseModel", - "x": 6040, - "y": 7230, + "x": 12030, + "y": 7380, "width": 400, "height": 213, "isBold": false, @@ -49998,8 +50787,8 @@ "type": "table", "schemaName": "CMS", "tableName": "VerifyOtpTokenRequest", - "x": 5590, - "y": 7660, + "x": 11580, + "y": 7810, "width": 400, "height": 160, "isBold": false, @@ -50014,8 +50803,8 @@ "type": "table", "schemaName": "CMS", "tableName": "VerifyOtpTokenResponse", - "x": 5800, - "y": 7870, + "x": 11790, + "y": 8030, "width": 400, "height": 180, "isBold": false, @@ -50031,7 +50820,7 @@ "schemaName": "CMS", "tableName": "GetJwtTokenRequest", "x": 10930, - "y": 11090, + "y": 11260, "width": 400, "height": 106, "isBold": false, @@ -50047,7 +50836,7 @@ "schemaName": "CMS", "tableName": "GetJwtTokenResponse", "x": 10420, - "y": 11060, + "y": 11230, "width": 400, "height": 106, "isBold": false, @@ -50063,7 +50852,7 @@ "schemaName": "CMS", "tableName": "SetAddressAsDefaultRequest", "x": 10380, - "y": 10190, + "y": 10360, "width": 400, "height": 106, "isBold": false, @@ -50110,8 +50899,8 @@ "type": "table", "schemaName": "CMS", "tableName": "Transactions", - "x": 23590, - "y": 2090, + "x": 23090, + "y": 1680, "width": 310, "height": 574, "isBold": false, @@ -50127,7 +50916,7 @@ "schemaName": "CMS", "tableName": "UserCarts", "x": 22140, - "y": 3180, + "y": 3060, "width": 310, "height": 220, "isBold": false, @@ -50143,7 +50932,7 @@ "schemaName": "CMS", "tableName": "FactorDetails", "x": 22680, - "y": 2770, + "y": 2650, "width": 310, "height": 290, "isBold": false, @@ -50159,7 +50948,7 @@ "schemaName": "CMS", "tableName": "Products", "x": 22500, - "y": 3110, + "y": 2990, "width": 310, "height": 358, "isBold": false, @@ -50174,7 +50963,7 @@ "type": "table", "schemaName": "CMS", "tableName": "ProductImages", - "x": 22500, + "x": 22360, "y": 3930, "width": 310, "height": 358, @@ -50190,7 +50979,7 @@ "type": "table", "schemaName": "CMS", "tableName": "ProductGallerys", - "x": 22500, + "x": 22360, "y": 3520, "width": 310, "height": 358, @@ -50206,8 +50995,8 @@ "type": "table", "schemaName": "CMS", "tableName": "PaymentStatus", - "x": 22950, - "y": 750, + "x": 22870, + "y": 850, "width": 310, "height": 170, "isBold": false, @@ -50222,7 +51011,7 @@ "type": "table", "schemaName": "CMS", "tableName": "TransactionType", - "x": 23750, + "x": 23710, "y": 4960, "width": 310, "height": 170, @@ -50239,7 +51028,7 @@ "schemaName": "CMS", "tableName": "UserWalletService", "x": 4190, - "y": 8700, + "y": 13750, "width": 400, "height": 175, "isBold": false, @@ -50254,8 +51043,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewUserWalletRequest", - "x": 5610, - "y": 8290, + "x": 6060, + "y": 13340, "width": 400, "height": 137, "isBold": false, @@ -50271,7 +51060,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserWalletResponse", "x": 4420, - "y": 8190, + "y": 13250, "width": 400, "height": 106, "isBold": false, @@ -50287,7 +51076,7 @@ "schemaName": "CMS", "tableName": "UpdateUserWalletRequest", "x": 4060, - "y": 8010, + "y": 13060, "width": 400, "height": 137, "isBold": false, @@ -50303,7 +51092,7 @@ "schemaName": "CMS", "tableName": "DeleteUserWalletRequest", "x": 3680, - "y": 8730, + "y": 13780, "width": 400, "height": 106, "isBold": false, @@ -50319,7 +51108,7 @@ "schemaName": "CMS", "tableName": "GetUserWalletRequest", "x": 4190, - "y": 8930, + "y": 13980, "width": 400, "height": 106, "isBold": false, @@ -50335,7 +51124,7 @@ "schemaName": "CMS", "tableName": "GetUserWalletResponse", "x": 4770, - "y": 8790, + "y": 13840, "width": 400, "height": 137, "isBold": false, @@ -50351,7 +51140,7 @@ "schemaName": "CMS", "tableName": "GetAllUserWalletByFilterRequest", "x": 4770, - "y": 8600, + "y": 13650, "width": 400, "height": 137, "isBold": false, @@ -50367,7 +51156,7 @@ "schemaName": "CMS", "tableName": "GetAllUserWalletByFilterFilter", "x": 5280, - "y": 8600, + "y": 13650, "width": 400, "height": 137, "isBold": false, @@ -50383,7 +51172,7 @@ "schemaName": "CMS", "tableName": "GetAllUserWalletByFilterResponse", "x": 4700, - "y": 8430, + "y": 13480, "width": 400, "height": 118, "isBold": false, @@ -50399,7 +51188,7 @@ "schemaName": "CMS", "tableName": "GetAllUserWalletByFilterResponseModel", "x": 5160, - "y": 8410, + "y": 13470, "width": 400, "height": 137, "isBold": false, @@ -50414,8 +51203,8 @@ "type": "table", "schemaName": "CMS", "tableName": "UserWalletChangeLogService", - "x": 5450, - "y": 15080, + "x": 5900, + "y": 15170, "width": 400, "height": 175, "isBold": false, @@ -50430,8 +51219,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewUserWalletChangeLogRequest", - "x": 5610, - "y": 13440, + "x": 6060, + "y": 13530, "width": 400, "height": 194, "isBold": false, @@ -50446,8 +51235,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewUserWalletChangeLogResponse", - "x": 5160, - "y": 13580, + "x": 5610, + "y": 13500, "width": 400, "height": 106, "isBold": false, @@ -50462,8 +51251,8 @@ "type": "table", "schemaName": "CMS", "tableName": "UpdateUserWalletChangeLogRequest", - "x": 4990, - "y": 15070, + "x": 5450, + "y": 15160, "width": 400, "height": 194, "isBold": false, @@ -50478,8 +51267,8 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteUserWalletChangeLogRequest", - "x": 5450, - "y": 15310, + "x": 5900, + "y": 15400, "width": 400, "height": 106, "isBold": false, @@ -50494,8 +51283,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetUserWalletChangeLogRequest", - "x": 5900, - "y": 15120, + "x": 6350, + "y": 15210, "width": 400, "height": 106, "isBold": false, @@ -50510,8 +51299,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetUserWalletChangeLogResponse", - "x": 5780, - "y": 14770, + "x": 6240, + "y": 14860, "width": 400, "height": 194, "isBold": false, @@ -50526,8 +51315,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserWalletChangeLogByFilterRequest", - "x": 5700, - "y": 14520, + "x": 6160, + "y": 14610, "width": 400, "height": 137, "isBold": false, @@ -50542,8 +51331,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserWalletChangeLogByFilterFilter", - "x": 5700, - "y": 14280, + "x": 6160, + "y": 14370, "width": 400, "height": 194, "isBold": false, @@ -50558,8 +51347,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserWalletChangeLogByFilterResponse", - "x": 5620, - "y": 14050, + "x": 6080, + "y": 14140, "width": 400, "height": 118, "isBold": false, @@ -50574,8 +51363,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllUserWalletChangeLogByFilterResponseModel", - "x": 5620, - "y": 13800, + "x": 6080, + "y": 13890, "width": 400, "height": 194, "isBold": false, @@ -50591,7 +51380,7 @@ "schemaName": "CMS", "tableName": "UserCartsService", "x": 16660, - "y": 13350, + "y": 13440, "width": 400, "height": 175, "isBold": false, @@ -50607,7 +51396,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserCartsRequest", "x": 14970, - "y": 13460, + "y": 13550, "width": 400, "height": 156, "isBold": false, @@ -50623,7 +51412,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserCartsResponse", "x": 15510, - "y": 13460, + "y": 13550, "width": 400, "height": 106, "isBold": false, @@ -50639,7 +51428,7 @@ "schemaName": "CMS", "tableName": "UpdateUserCartsRequest", "x": 16660, - "y": 13580, + "y": 13670, "width": 400, "height": 156, "isBold": false, @@ -50655,7 +51444,7 @@ "schemaName": "CMS", "tableName": "DeleteUserCartsRequest", "x": 17180, - "y": 13390, + "y": 13480, "width": 400, "height": 106, "isBold": false, @@ -50671,7 +51460,7 @@ "schemaName": "CMS", "tableName": "GetUserCartsRequest", "x": 16660, - "y": 13190, + "y": 13280, "width": 400, "height": 106, "isBold": false, @@ -50687,7 +51476,7 @@ "schemaName": "CMS", "tableName": "GetUserCartsResponse", "x": 16150, - "y": 13190, + "y": 13280, "width": 400, "height": 156, "isBold": false, @@ -50703,7 +51492,7 @@ "schemaName": "CMS", "tableName": "GetAllUserCartsByFilterRequest", "x": 15580, - "y": 13010, + "y": 13100, "width": 400, "height": 137, "isBold": false, @@ -50719,7 +51508,7 @@ "schemaName": "CMS", "tableName": "GetAllUserCartsByFilterFilter", "x": 15120, - "y": 12980, + "y": 13070, "width": 400, "height": 156, "isBold": false, @@ -50735,7 +51524,7 @@ "schemaName": "CMS", "tableName": "GetAllUserCartsByFilterResponse", "x": 15580, - "y": 13220, + "y": 13310, "width": 400, "height": 118, "isBold": false, @@ -50751,7 +51540,7 @@ "schemaName": "CMS", "tableName": "GetAllUserCartsByFilterResponseModel", "x": 15120, - "y": 13190, + "y": 13280, "width": 400, "height": 156, "isBold": false, @@ -50766,7 +51555,7 @@ "type": "table", "schemaName": "CMS", "tableName": "ProductGallerysService", - "x": 14830, + "x": 11540, "y": 5720, "width": 400, "height": 175, @@ -50782,8 +51571,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewProductGallerysRequest", - "x": 14610, - "y": 7110, + "x": 11580, + "y": 7270, "width": 400, "height": 137, "isBold": false, @@ -50798,7 +51587,7 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewProductGallerysResponse", - "x": 15120, + "x": 11830, "y": 7110, "width": 400, "height": 106, @@ -50814,7 +51603,7 @@ "type": "table", "schemaName": "CMS", "tableName": "UpdateProductGallerysRequest", - "x": 15290, + "x": 12000, "y": 5730, "width": 400, "height": 137, @@ -50830,7 +51619,7 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteProductGallerysRequest", - "x": 14830, + "x": 11540, "y": 5490, "width": 400, "height": 106, @@ -50846,7 +51635,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetProductGallerysRequest", - "x": 14380, + "x": 11090, "y": 5750, "width": 400, "height": 106, @@ -50862,7 +51651,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetProductGallerysResponse", - "x": 14510, + "x": 11210, "y": 6000, "width": 400, "height": 137, @@ -50878,7 +51667,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductGallerysByFilterRequest", - "x": 14580, + "x": 11280, "y": 6250, "width": 400, "height": 137, @@ -50894,7 +51683,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductGallerysByFilterFilter", - "x": 14580, + "x": 11280, "y": 6440, "width": 400, "height": 137, @@ -50910,7 +51699,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductGallerysByFilterResponse", - "x": 14650, + "x": 11350, "y": 6690, "width": 400, "height": 118, @@ -50926,7 +51715,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductGallerysByFilterResponseModel", - "x": 14650, + "x": 11350, "y": 6860, "width": 400, "height": 137, @@ -50943,7 +51732,7 @@ "schemaName": "CMS", "tableName": "FactorDetailsService", "x": 2950, - "y": 16170, + "y": 16260, "width": 400, "height": 175, "isBold": false, @@ -50959,7 +51748,7 @@ "schemaName": "CMS", "tableName": "CreateNewFactorDetailsRequest", "x": 3560, - "y": 15120, + "y": 15210, "width": 400, "height": 232, "isBold": false, @@ -50975,7 +51764,7 @@ "schemaName": "CMS", "tableName": "CreateNewFactorDetailsResponse", "x": 3170, - "y": 14960, + "y": 15050, "width": 400, "height": 106, "isBold": false, @@ -50991,7 +51780,7 @@ "schemaName": "CMS", "tableName": "UpdateFactorDetailsRequest", "x": 2810, - "y": 14680, + "y": 14770, "width": 400, "height": 232, "isBold": false, @@ -51007,7 +51796,7 @@ "schemaName": "CMS", "tableName": "DeleteFactorDetailsRequest", "x": 2430, - "y": 16200, + "y": 16290, "width": 400, "height": 106, "isBold": false, @@ -51023,7 +51812,7 @@ "schemaName": "CMS", "tableName": "GetFactorDetailsRequest", "x": 2950, - "y": 16390, + "y": 16480, "width": 400, "height": 106, "isBold": false, @@ -51039,7 +51828,7 @@ "schemaName": "CMS", "tableName": "GetFactorDetailsResponse", "x": 3520, - "y": 16260, + "y": 16350, "width": 400, "height": 232, "isBold": false, @@ -51055,7 +51844,7 @@ "schemaName": "CMS", "tableName": "GetAllFactorDetailsByFilterRequest", "x": 3520, - "y": 16070, + "y": 16160, "width": 400, "height": 137, "isBold": false, @@ -51071,7 +51860,7 @@ "schemaName": "CMS", "tableName": "GetAllFactorDetailsByFilterFilter", "x": 4030, - "y": 16070, + "y": 16160, "width": 400, "height": 232, "isBold": false, @@ -51087,7 +51876,7 @@ "schemaName": "CMS", "tableName": "GetAllFactorDetailsByFilterResponse", "x": 3460, - "y": 15900, + "y": 15990, "width": 400, "height": 118, "isBold": false, @@ -51103,7 +51892,7 @@ "schemaName": "CMS", "tableName": "GetAllFactorDetailsByFilterResponseModel", "x": 3910, - "y": 15790, + "y": 15880, "width": 400, "height": 232, "isBold": false, @@ -51119,7 +51908,7 @@ "schemaName": "CMS", "tableName": "ProductsService", "x": 4650, - "y": 17530, + "y": 17620, "width": 400, "height": 175, "isBold": false, @@ -51135,7 +51924,7 @@ "schemaName": "CMS", "tableName": "CreateNewProductsRequest", "x": 3560, - "y": 15410, + "y": 15500, "width": 400, "height": 327, "isBold": false, @@ -51151,7 +51940,7 @@ "schemaName": "CMS", "tableName": "CreateNewProductsResponse", "x": 4360, - "y": 15630, + "y": 15720, "width": 400, "height": 106, "isBold": false, @@ -51167,7 +51956,7 @@ "schemaName": "CMS", "tableName": "UpdateProductsRequest", "x": 4200, - "y": 17450, + "y": 17540, "width": 400, "height": 327, "isBold": false, @@ -51183,7 +51972,7 @@ "schemaName": "CMS", "tableName": "DeleteProductsRequest", "x": 4650, - "y": 17750, + "y": 17840, "width": 400, "height": 106, "isBold": false, @@ -51199,7 +51988,7 @@ "schemaName": "CMS", "tableName": "GetProductsRequest", "x": 5100, - "y": 17560, + "y": 17650, "width": 400, "height": 106, "isBold": false, @@ -51214,8 +52003,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetProductsResponse", - "x": 4990, - "y": 17090, + "x": 4970, + "y": 17180, "width": 400, "height": 327, "isBold": false, @@ -51230,8 +52019,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductsByFilterRequest", - "x": 4910, - "y": 16840, + "x": 4900, + "y": 16930, "width": 400, "height": 137, "isBold": false, @@ -51246,8 +52035,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductsByFilterFilter", - "x": 4910, - "y": 16460, + "x": 4900, + "y": 16550, "width": 400, "height": 327, "isBold": false, @@ -51263,7 +52052,7 @@ "schemaName": "CMS", "tableName": "GetAllProductsByFilterResponse", "x": 4830, - "y": 16230, + "y": 16320, "width": 400, "height": 118, "isBold": false, @@ -51279,7 +52068,7 @@ "schemaName": "CMS", "tableName": "GetAllProductsByFilterResponseModel", "x": 4830, - "y": 15850, + "y": 15940, "width": 400, "height": 327, "isBold": false, @@ -51294,7 +52083,7 @@ "type": "table", "schemaName": "CMS", "tableName": "ProductImagesService", - "x": 24940, + "x": 24890, "y": 5760, "width": 400, "height": 175, @@ -51311,7 +52100,7 @@ "schemaName": "CMS", "tableName": "CreateNewProductImagesRequest", "x": 17570, - "y": 15390, + "y": 15480, "width": 400, "height": 156, "isBold": false, @@ -51326,7 +52115,7 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewProductImagesResponse", - "x": 23790, + "x": 23740, "y": 5860, "width": 400, "height": 106, @@ -51342,7 +52131,7 @@ "type": "table", "schemaName": "CMS", "tableName": "UpdateProductImagesRequest", - "x": 24940, + "x": 24890, "y": 5980, "width": 400, "height": 156, @@ -51358,7 +52147,7 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteProductImagesRequest", - "x": 25450, + "x": 25400, "y": 5790, "width": 400, "height": 106, @@ -51374,7 +52163,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetProductImagesRequest", - "x": 24940, + "x": 24890, "y": 5600, "width": 400, "height": 106, @@ -51390,7 +52179,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetProductImagesResponse", - "x": 24420, + "x": 24370, "y": 5590, "width": 400, "height": 156, @@ -51406,7 +52195,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductImagesByFilterRequest", - "x": 23910, + "x": 23860, "y": 70, "width": 400, "height": 137, @@ -51422,7 +52211,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductImagesByFilterFilter", - "x": 23460, + "x": 23410, "y": 40, "width": 400, "height": 156, @@ -51438,7 +52227,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductImagesByFilterResponse", - "x": 23850, + "x": 23800, "y": 290, "width": 400, "height": 118, @@ -51454,7 +52243,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllProductImagesByFilterResponseModel", - "x": 23400, + "x": 23350, "y": 250, "width": 400, "height": 156, @@ -51518,7 +52307,7 @@ "type": "table", "schemaName": "CMS", "tableName": "UpdateTransactionsRequest", - "x": 23710, + "x": 23660, "y": 5250, "width": 400, "height": 498, @@ -51535,7 +52324,7 @@ "schemaName": "CMS", "tableName": "DeleteTransactionsRequest", "x": 17290, - "y": 100, + "y": 40, "width": 400, "height": 106, "isBold": false, @@ -51567,7 +52356,7 @@ "schemaName": "CMS", "tableName": "GetTransactionsResponse", "x": 17950, - "y": 760, + "y": 860, "width": 400, "height": 498, "isBold": false, @@ -51583,7 +52372,7 @@ "schemaName": "CMS", "tableName": "GetAllTransactionsByFilterRequest", "x": 17750, - "y": 370, + "y": 470, "width": 400, "height": 137, "isBold": false, @@ -51599,7 +52388,7 @@ "schemaName": "CMS", "tableName": "GetAllTransactionsByFilterFilter", "x": 18210, - "y": 170, + "y": 260, "width": 400, "height": 543, "isBold": false, @@ -51614,8 +52403,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllTransactionsByFilterResponse", - "x": 17750, - "y": 200, + "x": 18660, + "y": 150, "width": 400, "height": 118, "isBold": false, @@ -51630,7 +52419,7 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllTransactionsByFilterResponseModel", - "x": 22900, + "x": 22820, "y": 30, "width": 400, "height": 498, @@ -51647,7 +52436,7 @@ "schemaName": "CMS", "tableName": "AdminGetJwtTokenRequest", "x": 9900, - "y": 11010, + "y": 11180, "width": 400, "height": 128, "isBold": false, @@ -51663,7 +52452,7 @@ "schemaName": "CMS", "tableName": "AdminGetJwtTokenResponse", "x": 9390, - "y": 11000, + "y": 11170, "width": 400, "height": 106, "isBold": false, @@ -51679,7 +52468,7 @@ "schemaName": "CMS", "tableName": "SetPasswordForUserRequest", "x": 9200, - "y": 10800, + "y": 10960, "width": 400, "height": 155, "isBold": false, @@ -51695,7 +52484,7 @@ "schemaName": "CMS", "tableName": "Contract", "x": 21720, - "y": 2030, + "y": 1910, "width": 310, "height": 258, "isBold": false, @@ -51711,7 +52500,7 @@ "schemaName": "CMS", "tableName": "UserContract", "x": 21720, - "y": 2340, + "y": 2220, "width": 310, "height": 258, "isBold": false, @@ -51727,7 +52516,7 @@ "schemaName": "CMS", "tableName": "ContractService", "x": 19490, - "y": 1640, + "y": 1530, "width": 400, "height": 175, "isBold": false, @@ -51742,8 +52531,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewContractRequest", - "x": 20160, - "y": 1270, + "x": 20510, + "y": 1150, "width": 400, "height": 175, "isBold": false, @@ -51758,8 +52547,8 @@ "type": "table", "schemaName": "CMS", "tableName": "CreateNewContractResponse", - "x": 19710, - "y": 1220, + "x": 19520, + "y": 1100, "width": 400, "height": 106, "isBold": false, @@ -51775,7 +52564,7 @@ "schemaName": "CMS", "tableName": "UpdateContractRequest", "x": 18720, - "y": 940, + "y": 1590, "width": 400, "height": 175, "isBold": false, @@ -51790,8 +52579,8 @@ "type": "table", "schemaName": "CMS", "tableName": "DeleteContractRequest", - "x": 19350, - "y": 1060, + "x": 19270, + "y": 1270, "width": 400, "height": 106, "isBold": false, @@ -51807,7 +52596,7 @@ "schemaName": "CMS", "tableName": "GetContractRequest", "x": 18970, - "y": 1600, + "y": 1430, "width": 400, "height": 106, "isBold": false, @@ -51823,7 +52612,7 @@ "schemaName": "CMS", "tableName": "GetContractResponse", "x": 19490, - "y": 1870, + "y": 1750, "width": 400, "height": 175, "isBold": false, @@ -51839,7 +52628,7 @@ "schemaName": "CMS", "tableName": "GetAllContractByFilterRequest", "x": 20000, - "y": 1540, + "y": 1420, "width": 400, "height": 137, "isBold": false, @@ -51855,7 +52644,7 @@ "schemaName": "CMS", "tableName": "GetAllContractByFilterFilter", "x": 20510, - "y": 1500, + "y": 1380, "width": 400, "height": 175, "isBold": false, @@ -51870,8 +52659,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllContractByFilterResponse", - "x": 19940, - "y": 1730, + "x": 20000, + "y": 1610, "width": 400, "height": 118, "isBold": false, @@ -51886,8 +52675,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetAllContractByFilterResponseModel", - "x": 20390, - "y": 1730, + "x": 20510, + "y": 1610, "width": 400, "height": 175, "isBold": false, @@ -51903,7 +52692,7 @@ "schemaName": "CMS", "tableName": "UserContractService", "x": 540, - "y": 18200, + "y": 18300, "width": 400, "height": 175, "isBold": false, @@ -51919,7 +52708,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserContractRequest", "x": 2310, - "y": 17710, + "y": 17810, "width": 400, "height": 175, "isBold": false, @@ -51935,7 +52724,7 @@ "schemaName": "CMS", "tableName": "CreateNewUserContractResponse", "x": 770, - "y": 17630, + "y": 17730, "width": 400, "height": 106, "isBold": false, @@ -51951,7 +52740,7 @@ "schemaName": "CMS", "tableName": "UpdateUserContractRequest", "x": 410, - "y": 17400, + "y": 17510, "width": 400, "height": 175, "isBold": false, @@ -51967,7 +52756,7 @@ "schemaName": "CMS", "tableName": "DeleteUserContractRequest", "x": 30, - "y": 18230, + "y": 18340, "width": 400, "height": 106, "isBold": false, @@ -51983,7 +52772,7 @@ "schemaName": "CMS", "tableName": "GetUserContractRequest", "x": 540, - "y": 18430, + "y": 18530, "width": 400, "height": 106, "isBold": false, @@ -51999,7 +52788,7 @@ "schemaName": "CMS", "tableName": "GetUserContractResponse", "x": 1120, - "y": 18290, + "y": 18390, "width": 400, "height": 175, "isBold": false, @@ -52015,7 +52804,7 @@ "schemaName": "CMS", "tableName": "GetAllUserContractByFilterRequest", "x": 1120, - "y": 18100, + "y": 18200, "width": 400, "height": 137, "isBold": false, @@ -52031,7 +52820,7 @@ "schemaName": "CMS", "tableName": "GetAllUserContractByFilterFilter", "x": 1630, - "y": 18100, + "y": 18210, "width": 400, "height": 175, "isBold": false, @@ -52047,7 +52836,7 @@ "schemaName": "CMS", "tableName": "GetAllUserContractByFilterResponse", "x": 1060, - "y": 17930, + "y": 18030, "width": 400, "height": 118, "isBold": false, @@ -52063,7 +52852,7 @@ "schemaName": "CMS", "tableName": "GetAllUserContractByFilterResponseModel", "x": 1510, - "y": 17870, + "y": 17980, "width": 400, "height": 175, "isBold": false, @@ -52079,7 +52868,7 @@ "schemaName": "CMS", "tableName": "ContractType", "x": 21740, - "y": 1850, + "y": 1740, "width": 278, "height": 124, "isBold": false, @@ -52094,8 +52883,8 @@ "type": "table", "schemaName": "CMS", "tableName": "Category", - "x": 23280, - "y": 3150, + "x": 23140, + "y": 3400, "width": 364, "height": 274, "isBold": false, @@ -52111,7 +52900,7 @@ "schemaName": "CMS", "tableName": "CategoryService", "x": 2140, - "y": 19340, + "y": 19440, "width": 431, "height": 200, "isBold": false, @@ -52127,7 +52916,7 @@ "schemaName": "CMS", "tableName": "CreateNewCategoryRequest", "x": 2310, - "y": 17930, + "y": 18030, "width": 356, "height": 220, "isBold": false, @@ -52143,7 +52932,7 @@ "schemaName": "CMS", "tableName": "CreateNewCategoryResponse", "x": 1960, - "y": 17850, + "y": 17950, "width": 300, "height": 200, "isBold": false, @@ -52159,7 +52948,7 @@ "schemaName": "CMS", "tableName": "GetAllCategoryByFilterFilter", "x": 1390, - "y": 19340, + "y": 19440, "width": 349, "height": 200, "isBold": false, @@ -52175,7 +52964,7 @@ "schemaName": "CMS", "tableName": "GetAllCategoryByFilterRequest", "x": 1790, - "y": 19340, + "y": 19440, "width": 303, "height": 200, "isBold": false, @@ -52191,7 +52980,7 @@ "schemaName": "CMS", "tableName": "GetAllCategoryByFilterResponseModel", "x": 2170, - "y": 19850, + "y": 19950, "width": 381, "height": 263, "isBold": false, @@ -52207,7 +52996,7 @@ "schemaName": "CMS", "tableName": "GetAllCategoryByFilterResponse", "x": 2200, - "y": 19590, + "y": 19700, "width": 325, "height": 200, "isBold": false, @@ -52223,7 +53012,7 @@ "schemaName": "CMS", "tableName": "GetCategoryRequest", "x": 2620, - "y": 19340, + "y": 19440, "width": 286, "height": 200, "isBold": false, @@ -52238,8 +53027,8 @@ "type": "table", "schemaName": "CMS", "tableName": "GetCategoryResponse", - "x": 2490, - "y": 18950, + "x": 2500, + "y": 19060, "width": 320, "height": 276, "isBold": false, @@ -52255,7 +53044,7 @@ "schemaName": "CMS", "tableName": "UpdateCategoryRequest", "x": 2410, - "y": 18640, + "y": 18740, "width": 519, "height": 200, "isBold": false, @@ -52271,7 +53060,7 @@ "schemaName": "CMS", "tableName": "DeleteCategoryRequest", "x": 2330, - "y": 18330, + "y": 18430, "width": 311, "height": 200, "isBold": false, @@ -52286,8 +53075,8 @@ "type": "table", "schemaName": "CMS", "tableName": "PruductCategory", - "x": 22860, - "y": 3150, + "x": 22720, + "y": 3400, "width": 364, "height": 274, "isBold": false, @@ -52303,7 +53092,7 @@ "schemaName": "CMS", "tableName": "PruductCategoryService", "x": 4300, - "y": 18040, + "y": 18160, "width": 400, "height": 175, "isBold": false, @@ -52319,7 +53108,7 @@ "schemaName": "CMS", "tableName": "CreateNewPruductCategoryRequest", "x": 2720, - "y": 17970, + "y": 18080, "width": 400, "height": 137, "isBold": false, @@ -52335,7 +53124,7 @@ "schemaName": "CMS", "tableName": "CreateNewPruductCategoryResponse", "x": 3150, - "y": 18160, + "y": 18270, "width": 400, "height": 106, "isBold": false, @@ -52351,7 +53140,7 @@ "schemaName": "CMS", "tableName": "UpdatePruductCategoryRequest", "x": 4300, - "y": 18270, + "y": 18390, "width": 400, "height": 137, "isBold": false, @@ -52367,7 +53156,7 @@ "schemaName": "CMS", "tableName": "DeletePruductCategoryRequest", "x": 4810, - "y": 18090, + "y": 18200, "width": 400, "height": 106, "isBold": false, @@ -52383,7 +53172,7 @@ "schemaName": "CMS", "tableName": "GetPruductCategoryRequest", "x": 4300, - "y": 17910, + "y": 18000, "width": 400, "height": 106, "isBold": false, @@ -52399,7 +53188,7 @@ "schemaName": "CMS", "tableName": "GetPruductCategoryResponse", "x": 3790, - "y": 17900, + "y": 18020, "width": 400, "height": 137, "isBold": false, @@ -52415,7 +53204,7 @@ "schemaName": "CMS", "tableName": "GetAllPruductCategoryByFilterRequest", "x": 3280, - "y": 17550, + "y": 17650, "width": 400, "height": 137, "isBold": false, @@ -52431,7 +53220,7 @@ "schemaName": "CMS", "tableName": "GetAllPruductCategoryByFilterFilter", "x": 2820, - "y": 17540, + "y": 17640, "width": 400, "height": 137, "isBold": false, @@ -52447,7 +53236,7 @@ "schemaName": "CMS", "tableName": "GetAllPruductCategoryByFilterResponse", "x": 3210, - "y": 17740, + "y": 17840, "width": 400, "height": 118, "isBold": false, @@ -52463,7 +53252,7 @@ "schemaName": "CMS", "tableName": "GetAllPruductCategoryByFilterResponseModel", "x": 2760, - "y": 17720, + "y": 17830, "width": 400, "height": 137, "isBold": false, @@ -52473,15 +53262,47 @@ "b": 160, "a": 1 } + }, + { + "type": "table", + "schemaName": "CMS", + "tableName": "PruductTag", + "x": 22860, + "y": 3150, + "width": 200, + "height": 200, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "CMS", + "tableName": "Tag", + "x": 23120, + "y": 3150, + "width": 200, + "height": 200, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } } ], "layers": [ { "name": "Domain", "x": 20970, - "y": 580, - "width": 3151, - "height": 4604, + "y": 680, + "width": 3102, + "height": 4507, "layerColor": { "r": 100, "g": 234, @@ -52553,7 +53374,7 @@ "visible": true, "vertices": [ { - "x": 23435, + "x": 23385, "y": 4340 }, { @@ -52562,7 +53383,7 @@ } ], "label": { - "x": 23288, + "x": 23238, "y": 4302, "width": 157, "height": 32, @@ -52656,16 +53477,16 @@ "vertices": [ { "x": 23195, - "y": 2650 + "y": 2400 }, { "x": 23215, - "y": 2650 + "y": 2400 } ], "label": { "x": 23017, - "y": 2612, + "y": 2362, "width": 168, "height": 32, "fontName": "Arial Unicode MS", @@ -52690,11 +53511,11 @@ "vertices": [ { "x": 22855, - "y": 2650 + "y": 2530 }, { "x": 21980, - "y": 2650 + "y": 2530 }, { "x": 21980, @@ -52703,7 +53524,7 @@ ], "label": { "x": 22723, - "y": 2612, + "y": 2492, "width": 142, "height": 32, "fontName": "Arial Unicode MS", @@ -52728,20 +53549,20 @@ "vertices": [ { "x": 9050, - "y": 11105 + "y": 11265 }, { "x": 9050, - "y": 10610 + "y": 10780 }, { "x": 9085, - "y": 10610 + "y": 10780 } ], "label": { "x": 9058, - "y": 11115, + "y": 11275, "width": 278, "height": 32, "fontName": "Arial Unicode MS", @@ -52766,16 +53587,16 @@ "vertices": [ { "x": 8940, - "y": 11105 + "y": 11265 }, { "x": 8940, - "y": 10441 + "y": 10601 } ], "label": { "x": 8948, - "y": 11085, + "y": 11245, "width": 288, "height": 32, "fontName": "Arial Unicode MS", @@ -52800,16 +53621,16 @@ "vertices": [ { "x": 8865, - "y": 11260 + "y": 11350 }, { "x": 8785, - "y": 11260 + "y": 11350 } ], "label": { "x": 8881, - "y": 11262, + "y": 11352, "width": 254, "height": 32, "fontName": "Arial Unicode MS", @@ -52833,17 +53654,25 @@ "visible": true, "vertices": [ { - "x": 8960, - "y": 11419 + "x": 8865, + "y": 11500 }, { - "x": 8960, - "y": 11445 + "x": 8830, + "y": 11500 + }, + { + "x": 8830, + "y": 11510 + }, + { + "x": 8785, + "y": 11510 } ], "label": { - "x": 8968, - "y": 11379, + "x": 8881, + "y": 11472, "width": 249, "height": 32, "fontName": "Arial Unicode MS", @@ -52867,17 +53696,17 @@ "visible": true, "vertices": [ { - "x": 9220, - "y": 11419 + "x": 9080, + "y": 11579 }, { - "x": 9220, + "x": 9080, "y": 11605 } ], "label": { - "x": 9228, - "y": 11379, + "x": 9088, + "y": 11539, "width": 228, "height": 32, "fontName": "Arial Unicode MS", @@ -52902,16 +53731,16 @@ "vertices": [ { "x": 9295, - "y": 11380 + "y": 11540 }, { "x": 11485, - "y": 11380 + "y": 11540 } ], "label": { "x": 9291, - "y": 11382, + "y": 11542, "width": 238, "height": 32, "fontName": "Arial Unicode MS", @@ -52936,24 +53765,24 @@ "vertices": [ { "x": 9295, - "y": 11280 + "y": 11450 }, { "x": 11450, - "y": 11280 + "y": 11450 }, { "x": 11450, - "y": 11200 + "y": 11370 }, { "x": 11485, - "y": 11200 + "y": 11370 } ], "label": { "x": 9291, - "y": 11282, + "y": 11452, "width": 295, "height": 32, "fontName": "Arial Unicode MS", @@ -52978,24 +53807,24 @@ "vertices": [ { "x": 9295, - "y": 11250 + "y": 11420 }, { "x": 11390, - "y": 11250 + "y": 11420 }, { "x": 11390, - "y": 11020 + "y": 11180 }, { "x": 11425, - "y": 11020 + "y": 11180 } ], "label": { "x": 9291, - "y": 11252, + "y": 11422, "width": 305, "height": 32, "fontName": "Arial Unicode MS", @@ -53020,16 +53849,16 @@ "vertices": [ { "x": 11915, - "y": 11190 + "y": 11360 }, { "x": 12005, - "y": 11190 + "y": 11360 } ], "label": { "x": 11911, - "y": 11192, + "y": 11362, "width": 357, "height": 32, "fontName": "Arial Unicode MS", @@ -53054,16 +53883,16 @@ "vertices": [ { "x": 11855, - "y": 11010 + "y": 11180 }, { "x": 11875, - "y": 11010 + "y": 11180 } ], "label": { "x": 11851, - "y": 11012, + "y": 11182, "width": 442, "height": 32, "fontName": "Arial Unicode MS", @@ -53088,28 +53917,28 @@ "vertices": [ { "x": 11515, - "y": 10360 + "y": 10520 }, { "x": 10330, - "y": 10360 + "y": 10520 }, { "x": 10330, - "y": 10280 + "y": 10450 }, { "x": 9810, - "y": 10280 + "y": 10450 }, { "x": 9810, - "y": 10485 + "y": 10655 } ], "label": { "x": 11531, - "y": 10362, + "y": 10522, "width": 384, "height": 32, "fontName": "Arial Unicode MS", @@ -53134,16 +53963,16 @@ "vertices": [ { "x": 11515, - "y": 10390 + "y": 10560 }, { "x": 10285, - "y": 10390 + "y": 10560 } ], "label": { "x": 11531, - "y": 10362, + "y": 10532, "width": 394, "height": 32, "fontName": "Arial Unicode MS", @@ -53168,16 +53997,16 @@ "vertices": [ { "x": 11730, - "y": 10425 + "y": 10595 }, { "x": 11730, - "y": 10445 + "y": 10615 } ], "label": { "x": 11738, - "y": 10415, + "y": 10585, "width": 360, "height": 32, "fontName": "Arial Unicode MS", @@ -53202,16 +54031,16 @@ "vertices": [ { "x": 11945, - "y": 10310 + "y": 10470 }, { "x": 12035, - "y": 10310 + "y": 10470 } ], "label": { "x": 11941, - "y": 10282, + "y": 10442, "width": 355, "height": 32, "fontName": "Arial Unicode MS", @@ -53236,16 +54065,16 @@ "vertices": [ { "x": 11730, - "y": 10195 + "y": 10365 }, { "x": 11730, - "y": 10171 + "y": 10341 } ], "label": { "x": 11738, - "y": 10175, + "y": 10345, "width": 334, "height": 32, "fontName": "Arial Unicode MS", @@ -53270,24 +54099,24 @@ "vertices": [ { "x": 11515, - "y": 10230 + "y": 10400 }, { "x": 11480, - "y": 10230 + "y": 10400 }, { "x": 11480, - "y": 10140 + "y": 10310 }, { "x": 11435, - "y": 10140 + "y": 10310 } ], "label": { "x": 11531, - "y": 10232, + "y": 10402, "width": 344, "height": 32, "fontName": "Arial Unicode MS", @@ -53312,24 +54141,24 @@ "vertices": [ { "x": 11515, - "y": 10260 + "y": 10430 }, { "x": 10960, - "y": 10260 + "y": 10430 }, { "x": 10960, - "y": 9820 + "y": 9990 }, { "x": 10865, - "y": 9820 + "y": 9990 } ], "label": { "x": 11531, - "y": 10262, + "y": 10432, "width": 401, "height": 32, "fontName": "Arial Unicode MS", @@ -53354,24 +54183,24 @@ "vertices": [ { "x": 11515, - "y": 10290 + "y": 10460 }, { "x": 10900, - "y": 10290 + "y": 10460 }, { "x": 10900, - "y": 10080 + "y": 10250 }, { "x": 10865, - "y": 10080 + "y": 10250 } ], "label": { "x": 11531, - "y": 10292, + "y": 10462, "width": 411, "height": 32, "fontName": "Arial Unicode MS", @@ -53396,16 +54225,16 @@ "vertices": [ { "x": 10435, - "y": 9810 + "y": 9980 }, { "x": 10405, - "y": 9810 + "y": 9980 } ], "label": { "x": 10451, - "y": 9812, + "y": 9982, "width": 463, "height": 32, "fontName": "Arial Unicode MS", @@ -53430,16 +54259,16 @@ "vertices": [ { "x": 10435, - "y": 10080 + "y": 10250 }, { "x": 10405, - "y": 10080 + "y": 10250 } ], "label": { "x": 10451, - "y": 10082, + "y": 10252, "width": 548, "height": 32, "fontName": "Arial Unicode MS", @@ -53463,25 +54292,25 @@ "visible": true, "vertices": [ { - "x": 9470, - "y": 8690 + "x": 9460, + "y": 8860 }, { - "x": 9470, - "y": 9960 + "x": 9460, + "y": 10120 }, { "x": 9420, - "y": 9960 + "y": 10120 }, { "x": 9420, - "y": 10155 + "y": 10325 } ], "label": { - "x": 9478, - "y": 8680, + "x": 9468, + "y": 8850, "width": 330, "height": 32, "fontName": "Arial Unicode MS", @@ -53506,16 +54335,16 @@ "vertices": [ { "x": 9540, - "y": 8690 + "y": 8860 }, { "x": 9540, - "y": 9995 + "y": 10165 } ], "label": { "x": 9548, - "y": 8650, + "y": 8820, "width": 340, "height": 32, "fontName": "Arial Unicode MS", @@ -53540,16 +54369,16 @@ "vertices": [ { "x": 9605, - "y": 8590 + "y": 8750 }, { "x": 9625, - "y": 8590 + "y": 8750 } ], "label": { "x": 9601, - "y": 8592, + "y": 8752, "width": 306, "height": 32, "fontName": "Arial Unicode MS", @@ -53574,16 +54403,16 @@ "vertices": [ { "x": 9390, - "y": 8485 + "y": 8655 }, { "x": 9390, - "y": 8401 + "y": 8571 } ], "label": { "x": 9398, - "y": 8465, + "y": 8635, "width": 301, "height": 32, "fontName": "Arial Unicode MS", @@ -53608,16 +54437,16 @@ "vertices": [ { "x": 9175, - "y": 8590 + "y": 8750 }, { "x": 9155, - "y": 8590 + "y": 8750 } ], "label": { "x": 9191, - "y": 8562, + "y": 8722, "width": 280, "height": 32, "fontName": "Arial Unicode MS", @@ -53642,24 +54471,24 @@ "vertices": [ { "x": 9240, - "y": 8690 + "y": 8860 }, { "x": 9240, - "y": 8730 + "y": 8900 }, { - "x": 9200, - "y": 8730 + "x": 9190, + "y": 8900 }, { - "x": 9200, - "y": 8775 + "x": 9190, + "y": 8945 } ], "label": { "x": 9248, - "y": 8680, + "y": 8850, "width": 290, "height": 32, "fontName": "Arial Unicode MS", @@ -53683,25 +54512,25 @@ "visible": true, "vertices": [ { - "x": 9320, - "y": 8690 + "x": 9310, + "y": 8860 }, { - "x": 9320, - "y": 9020 + "x": 9310, + "y": 9190 }, { - "x": 9270, - "y": 9020 + "x": 9260, + "y": 9190 }, { - "x": 9270, - "y": 9065 + "x": 9260, + "y": 9225 } ], "label": { - "x": 9328, - "y": 8680, + "x": 9318, + "y": 8850, "width": 347, "height": 32, "fontName": "Arial Unicode MS", @@ -53725,25 +54554,25 @@ "visible": true, "vertices": [ { - "x": 9400, - "y": 8690 + "x": 9380, + "y": 8860 }, { - "x": 9400, - "y": 9500 + "x": 9380, + "y": 9660 }, { - "x": 9350, - "y": 9500 + "x": 9330, + "y": 9660 }, { - "x": 9350, - "y": 9535 + "x": 9330, + "y": 9705 } ], "label": { - "x": 9408, - "y": 8680, + "x": 9388, + "y": 8850, "width": 357, "height": 32, "fontName": "Arial Unicode MS", @@ -53767,17 +54596,17 @@ "visible": true, "vertices": [ { - "x": 9140, - "y": 9232 + "x": 9130, + "y": 9392 }, { - "x": 9140, - "y": 9255 + "x": 9130, + "y": 9415 } ], "label": { - "x": 9148, - "y": 9222, + "x": 9138, + "y": 9382, "width": 409, "height": 32, "fontName": "Arial Unicode MS", @@ -53801,17 +54630,17 @@ "visible": true, "vertices": [ { - "x": 9210, - "y": 9683 + "x": 9200, + "y": 9853 }, { - "x": 9210, - "y": 9715 + "x": 9200, + "y": 9875 } ], "label": { - "x": 9218, - "y": 9673, + "x": 9208, + "y": 9843, "width": 494, "height": 32, "fontName": "Arial Unicode MS", @@ -53835,21 +54664,21 @@ "visible": true, "vertices": [ { - "x": 6650, - "y": 11995 + "x": 6960, + "y": 11375 }, { - "x": 6650, - "y": 11570 + "x": 6960, + "y": 10950 }, { - "x": 8235, - "y": 11570 + "x": 8095, + "y": 10950 } ], "label": { - "x": 6658, - "y": 12005, + "x": 6968, + "y": 11385, "width": 354, "height": 32, "fontName": "Arial Unicode MS", @@ -53873,21 +54702,21 @@ "visible": true, "vertices": [ { - "x": 6550, - "y": 11995 + "x": 6860, + "y": 11375 }, { - "x": 6550, - "y": 11460 + "x": 6860, + "y": 10840 }, { - "x": 6585, - "y": 11460 + "x": 6905, + "y": 10840 } ], "label": { - "x": 6558, - "y": 11975, + "x": 6868, + "y": 11355, "width": 364, "height": 32, "fontName": "Arial Unicode MS", @@ -53911,17 +54740,17 @@ "visible": true, "vertices": [ { - "x": 6440, - "y": 11995 + "x": 6760, + "y": 11375 }, { - "x": 6440, - "y": 11365 + "x": 6760, + "y": 10755 } ], "label": { - "x": 6448, - "y": 12005, + "x": 6768, + "y": 11385, "width": 330, "height": 32, "fontName": "Arial Unicode MS", @@ -53945,17 +54774,17 @@ "visible": true, "vertices": [ { - "x": 6365, - "y": 12100 + "x": 6685, + "y": 11480 }, { - "x": 6275, - "y": 12100 + "x": 6595, + "y": 11480 } ], "label": { - "x": 6381, - "y": 12072, + "x": 6701, + "y": 11452, "width": 325, "height": 32, "fontName": "Arial Unicode MS", @@ -53979,17 +54808,17 @@ "visible": true, "vertices": [ { - "x": 6580, - "y": 12200 + "x": 6900, + "y": 11580 }, { - "x": 6580, - "y": 12225 + "x": 6900, + "y": 11605 } ], "label": { - "x": 6588, - "y": 12160, + "x": 6908, + "y": 11540, "width": 304, "height": 32, "fontName": "Arial Unicode MS", @@ -54013,17 +54842,17 @@ "visible": true, "vertices": [ { - "x": 6795, - "y": 12160 + "x": 7115, + "y": 11540 }, { - "x": 6935, - "y": 12160 + "x": 7255, + "y": 11540 } ], "label": { - "x": 6791, - "y": 12162, + "x": 7111, + "y": 11542, "width": 314, "height": 32, "fontName": "Arial Unicode MS", @@ -54047,25 +54876,25 @@ "visible": true, "vertices": [ { - "x": 6795, - "y": 12060 + "x": 7115, + "y": 11440 }, { - "x": 6900, - "y": 12060 + "x": 7210, + "y": 11440 }, { - "x": 6900, - "y": 11980 + "x": 7210, + "y": 11370 }, { - "x": 6935, - "y": 11980 + "x": 7255, + "y": 11370 } ], "label": { - "x": 6791, - "y": 12062, + "x": 7111, + "y": 11442, "width": 371, "height": 32, "fontName": "Arial Unicode MS", @@ -54089,25 +54918,25 @@ "visible": true, "vertices": [ { - "x": 6795, - "y": 12030 + "x": 7115, + "y": 11410 }, { - "x": 6830, - "y": 12030 + "x": 7150, + "y": 11410 }, { - "x": 6830, - "y": 11800 + "x": 7150, + "y": 11190 }, { - "x": 6875, - "y": 11800 + "x": 7195, + "y": 11190 } ], "label": { - "x": 6791, - "y": 12032, + "x": 7111, + "y": 11412, "width": 381, "height": 32, "fontName": "Arial Unicode MS", @@ -54131,17 +54960,17 @@ "visible": true, "vertices": [ { - "x": 7365, - "y": 11980 + "x": 7685, + "y": 11370 }, { - "x": 7445, - "y": 11980 + "x": 7765, + "y": 11370 } ], "label": { - "x": 7361, - "y": 11982, + "x": 7681, + "y": 11372, "width": 433, "height": 32, "fontName": "Arial Unicode MS", @@ -54165,17 +54994,17 @@ "visible": true, "vertices": [ { - "x": 7305, - "y": 11800 + "x": 7625, + "y": 11180 }, { - "x": 7325, - "y": 11800 + "x": 7645, + "y": 11180 } ], "label": { - "x": 7301, - "y": 11802, + "x": 7621, + "y": 11182, "width": 518, "height": 32, "fontName": "Arial Unicode MS", @@ -54199,25 +55028,25 @@ "visible": true, "vertices": [ { - "x": 8210, - "y": 13135 + "x": 8070, + "y": 13225 }, { - "x": 8210, - "y": 11980 + "x": 8070, + "y": 12070 }, { - "x": 8310, - "y": 11980 + "x": 8170, + "y": 12070 }, { - "x": 8310, - "y": 11882 + "x": 8170, + "y": 11972 } ], "label": { - "x": 8218, - "y": 13145, + "x": 8078, + "y": 13235, "width": 280, "height": 32, "fontName": "Arial Unicode MS", @@ -54241,17 +55070,17 @@ "visible": true, "vertices": [ { - "x": 8130, - "y": 13135 + "x": 7990, + "y": 13225 }, { - "x": 8130, - "y": 11881 + "x": 7990, + "y": 12031 } ], "label": { - "x": 8138, - "y": 13115, + "x": 7998, + "y": 13205, "width": 290, "height": 32, "fontName": "Arial Unicode MS", @@ -54275,17 +55104,17 @@ "visible": true, "vertices": [ { - "x": 8065, - "y": 13230 + "x": 7935, + "y": 13320 }, { - "x": 8045, - "y": 13230 + "x": 7915, + "y": 13320 } ], "label": { - "x": 8081, - "y": 13232, + "x": 7951, + "y": 13322, "width": 256, "height": 32, "fontName": "Arial Unicode MS", @@ -54309,17 +55138,17 @@ "visible": true, "vertices": [ { - "x": 8280, - "y": 13340 + "x": 8150, + "y": 13430 }, { - "x": 8280, - "y": 13355 + "x": 8150, + "y": 13445 } ], "label": { - "x": 8288, - "y": 13300, + "x": 8158, + "y": 13390, "width": 251, "height": 32, "fontName": "Arial Unicode MS", @@ -54343,17 +55172,17 @@ "visible": true, "vertices": [ { - "x": 8495, - "y": 13230 + "x": 8365, + "y": 13320 }, { - "x": 8525, - "y": 13230 + "x": 8385, + "y": 13320 } ], "label": { - "x": 8491, - "y": 13202, + "x": 8361, + "y": 13292, "width": 230, "height": 32, "fontName": "Arial Unicode MS", @@ -54377,25 +55206,25 @@ "visible": true, "vertices": [ { - "x": 8440, - "y": 13135 + "x": 8300, + "y": 13225 }, { - "x": 8440, - "y": 13090 + "x": 8300, + "y": 13180 }, { - "x": 8480, - "y": 13090 + "x": 8350, + "y": 13180 }, { - "x": 8480, - "y": 13052 + "x": 8350, + "y": 13142 } ], "label": { - "x": 8448, - "y": 13145, + "x": 8308, + "y": 13235, "width": 240, "height": 32, "fontName": "Arial Unicode MS", @@ -54419,25 +55248,25 @@ "visible": true, "vertices": [ { - "x": 8370, - "y": 13135 + "x": 8230, + "y": 13225 }, { - "x": 8370, - "y": 12840 + "x": 8230, + "y": 12930 }, { - "x": 8400, - "y": 12840 + "x": 8280, + "y": 12930 }, { - "x": 8400, - "y": 12802 + "x": 8280, + "y": 12892 } ], "label": { - "x": 8378, - "y": 13145, + "x": 8238, + "y": 13235, "width": 297, "height": 32, "fontName": "Arial Unicode MS", @@ -54461,25 +55290,25 @@ "visible": true, "vertices": [ { - "x": 8280, - "y": 13135 + "x": 8150, + "y": 13225 }, { - "x": 8280, - "y": 12400 + "x": 8150, + "y": 12490 }, { - "x": 8320, - "y": 12400 + "x": 8190, + "y": 12490 }, { - "x": 8320, - "y": 12363 + "x": 8190, + "y": 12453 } ], "label": { - "x": 8288, - "y": 13145, + "x": 8158, + "y": 13235, "width": 307, "height": 32, "fontName": "Arial Unicode MS", @@ -54503,17 +55332,17 @@ "visible": true, "vertices": [ { - "x": 8540, - "y": 12635 + "x": 8410, + "y": 12725 }, { - "x": 8540, - "y": 12612 + "x": 8410, + "y": 12702 } ], "label": { - "x": 8548, - "y": 12645, + "x": 8418, + "y": 12735, "width": 359, "height": 32, "fontName": "Arial Unicode MS", @@ -54537,17 +55366,17 @@ "visible": true, "vertices": [ { - "x": 8460, - "y": 12215 + "x": 8320, + "y": 12305 }, { - "x": 8460, - "y": 12192 + "x": 8320, + "y": 12282 } ], "label": { - "x": 8468, - "y": 12225, + "x": 8328, + "y": 12315, "width": 444, "height": 32, "fontName": "Arial Unicode MS", @@ -54572,28 +55401,28 @@ "vertices": [ { "x": 14085, - "y": 11750 + "y": 11840 }, { "x": 13410, - "y": 11750 + "y": 11840 }, { "x": 13410, - "y": 11680 + "y": 11760 }, { - "x": 12640, - "y": 11680 + "x": 12600, + "y": 11760 }, { - "x": 12640, - "y": 11715 + "x": 12600, + "y": 11805 } ], "label": { "x": 14101, - "y": 11752, + "y": 11842, "width": 338, "height": 32, "fontName": "Arial Unicode MS", @@ -54618,16 +55447,16 @@ "vertices": [ { "x": 14085, - "y": 11780 + "y": 11870 }, { "x": 13365, - "y": 11780 + "y": 11870 } ], "label": { "x": 14101, - "y": 11752, + "y": 11842, "width": 348, "height": 32, "fontName": "Arial Unicode MS", @@ -54652,16 +55481,16 @@ "vertices": [ { "x": 14300, - "y": 11820 + "y": 11910 }, { "x": 14300, - "y": 11835 + "y": 11925 } ], "label": { "x": 14308, - "y": 11810, + "y": 11900, "width": 314, "height": 32, "fontName": "Arial Unicode MS", @@ -54686,16 +55515,16 @@ "vertices": [ { "x": 14515, - "y": 11720 + "y": 11810 }, { "x": 14595, - "y": 11720 + "y": 11810 } ], "label": { "x": 14511, - "y": 11692, + "y": 11782, "width": 309, "height": 32, "fontName": "Arial Unicode MS", @@ -54720,16 +55549,16 @@ "vertices": [ { "x": 14300, - "y": 11615 + "y": 11705 }, { "x": 14300, - "y": 11591 + "y": 11681 } ], "label": { "x": 14308, - "y": 11595, + "y": 11685, "width": 288, "height": 32, "fontName": "Arial Unicode MS", @@ -54754,24 +55583,24 @@ "vertices": [ { "x": 14085, - "y": 11650 + "y": 11740 + }, + { + "x": 14040, + "y": 11740 }, { "x": 14040, "y": 11650 }, - { - "x": 14040, - "y": 11560 - }, { "x": 13995, - "y": 11560 + "y": 11650 } ], "label": { "x": 14101, - "y": 11652, + "y": 11742, "width": 298, "height": 32, "fontName": "Arial Unicode MS", @@ -54796,24 +55625,24 @@ "vertices": [ { "x": 14085, - "y": 11680 + "y": 11770 }, { "x": 13530, - "y": 11680 + "y": 11770 }, { "x": 13530, - "y": 11370 + "y": 11460 }, { "x": 13425, - "y": 11370 + "y": 11460 } ], "label": { "x": 14101, - "y": 11682, + "y": 11772, "width": 355, "height": 32, "fontName": "Arial Unicode MS", @@ -54838,24 +55667,24 @@ "vertices": [ { "x": 14085, - "y": 11710 + "y": 11800 }, { "x": 13470, - "y": 11710 + "y": 11800 }, { "x": 13470, - "y": 11560 + "y": 11650 }, { "x": 13425, - "y": 11560 + "y": 11650 } ], "label": { "x": 14101, - "y": 11712, + "y": 11802, "width": 365, "height": 32, "fontName": "Arial Unicode MS", @@ -54880,16 +55709,16 @@ "vertices": [ { "x": 12995, - "y": 11370 + "y": 11460 }, { "x": 12975, - "y": 11370 + "y": 11460 } ], "label": { "x": 13011, - "y": 11372, + "y": 11462, "width": 417, "height": 32, "fontName": "Arial Unicode MS", @@ -54914,16 +55743,16 @@ "vertices": [ { "x": 12995, - "y": 11550 + "y": 11640 }, { "x": 12975, - "y": 11550 + "y": 11640 } ], "label": { "x": 13011, - "y": 11552, + "y": 11642, "width": 502, "height": 32, "fontName": "Arial Unicode MS", @@ -54947,17 +55776,17 @@ "visible": true, "vertices": [ { - "x": 6260, - "y": 7825 + "x": 12250, + "y": 7985 }, { - "x": 6260, - "y": 8145 + "x": 12250, + "y": 8295 } ], "label": { - "x": 6268, - "y": 7815, + "x": 12258, + "y": 7975, "width": 352, "height": 32, "fontName": "Arial Unicode MS", @@ -54981,17 +55810,17 @@ "visible": true, "vertices": [ { - "x": 6455, - "y": 7740 + "x": 12445, + "y": 7890 }, { - "x": 6485, - "y": 7740 + "x": 12465, + "y": 7890 } ], "label": { - "x": 6451, - "y": 7742, + "x": 12441, + "y": 7892, "width": 369, "height": 32, "fontName": "Arial Unicode MS", @@ -55015,17 +55844,17 @@ "visible": true, "vertices": [ { - "x": 6240, - "y": 7645 + "x": 12230, + "y": 7805 }, { - "x": 6240, - "y": 7623 + "x": 12230, + "y": 7783 } ], "label": { - "x": 6248, - "y": 7655, + "x": 12238, + "y": 7815, "width": 379, "height": 32, "fontName": "Arial Unicode MS", @@ -55049,17 +55878,17 @@ "visible": true, "vertices": [ { - "x": 6915, - "y": 7740 + "x": 12895, + "y": 7890 }, { - "x": 6935, - "y": 7740 + "x": 12915, + "y": 7890 } ], "label": { - "x": 6911, - "y": 7742, + "x": 12891, + "y": 7892, "width": 431, "height": 32, "fontName": "Arial Unicode MS", @@ -55083,17 +55912,17 @@ "visible": true, "vertices": [ { - "x": 6240, - "y": 7475 + "x": 12230, + "y": 7635 }, { - "x": 6240, - "y": 7458 + "x": 12230, + "y": 7608 } ], "label": { - "x": 6248, - "y": 7485, + "x": 12238, + "y": 7645, "width": 516, "height": 32, "fontName": "Arial Unicode MS", @@ -55117,17 +55946,17 @@ "visible": true, "vertices": [ { - "x": 6380, - "y": 7825 + "x": 12360, + "y": 7985 }, { - "x": 6380, - "y": 7915 + "x": 12360, + "y": 8065 } ], "label": { - "x": 6382, - "y": 7775, + "x": 12362, + "y": 7935, "width": 362, "height": 32, "fontName": "Arial Unicode MS", @@ -55151,17 +55980,17 @@ "visible": true, "vertices": [ { - "x": 6025, - "y": 7740 + "x": 12015, + "y": 7890 }, { - "x": 6005, - "y": 7740 + "x": 11995, + "y": 7890 } ], "label": { - "x": 6035, - "y": 7702, + "x": 12025, + "y": 7852, "width": 317, "height": 32, "fontName": "Arial Unicode MS", @@ -55185,17 +56014,17 @@ "visible": true, "vertices": [ { - "x": 6110, - "y": 7825 + "x": 12090, + "y": 7985 }, { - "x": 6110, - "y": 7855 + "x": 12090, + "y": 8015 } ], "label": { - "x": 6112, - "y": 7775, + "x": 12092, + "y": 7935, "width": 327, "height": 32, "fontName": "Arial Unicode MS", @@ -55220,24 +56049,24 @@ "vertices": [ { "x": 9295, - "y": 11220 + "y": 11390 }, { "x": 10870, - "y": 11220 + "y": 11390 }, { "x": 10870, - "y": 11140 + "y": 11310 }, { "x": 10915, - "y": 11140 + "y": 11310 } ], "label": { "x": 9285, - "y": 11182, + "y": 11352, "width": 261, "height": 32, "fontName": "Arial Unicode MS", @@ -55262,24 +56091,24 @@ "vertices": [ { "x": 9295, - "y": 11190 + "y": 11360 }, { "x": 10360, - "y": 11190 + "y": 11360 }, { "x": 10360, - "y": 11120 + "y": 11280 }, { "x": 10405, - "y": 11120 + "y": 11280 } ], "label": { "x": 9285, - "y": 11152, + "y": 11322, "width": 271, "height": 32, "fontName": "Arial Unicode MS", @@ -55304,24 +56133,24 @@ "vertices": [ { "x": 23110, - "y": 2730 + "y": 2610 }, { "x": 23110, - "y": 3100 + "y": 3090 }, { - "x": 23700, - "y": 3100 + "x": 23560, + "y": 3090 }, { - "x": 23700, + "x": 23560, "y": 4215 } ], "label": { "x": 23112, - "y": 2680, + "y": 2560, "width": 195, "height": 32, "fontName": "Arial Unicode MS", @@ -55346,24 +56175,24 @@ "vertices": [ { "x": 11515, - "y": 10320 + "y": 10490 }, { "x": 10840, - "y": 10320 + "y": 10490 }, { "x": 10840, - "y": 10250 + "y": 10420 }, { "x": 10795, - "y": 10250 + "y": 10420 } ], "label": { "x": 11525, - "y": 10282, + "y": 10452, "width": 369, "height": 32, "fontName": "Arial Unicode MS", @@ -55456,16 +56285,16 @@ "vertices": [ { "x": 22930, - "y": 2755 + "y": 2635 }, { "x": 22930, - "y": 2730 + "y": 2610 } ], "label": { "x": 22932, - "y": 2723, + "y": 2603, "width": 204, "height": 32, "fontName": "Sans", @@ -55489,21 +56318,21 @@ "visible": true, "vertices": [ { - "x": 23575, - "y": 2380 + "x": 23075, + "y": 1970 }, { - "x": 23110, - "y": 2380 + "x": 23030, + "y": 1970 }, { - "x": 23110, - "y": 2415 + "x": 23030, + "y": 2295 } ], "label": { - "x": 23591, - "y": 2350, + "x": 23091, + "y": 1940, "width": 202, "height": 32, "fontName": "Sans", @@ -55528,11 +56357,11 @@ "vertices": [ { "x": 22125, - "y": 3290 + "y": 3170 }, { "x": 22080, - "y": 3290 + "y": 3170 }, { "x": 22080, @@ -55541,7 +56370,7 @@ ], "label": { "x": 22135, - "y": 3250, + "y": 3130, "width": 143, "height": 32, "fontName": "Sans", @@ -55566,16 +56395,16 @@ "vertices": [ { "x": 22465, - "y": 3290 + "y": 3170 }, { "x": 22485, - "y": 3290 + "y": 3170 } ], "label": { "x": 22461, - "y": 3292, + "y": 3172, "width": 171, "height": 32, "fontName": "Sans", @@ -55600,16 +56429,16 @@ "vertices": [ { "x": 22750, - "y": 3075 + "y": 2955 }, { "x": 22750, - "y": 3095 + "y": 2975 } ], "label": { "x": 22560, - "y": 3023, + "y": 2903, "width": 192, "height": 32, "fontName": "Sans", @@ -55633,16 +56462,16 @@ "visible": true, "vertices": [ { - "x": 22660, + "x": 22560, "y": 3505 }, { - "x": 22660, - "y": 3483 + "x": 22560, + "y": 3363 } ], "label": { - "x": 22662, + "x": 22562, "y": 3473, "width": 211, "height": 32, @@ -55667,17 +56496,17 @@ "visible": true, "vertices": [ { - "x": 23010, - "y": 2415 + "x": 22930, + "y": 2295 }, { - "x": 23010, - "y": 935 + "x": 22930, + "y": 1035 } ], "label": { - "x": 22795, - "y": 2383, + "x": 22715, + "y": 2263, "width": 217, "height": 32, "fontName": "Sans", @@ -55701,25 +56530,25 @@ "visible": true, "vertices": [ { - "x": 23650, - "y": 2075 + "x": 23150, + "y": 1665 }, { - "x": 23650, - "y": 980 + "x": 23150, + "y": 1630 }, { - "x": 23190, - "y": 980 + "x": 23110, + "y": 1630 }, { - "x": 23190, - "y": 935 + "x": 23110, + "y": 1035 } ], "label": { - "x": 23658, - "y": 2085, + "x": 23158, + "y": 1675, "width": 231, "height": 32, "fontName": "Sans", @@ -55743,17 +56572,21 @@ "visible": true, "vertices": [ { - "x": 23820, - "y": 2679 + "x": 23415, + "y": 2200 }, { - "x": 23820, + "x": 23770, + "y": 2200 + }, + { + "x": 23770, "y": 4945 } ], "label": { - "x": 23828, - "y": 2669, + "x": 23411, + "y": 2202, "width": 241, "height": 32, "fontName": "Sans", @@ -55777,16 +56610,16 @@ "visible": true, "vertices": [ { - "x": 22660, + "x": 22510, "y": 3893 }, { - "x": 22660, + "x": 22510, "y": 3915 } ], "label": { - "x": 22662, + "x": 22512, "y": 3841, "width": 254, "height": 32, @@ -55816,11 +56649,11 @@ }, { "x": 18660, - "y": 890 + "y": 980 }, { - "x": 22935, - "y": 890 + "x": 22855, + "y": 980 } ], "label": { @@ -55853,15 +56686,15 @@ "y": 4920 }, { - "x": 21780, + "x": 21090, "y": 4920 }, { - "x": 21780, + "x": 21090, "y": 5000 }, { - "x": 23735, + "x": 23695, "y": 5000 } ], @@ -55891,24 +56724,24 @@ "visible": true, "vertices": [ { - "x": 24125, + "x": 24075, "y": 5490 }, { - "x": 24180, + "x": 24130, "y": 5490 }, { - "x": 24180, - "y": 830 + "x": 24130, + "y": 930 }, { - "x": 23275, - "y": 830 + "x": 23195, + "y": 930 } ], "label": { - "x": 24115, + "x": 24065, "y": 5450, "width": 335, "height": 32, @@ -55933,16 +56766,16 @@ "visible": true, "vertices": [ { - "x": 23910, + "x": 23860, "y": 5235 }, { - "x": 23910, + "x": 23860, "y": 5145 } ], "label": { - "x": 23912, + "x": 23862, "y": 5203, "width": 345, "height": 32, @@ -55968,24 +56801,24 @@ "vertices": [ { "x": 18365, - "y": 820 + "y": 920 }, { - "x": 22830, - "y": 820 + "x": 21090, + "y": 920 }, { - "x": 22830, - "y": 830 + "x": 21090, + "y": 930 }, { - "x": 22935, - "y": 830 + "x": 22855, + "y": 930 } ], "label": { "x": 18355, - "y": 780, + "y": 880, "width": 319, "height": 32, "fontName": "Sans", @@ -56010,20 +56843,20 @@ "vertices": [ { "x": 18150, - "y": 1273 + "y": 1373 }, { "x": 18150, "y": 5100 }, { - "x": 23735, + "x": 23695, "y": 5100 } ], "label": { "x": 18152, - "y": 1221, + "y": 1321, "width": 329, "height": 32, "fontName": "Sans", @@ -56048,24 +56881,24 @@ "vertices": [ { "x": 18625, - "y": 650 + "y": 740 }, { - "x": 22890, - "y": 650 + "x": 22810, + "y": 740 }, { - "x": 22890, - "y": 780 + "x": 22810, + "y": 880 }, { - "x": 22935, - "y": 780 + "x": 22855, + "y": 880 } ], "label": { "x": 18615, - "y": 610, + "y": 700, "width": 355, "height": 32, "fontName": "Sans", @@ -56090,7 +56923,7 @@ "vertices": [ { "x": 18410, - "y": 728 + "y": 818 }, { "x": 18410, @@ -56105,13 +56938,13 @@ "y": 5050 }, { - "x": 23735, + "x": 23695, "y": 5050 } ], "label": { "x": 18412, - "y": 676, + "y": 766, "width": 365, "height": 32, "fontName": "Sans", @@ -56135,16 +56968,16 @@ "visible": true, "vertices": [ { - "x": 23100, + "x": 23020, "y": 543 }, { - "x": 23100, - "y": 735 + "x": 23020, + "y": 835 } ], "label": { - "x": 23102, + "x": 23022, "y": 491, "width": 428, "height": 32, @@ -56169,28 +57002,28 @@ "visible": true, "vertices": [ { - "x": 23315, + "x": 23235, "y": 460 }, { - "x": 24240, + "x": 24190, "y": 460 }, { - "x": 24240, - "y": 4910 + "x": 24190, + "y": 990 }, { - "x": 23920, - "y": 4910 + "x": 23870, + "y": 990 }, { - "x": 23920, + "x": 23870, "y": 4945 } ], "label": { - "x": 23305, + "x": 23225, "y": 420, "width": 438, "height": 32, @@ -56216,20 +57049,20 @@ "vertices": [ { "x": 4460, - "y": 8685 + "y": 13735 }, { "x": 4460, - "y": 8360 + "y": 13410 }, { - "x": 5595, - "y": 8360 + "x": 6045, + "y": 13410 } ], "label": { "x": 4468, - "y": 8695, + "y": 13745, "width": 369, "height": 32, "fontName": "Sans", @@ -56254,20 +57087,20 @@ "vertices": [ { "x": 4360, - "y": 8685 + "y": 13735 }, { "x": 4360, - "y": 8250 + "y": 13300 }, { "x": 4405, - "y": 8250 + "y": 13300 } ], "label": { "x": 4368, - "y": 8663, + "y": 13713, "width": 379, "height": 32, "fontName": "Sans", @@ -56292,16 +57125,16 @@ "vertices": [ { "x": 4260, - "y": 8685 + "y": 13735 }, { "x": 4260, - "y": 8162 + "y": 13212 } ], "label": { "x": 4268, - "y": 8695, + "y": 13745, "width": 344, "height": 32, "fontName": "Sans", @@ -56326,16 +57159,16 @@ "vertices": [ { "x": 4175, - "y": 8780 + "y": 13840 }, { "x": 4095, - "y": 8780 + "y": 13840 } ], "label": { "x": 4191, - "y": 8750, + "y": 13810, "width": 338, "height": 32, "fontName": "Sans", @@ -56360,16 +57193,16 @@ "vertices": [ { "x": 4390, - "y": 8890 + "y": 13940 }, { "x": 4390, - "y": 8915 + "y": 13965 } ], "label": { "x": 4398, - "y": 8848, + "y": 13898, "width": 318, "height": 32, "fontName": "Sans", @@ -56394,16 +57227,16 @@ "vertices": [ { "x": 4605, - "y": 8850 + "y": 13900 }, { "x": 4755, - "y": 8850 + "y": 13900 } ], "label": { "x": 4601, - "y": 8852, + "y": 13902, "width": 328, "height": 32, "fontName": "Sans", @@ -56428,24 +57261,24 @@ "vertices": [ { "x": 4605, - "y": 8750 + "y": 13800 }, { "x": 4710, - "y": 8750 + "y": 13800 }, { "x": 4710, - "y": 8670 + "y": 13720 }, { "x": 4755, - "y": 8670 + "y": 13720 } ], "label": { "x": 4601, - "y": 8752, + "y": 13802, "width": 385, "height": 32, "fontName": "Sans", @@ -56470,24 +57303,24 @@ "vertices": [ { "x": 4605, - "y": 8720 + "y": 13770 }, { "x": 4650, - "y": 8720 + "y": 13770 }, { "x": 4650, - "y": 8490 + "y": 13540 }, { "x": 4685, - "y": 8490 + "y": 13540 } ], "label": { "x": 4601, - "y": 8722, + "y": 13772, "width": 395, "height": 32, "fontName": "Sans", @@ -56512,16 +57345,16 @@ "vertices": [ { "x": 5185, - "y": 8670 + "y": 13720 }, { "x": 5265, - "y": 8670 + "y": 13720 } ], "label": { "x": 5181, - "y": 8672, + "y": 13722, "width": 447, "height": 32, "fontName": "Sans", @@ -56546,16 +57379,16 @@ "vertices": [ { "x": 5115, - "y": 8490 + "y": 13540 }, { "x": 5145, - "y": 8490 + "y": 13540 } ], "label": { "x": 5111, - "y": 8492, + "y": 13542, "width": 530, "height": 32, "fontName": "Sans", @@ -56579,25 +57412,25 @@ "visible": true, "vertices": [ { - "x": 5570, - "y": 15065 + "x": 6020, + "y": 15155 }, { - "x": 5570, - "y": 13750 + "x": 6020, + "y": 13840 }, { - "x": 5670, - "y": 13750 + "x": 6130, + "y": 13840 }, { - "x": 5670, - "y": 13649 + "x": 6130, + "y": 13739 } ], "label": { - "x": 5578, - "y": 15075, + "x": 6028, + "y": 15165, "width": 521, "height": 32, "fontName": "Sans", @@ -56621,17 +57454,17 @@ "visible": true, "vertices": [ { - "x": 5490, - "y": 15065 + "x": 5950, + "y": 15155 }, { - "x": 5490, - "y": 13701 + "x": 5950, + "y": 13621 } ], "label": { - "x": 5498, - "y": 15043, + "x": 5958, + "y": 15133, "width": 531, "height": 32, "fontName": "Sans", @@ -56655,17 +57488,17 @@ "visible": true, "vertices": [ { - "x": 5435, - "y": 15170 + "x": 5885, + "y": 15260 }, { - "x": 5405, - "y": 15170 + "x": 5865, + "y": 15260 } ], "label": { - "x": 5451, - "y": 15172, + "x": 5901, + "y": 15262, "width": 496, "height": 32, "fontName": "Sans", @@ -56689,17 +57522,17 @@ "visible": true, "vertices": [ { - "x": 5650, - "y": 15270 + "x": 6100, + "y": 15360 }, { - "x": 5650, - "y": 15295 + "x": 6100, + "y": 15385 } ], "label": { - "x": 5658, - "y": 15228, + "x": 6108, + "y": 15318, "width": 490, "height": 32, "fontName": "Sans", @@ -56723,17 +57556,17 @@ "visible": true, "vertices": [ { - "x": 5865, - "y": 15170 + "x": 6315, + "y": 15260 }, { - "x": 5885, - "y": 15170 + "x": 6335, + "y": 15260 } ], "label": { - "x": 5861, - "y": 15140, + "x": 6311, + "y": 15230, "width": 470, "height": 32, "fontName": "Sans", @@ -56757,25 +57590,25 @@ "visible": true, "vertices": [ { - "x": 5800, - "y": 15065 + "x": 6250, + "y": 15155 }, { - "x": 5800, - "y": 15020 + "x": 6250, + "y": 15110 }, { - "x": 5840, - "y": 15020 + "x": 6300, + "y": 15110 }, { - "x": 5840, - "y": 14979 + "x": 6300, + "y": 15069 } ], "label": { - "x": 5808, - "y": 15075, + "x": 6258, + "y": 15165, "width": 480, "height": 32, "fontName": "Sans", @@ -56799,25 +57632,25 @@ "visible": true, "vertices": [ { - "x": 5730, - "y": 15065 + "x": 6180, + "y": 15155 }, { - "x": 5730, - "y": 14720 + "x": 6180, + "y": 14810 }, { - "x": 5760, - "y": 14720 + "x": 6220, + "y": 14810 }, { - "x": 5760, - "y": 14672 + "x": 6220, + "y": 14762 } ], "label": { - "x": 5738, - "y": 15075, + "x": 6188, + "y": 15165, "width": 537, "height": 32, "fontName": "Sans", @@ -56841,25 +57674,25 @@ "visible": true, "vertices": [ { - "x": 5640, - "y": 15065 + "x": 6110, + "y": 15155 }, { - "x": 5640, - "y": 14220 + "x": 6110, + "y": 14310 }, { - "x": 5690, - "y": 14220 + "x": 6140, + "y": 14310 }, { - "x": 5690, - "y": 14183 + "x": 6140, + "y": 14273 } ], "label": { - "x": 5648, - "y": 15075, + "x": 6118, + "y": 15165, "width": 547, "height": 32, "fontName": "Sans", @@ -56883,17 +57716,17 @@ "visible": true, "vertices": [ { - "x": 5900, - "y": 14505 + "x": 6360, + "y": 14595 }, { - "x": 5900, - "y": 14489 + "x": 6360, + "y": 14579 } ], "label": { - "x": 5908, - "y": 14515, + "x": 6368, + "y": 14605, "width": 599, "height": 32, "fontName": "Sans", @@ -56917,17 +57750,17 @@ "visible": true, "vertices": [ { - "x": 5820, - "y": 14035 + "x": 6280, + "y": 14125 }, { - "x": 5820, - "y": 14009 + "x": 6280, + "y": 14099 } ], "label": { - "x": 5828, - "y": 14045, + "x": 6288, + "y": 14135, "width": 682, "height": 32, "fontName": "Sans", @@ -56952,28 +57785,28 @@ "vertices": [ { "x": 16645, - "y": 13480 + "y": 13570 }, { "x": 15970, - "y": 13480 + "y": 13570 }, { "x": 15970, - "y": 13400 + "y": 13490 }, { "x": 15170, - "y": 13400 + "y": 13490 }, { "x": 15170, - "y": 13445 + "y": 13535 } ], "label": { "x": 16661, - "y": 13482, + "y": 13572, "width": 355, "height": 32, "fontName": "Sans", @@ -56998,16 +57831,16 @@ "vertices": [ { "x": 16645, - "y": 13510 + "y": 13600 }, { "x": 15925, - "y": 13510 + "y": 13600 } ], "label": { "x": 16661, - "y": 13480, + "y": 13570, "width": 365, "height": 32, "fontName": "Sans", @@ -57032,16 +57865,16 @@ "vertices": [ { "x": 16860, - "y": 13540 + "y": 13630 }, { "x": 16860, - "y": 13565 + "y": 13655 } ], "label": { "x": 16868, - "y": 13530, + "y": 13620, "width": 330, "height": 32, "fontName": "Sans", @@ -57066,16 +57899,16 @@ "vertices": [ { "x": 17075, - "y": 13440 + "y": 13530 }, { "x": 17165, - "y": 13440 + "y": 13530 } ], "label": { "x": 17071, - "y": 13410, + "y": 13500, "width": 324, "height": 32, "fontName": "Sans", @@ -57100,16 +57933,16 @@ "vertices": [ { "x": 16860, - "y": 13335 + "y": 13425 }, { "x": 16860, - "y": 13311 + "y": 13401 } ], "label": { "x": 16868, - "y": 13313, + "y": 13403, "width": 304, "height": 32, "fontName": "Sans", @@ -57134,24 +57967,24 @@ "vertices": [ { "x": 16645, - "y": 13370 + "y": 13460 + }, + { + "x": 16610, + "y": 13460 }, { "x": 16610, "y": 13370 }, - { - "x": 16610, - "y": 13280 - }, { "x": 16565, - "y": 13280 + "y": 13370 } ], "label": { "x": 16661, - "y": 13372, + "y": 13462, "width": 314, "height": 32, "fontName": "Sans", @@ -57176,24 +58009,24 @@ "vertices": [ { "x": 16645, - "y": 13410 + "y": 13500 }, { "x": 16090, - "y": 13410 + "y": 13500 }, { "x": 16090, - "y": 13080 + "y": 13170 }, { "x": 15995, - "y": 13080 + "y": 13170 } ], "label": { "x": 16661, - "y": 13412, + "y": 13502, "width": 371, "height": 32, "fontName": "Sans", @@ -57218,24 +58051,24 @@ "vertices": [ { "x": 16645, - "y": 13430 + "y": 13520 }, { "x": 16030, - "y": 13430 + "y": 13520 }, { "x": 16030, - "y": 13280 + "y": 13370 }, { "x": 15995, - "y": 13280 + "y": 13370 } ], "label": { "x": 16661, - "y": 13432, + "y": 13522, "width": 381, "height": 32, "fontName": "Sans", @@ -57260,16 +58093,16 @@ "vertices": [ { "x": 15565, - "y": 13070 + "y": 13160 }, { "x": 15535, - "y": 13070 + "y": 13160 } ], "label": { "x": 15581, - "y": 13072, + "y": 13162, "width": 433, "height": 32, "fontName": "Sans", @@ -57294,16 +58127,16 @@ "vertices": [ { "x": 15565, - "y": 13280 + "y": 13370 }, { "x": 15535, - "y": 13280 + "y": 13370 } ], "label": { "x": 15581, - "y": 13282, + "y": 13372, "width": 516, "height": 32, "fontName": "Sans", @@ -57327,24 +58160,24 @@ "visible": true, "vertices": [ { - "x": 15110, + "x": 11810, "y": 5910 }, { - "x": 15110, + "x": 11810, "y": 7050 }, { - "x": 14940, + "x": 11780, "y": 7050 }, { - "x": 14940, - "y": 7095 + "x": 11780, + "y": 7255 } ], "label": { - "x": 15118, + "x": 11818, "y": 5900, "width": 435, "height": 32, @@ -57369,16 +58202,16 @@ "visible": true, "vertices": [ { - "x": 15180, + "x": 11900, "y": 5910 }, { - "x": 15180, + "x": 11900, "y": 7095 } ], "label": { - "x": 15188, + "x": 11908, "y": 5868, "width": 445, "height": 32, @@ -57403,16 +58236,16 @@ "visible": true, "vertices": [ { - "x": 15245, + "x": 11955, "y": 5800 }, { - "x": 15275, + "x": 11985, "y": 5800 } ], "label": { - "x": 15241, + "x": 11951, "y": 5802, "width": 410, "height": 32, @@ -57437,16 +58270,16 @@ "visible": true, "vertices": [ { - "x": 15030, + "x": 11740, "y": 5705 }, { - "x": 15030, + "x": 11740, "y": 5611 } ], "label": { - "x": 15038, + "x": 11748, "y": 5683, "width": 404, "height": 32, @@ -57471,16 +58304,16 @@ "visible": true, "vertices": [ { - "x": 14815, + "x": 11525, "y": 5800 }, { - "x": 14795, + "x": 11505, "y": 5800 } ], "label": { - "x": 14831, + "x": 11541, "y": 5770, "width": 384, "height": 32, @@ -57505,24 +58338,24 @@ "visible": true, "vertices": [ { - "x": 14880, + "x": 11590, "y": 5910 }, { - "x": 14880, + "x": 11590, "y": 5950 }, { - "x": 14850, + "x": 11540, "y": 5950 }, { - "x": 14850, + "x": 11540, "y": 5985 } ], "label": { - "x": 14888, + "x": 11598, "y": 5900, "width": 394, "height": 32, @@ -57547,24 +58380,24 @@ "visible": true, "vertices": [ { - "x": 14960, + "x": 11660, "y": 5910 }, { - "x": 14960, + "x": 11660, "y": 6200 }, { - "x": 14920, + "x": 11620, "y": 6200 }, { - "x": 14920, + "x": 11620, "y": 6235 } ], "label": { - "x": 14968, + "x": 11668, "y": 5900, "width": 451, "height": 32, @@ -57589,24 +58422,24 @@ "visible": true, "vertices": [ { - "x": 15040, + "x": 11740, "y": 5910 }, { - "x": 15040, + "x": 11740, "y": 6630 }, { - "x": 14990, + "x": 11690, "y": 6630 }, { - "x": 14990, + "x": 11690, "y": 6675 } ], "label": { - "x": 15048, + "x": 11748, "y": 5900, "width": 461, "height": 32, @@ -57631,16 +58464,16 @@ "visible": true, "vertices": [ { - "x": 14780, + "x": 11480, "y": 6402 }, { - "x": 14780, + "x": 11480, "y": 6425 } ], "label": { - "x": 14788, + "x": 11488, "y": 6392, "width": 513, "height": 32, @@ -57665,16 +58498,16 @@ "visible": true, "vertices": [ { - "x": 14850, + "x": 11550, "y": 6823 }, { - "x": 14850, + "x": 11550, "y": 6845 } ], "label": { - "x": 14858, + "x": 11558, "y": 6813, "width": 596, "height": 32, @@ -57700,20 +58533,20 @@ "vertices": [ { "x": 3210, - "y": 16155 + "y": 16245 }, { "x": 3210, - "y": 15240 + "y": 15330 }, { "x": 3545, - "y": 15240 + "y": 15330 } ], "label": { "x": 3218, - "y": 16165, + "y": 16255, "width": 397, "height": 32, "fontName": "Sans", @@ -57738,20 +58571,20 @@ "vertices": [ { "x": 3110, - "y": 16155 + "y": 16245 }, { "x": 3110, - "y": 15020 + "y": 15110 }, { "x": 3155, - "y": 15020 + "y": 15110 } ], "label": { "x": 3118, - "y": 16133, + "y": 16223, "width": 407, "height": 32, "fontName": "Sans", @@ -57776,16 +58609,16 @@ "vertices": [ { "x": 3010, - "y": 16155 + "y": 16245 }, { "x": 3010, - "y": 14927 + "y": 15017 } ], "label": { "x": 3018, - "y": 16165, + "y": 16255, "width": 372, "height": 32, "fontName": "Sans", @@ -57810,16 +58643,16 @@ "vertices": [ { "x": 2935, - "y": 16260 + "y": 16350 }, { "x": 2845, - "y": 16260 + "y": 16350 } ], "label": { "x": 2951, - "y": 16230, + "y": 16320, "width": 366, "height": 32, "fontName": "Sans", @@ -57844,16 +58677,16 @@ "vertices": [ { "x": 3150, - "y": 16360 + "y": 16450 }, { "x": 3150, - "y": 16375 + "y": 16465 } ], "label": { "x": 3158, - "y": 16318, + "y": 16408, "width": 346, "height": 32, "fontName": "Sans", @@ -57878,16 +58711,16 @@ "vertices": [ { "x": 3365, - "y": 16320 + "y": 16410 }, { "x": 3505, - "y": 16320 + "y": 16410 } ], "label": { "x": 3361, - "y": 16322, + "y": 16412, "width": 356, "height": 32, "fontName": "Sans", @@ -57912,24 +58745,24 @@ "vertices": [ { "x": 3365, - "y": 16220 + "y": 16310 }, { "x": 3460, - "y": 16220 + "y": 16310 }, { "x": 3460, - "y": 16140 + "y": 16230 }, { "x": 3505, - "y": 16140 + "y": 16230 } ], "label": { "x": 3361, - "y": 16222, + "y": 16312, "width": 413, "height": 32, "fontName": "Sans", @@ -57954,24 +58787,24 @@ "vertices": [ { "x": 3365, - "y": 16190 + "y": 16280 }, { "x": 3400, - "y": 16190 + "y": 16280 }, { "x": 3400, - "y": 15960 + "y": 16050 }, { "x": 3445, - "y": 15960 + "y": 16050 } ], "label": { "x": 3361, - "y": 16192, + "y": 16282, "width": 423, "height": 32, "fontName": "Sans", @@ -57996,16 +58829,16 @@ "vertices": [ { "x": 3935, - "y": 16140 + "y": 16230 }, { "x": 4015, - "y": 16140 + "y": 16230 } ], "label": { "x": 3931, - "y": 16142, + "y": 16232, "width": 475, "height": 32, "fontName": "Sans", @@ -58030,16 +58863,16 @@ "vertices": [ { "x": 3875, - "y": 15950 + "y": 16040 }, { "x": 3895, - "y": 15950 + "y": 16040 } ], "label": { "x": 3871, - "y": 15952, + "y": 16042, "width": 558, "height": 32, "fontName": "Sans", @@ -58064,28 +58897,28 @@ "vertices": [ { "x": 4770, - "y": 17515 + "y": 17605 }, { "x": 4770, - "y": 15790 + "y": 15880 }, { "x": 4820, - "y": 15790 + "y": 15880 }, { "x": 4820, - "y": 15570 + "y": 15660 }, { "x": 3975, - "y": 15570 + "y": 15660 } ], "label": { "x": 4778, - "y": 17525, + "y": 17615, "width": 341, "height": 32, "fontName": "Sans", @@ -58110,16 +58943,16 @@ "vertices": [ { "x": 4700, - "y": 17515 + "y": 17605 }, { "x": 4700, - "y": 15751 + "y": 15841 } ], "label": { "x": 4708, - "y": 17493, + "y": 17583, "width": 351, "height": 32, "fontName": "Sans", @@ -58144,16 +58977,16 @@ "vertices": [ { "x": 4635, - "y": 17620 + "y": 17710 }, { "x": 4615, - "y": 17620 + "y": 17710 } ], "label": { "x": 4651, - "y": 17622, + "y": 17712, "width": 316, "height": 32, "fontName": "Sans", @@ -58178,16 +59011,16 @@ "vertices": [ { "x": 4850, - "y": 17720 + "y": 17810 }, { "x": 4850, - "y": 17735 + "y": 17825 } ], "label": { "x": 4858, - "y": 17678, + "y": 17768, "width": 310, "height": 32, "fontName": "Sans", @@ -58212,16 +59045,16 @@ "vertices": [ { "x": 5065, - "y": 17620 + "y": 17710 }, { "x": 5085, - "y": 17620 + "y": 17710 } ], "label": { "x": 5061, - "y": 17590, + "y": 17680, "width": 290, "height": 32, "fontName": "Sans", @@ -58246,24 +59079,24 @@ "vertices": [ { "x": 5000, - "y": 17515 + "y": 17605 }, { "x": 5000, - "y": 17470 + "y": 17560 }, { - "x": 5050, - "y": 17470 + "x": 5040, + "y": 17560 }, { - "x": 5050, - "y": 17432 + "x": 5040, + "y": 17522 } ], "label": { "x": 5008, - "y": 17525, + "y": 17615, "width": 300, "height": 32, "fontName": "Sans", @@ -58287,25 +59120,25 @@ "visible": true, "vertices": [ { - "x": 4930, - "y": 17515 + "x": 4920, + "y": 17605 }, { - "x": 4930, - "y": 17030 + "x": 4920, + "y": 17120 }, { - "x": 4980, - "y": 17030 + "x": 4970, + "y": 17120 }, { - "x": 4980, - "y": 16992 + "x": 4970, + "y": 17082 } ], "label": { - "x": 4938, - "y": 17525, + "x": 4928, + "y": 17615, "width": 357, "height": 32, "fontName": "Sans", @@ -58329,25 +59162,25 @@ "visible": true, "vertices": [ { - "x": 4860, - "y": 17515 + "x": 4840, + "y": 17605 }, { - "x": 4860, - "y": 16400 + "x": 4840, + "y": 16490 }, { "x": 4890, - "y": 16400 + "y": 16490 }, { "x": 4890, - "y": 16363 + "y": 16453 } ], "label": { - "x": 4868, - "y": 17525, + "x": 4848, + "y": 17615, "width": 367, "height": 32, "fontName": "Sans", @@ -58371,17 +59204,17 @@ "visible": true, "vertices": [ { - "x": 5110, - "y": 16825 + "x": 5100, + "y": 16915 }, { - "x": 5110, - "y": 16802 + "x": 5100, + "y": 16892 } ], "label": { - "x": 5118, - "y": 16835, + "x": 5108, + "y": 16925, "width": 419, "height": 32, "fontName": "Sans", @@ -58406,16 +59239,16 @@ "vertices": [ { "x": 5030, - "y": 16215 + "y": 16305 }, { "x": 5030, - "y": 16192 + "y": 16282 } ], "label": { "x": 5038, - "y": 16225, + "y": 16315, "width": 502, "height": 32, "fontName": "Sans", @@ -58439,15 +59272,15 @@ "visible": true, "vertices": [ { - "x": 24925, + "x": 24875, "y": 5880 }, { - "x": 24240, + "x": 24190, "y": 5880 }, { - "x": 24240, + "x": 24190, "y": 5800 }, { @@ -58456,11 +59289,11 @@ }, { "x": 17770, - "y": 15375 + "y": 15465 } ], "label": { - "x": 24941, + "x": 24891, "y": 5882, "width": 427, "height": 32, @@ -58485,16 +59318,16 @@ "visible": true, "vertices": [ { - "x": 24925, + "x": 24875, "y": 5910 }, { - "x": 24205, + "x": 24155, "y": 5910 } ], "label": { - "x": 24941, + "x": 24891, "y": 5880, "width": 437, "height": 32, @@ -58519,16 +59352,16 @@ "visible": true, "vertices": [ { - "x": 25140, + "x": 25090, "y": 5950 }, { - "x": 25140, + "x": 25090, "y": 5965 } ], "label": { - "x": 25148, + "x": 25098, "y": 5940, "width": 402, "height": 32, @@ -58553,16 +59386,16 @@ "visible": true, "vertices": [ { - "x": 25355, + "x": 25305, "y": 5840 }, { - "x": 25435, + "x": 25385, "y": 5840 } ], "label": { - "x": 25351, + "x": 25301, "y": 5810, "width": 396, "height": 32, @@ -58587,16 +59420,16 @@ "visible": true, "vertices": [ { - "x": 25140, + "x": 25090, "y": 5745 }, { - "x": 25140, + "x": 25090, "y": 5721 } ], "label": { - "x": 25148, + "x": 25098, "y": 5723, "width": 376, "height": 32, @@ -58621,24 +59454,24 @@ "visible": true, "vertices": [ { - "x": 24925, + "x": 24875, "y": 5780 }, { - "x": 24880, + "x": 24830, "y": 5780 }, { - "x": 24880, + "x": 24830, "y": 5690 }, { - "x": 24835, + "x": 24785, "y": 5690 } ], "label": { - "x": 24941, + "x": 24891, "y": 5782, "width": 386, "height": 32, @@ -58663,24 +59496,24 @@ "visible": true, "vertices": [ { - "x": 24925, + "x": 24875, "y": 5800 }, { - "x": 24370, + "x": 24320, "y": 5800 }, { - "x": 24370, + "x": 24320, "y": 140 }, { - "x": 24325, + "x": 24275, "y": 140 } ], "label": { - "x": 24941, + "x": 24891, "y": 5802, "width": 443, "height": 32, @@ -58705,24 +59538,24 @@ "visible": true, "vertices": [ { - "x": 24925, + "x": 24875, "y": 5840 }, { - "x": 24300, + "x": 24260, "y": 5840 }, { - "x": 24300, + "x": 24260, "y": 350 }, { - "x": 24265, + "x": 24215, "y": 350 } ], "label": { - "x": 24941, + "x": 24891, "y": 5842, "width": 453, "height": 32, @@ -58747,16 +59580,16 @@ "visible": true, "vertices": [ { - "x": 23895, + "x": 23845, "y": 140 }, { - "x": 23875, + "x": 23825, "y": 140 } ], "label": { - "x": 23911, + "x": 23861, "y": 142, "width": 505, "height": 32, @@ -58781,16 +59614,16 @@ "visible": true, "vertices": [ { - "x": 23835, + "x": 23785, "y": 340 }, { - "x": 23815, + "x": 23765, "y": 340 } ], "label": { - "x": 23851, + "x": 23801, "y": 342, "width": 588, "height": 32, @@ -58895,7 +59728,7 @@ "y": 5310 }, { - "x": 23695, + "x": 23645, "y": 5310 } ], @@ -58930,7 +59763,7 @@ }, { "x": 17490, - "y": 221 + "y": 161 } ], "label": { @@ -59002,11 +59835,11 @@ }, { "x": 17890, - "y": 1200 + "y": 1290 }, { "x": 17935, - "y": 1200 + "y": 1290 } ], "label": { @@ -59040,11 +59873,11 @@ }, { "x": 17700, - "y": 440 + "y": 540 }, { "x": 17735, - "y": 440 + "y": 540 } ], "label": { @@ -59078,11 +59911,11 @@ }, { "x": 17600, - "y": 260 + "y": 210 }, { - "x": 17735, - "y": 260 + "x": 18645, + "y": 210 } ], "label": { @@ -59112,16 +59945,16 @@ "vertices": [ { "x": 18165, - "y": 440 + "y": 540 }, { "x": 18195, - "y": 440 + "y": 540 } ], "label": { "x": 18161, - "y": 442, + "y": 542, "width": 471, "height": 32, "fontName": "Sans", @@ -59145,21 +59978,21 @@ "visible": true, "vertices": [ { - "x": 18090, - "y": 185 + "x": 19000, + "y": 135 }, { - "x": 18090, - "y": 110 + "x": 19000, + "y": 90 }, { - "x": 22885, - "y": 110 + "x": 22805, + "y": 90 } ], "label": { - "x": 18098, - "y": 195, + "x": 19008, + "y": 145, "width": 554, "height": 32, "fontName": "Sans", @@ -59184,24 +60017,24 @@ "vertices": [ { "x": 9295, - "y": 11170 + "y": 11330 }, { "x": 9850, - "y": 11170 + "y": 11330 }, { "x": 9850, - "y": 11080 + "y": 11240 }, { "x": 9885, - "y": 11080 + "y": 11240 } ], "label": { "x": 9285, - "y": 11130, + "y": 11290, "width": 306, "height": 32, "fontName": "Sans", @@ -59226,24 +60059,24 @@ "vertices": [ { "x": 9295, - "y": 11140 + "y": 11300 }, { "x": 9330, - "y": 11140 + "y": 11300 }, { "x": 9330, - "y": 11060 + "y": 11230 }, { "x": 9375, - "y": 11060 + "y": 11230 } ], "label": { "x": 9291, - "y": 11142, + "y": 11302, "width": 316, "height": 32, "fontName": "Sans", @@ -59268,20 +60101,20 @@ "vertices": [ { "x": 9150, - "y": 11105 + "y": 11265 }, { "x": 9150, - "y": 10870 + "y": 11040 }, { "x": 9185, - "y": 10870 + "y": 11040 } ], "label": { "x": 8835, - "y": 11073, + "y": 11233, "width": 317, "height": 32, "fontName": "Sans", @@ -59306,7 +60139,7 @@ "vertices": [ { "x": 21880, - "y": 2613 + "y": 2493 }, { "x": 21880, @@ -59315,7 +60148,7 @@ ], "label": { "x": 21717, - "y": 2561, + "y": 2441, "width": 165, "height": 32, "fontName": "Sans", @@ -59340,16 +60173,16 @@ "vertices": [ { "x": 21880, - "y": 2325 + "y": 2205 }, { "x": 21880, - "y": 2303 + "y": 2183 } ], "label": { "x": 21882, - "y": 2293, + "y": 2173, "width": 191, "height": 32, "fontName": "Sans", @@ -59373,21 +60206,21 @@ "visible": true, "vertices": [ { - "x": 19760, - "y": 1625 + "x": 19830, + "y": 1515 }, { - "x": 19760, - "y": 1380 + "x": 19830, + "y": 1260 }, { - "x": 20145, - "y": 1380 + "x": 20495, + "y": 1260 } ], "label": { - "x": 19768, - "y": 1635, + "x": 19838, + "y": 1525, "width": 337, "height": 32, "fontName": "Sans", @@ -59411,21 +60244,17 @@ "visible": true, "vertices": [ { - "x": 19660, - "y": 1625 + "x": 19720, + "y": 1515 }, { - "x": 19660, - "y": 1270 - }, - { - "x": 19695, - "y": 1270 + "x": 19720, + "y": 1221 } ], "label": { - "x": 19668, - "y": 1603, + "x": 19728, + "y": 1493, "width": 347, "height": 32, "fontName": "Sans", @@ -59450,20 +60279,16 @@ "vertices": [ { "x": 19475, - "y": 1770 + "y": 1650 }, { - "x": 18920, - "y": 1770 - }, - { - "x": 18920, - "y": 1130 + "x": 19135, + "y": 1650 } ], "label": { "x": 19491, - "y": 1772, + "y": 1652, "width": 312, "height": 32, "fontName": "Sans", @@ -59488,16 +60313,16 @@ "vertices": [ { "x": 19550, - "y": 1625 + "y": 1515 }, { "x": 19550, - "y": 1181 + "y": 1391 } ], "label": { "x": 19558, - "y": 1603, + "y": 1493, "width": 306, "height": 32, "fontName": "Sans", @@ -59522,24 +60347,24 @@ "vertices": [ { "x": 19475, - "y": 1690 + "y": 1570 }, { "x": 19430, - "y": 1690 + "y": 1570 }, { "x": 19430, - "y": 1660 + "y": 1480 }, { "x": 19385, - "y": 1660 + "y": 1480 } ], "label": { "x": 19491, - "y": 1660, + "y": 1540, "width": 286, "height": 32, "fontName": "Sans", @@ -59564,16 +60389,16 @@ "vertices": [ { "x": 19690, - "y": 1830 + "y": 1720 }, { "x": 19690, - "y": 1855 + "y": 1735 } ], "label": { "x": 19698, - "y": 1820, + "y": 1710, "width": 296, "height": 32, "fontName": "Sans", @@ -59598,24 +60423,24 @@ "vertices": [ { "x": 19905, - "y": 1660 + "y": 1560 }, { "x": 19940, - "y": 1660 + "y": 1560 }, { "x": 19940, - "y": 1610 + "y": 1490 }, { "x": 19985, - "y": 1610 + "y": 1490 } ], "label": { "x": 19901, - "y": 1662, + "y": 1562, "width": 353, "height": 32, "fontName": "Sans", @@ -59640,16 +60465,16 @@ "vertices": [ { "x": 19905, - "y": 1790 + "y": 1670 }, { - "x": 19925, - "y": 1790 + "x": 19985, + "y": 1670 } ], "label": { "x": 19901, - "y": 1792, + "y": 1672, "width": 363, "height": 32, "fontName": "Sans", @@ -59674,16 +60499,16 @@ "vertices": [ { "x": 20415, - "y": 1600 + "y": 1480 }, { "x": 20495, - "y": 1600 + "y": 1480 } ], "label": { "x": 20411, - "y": 1602, + "y": 1482, "width": 415, "height": 32, "fontName": "Sans", @@ -59707,17 +60532,17 @@ "visible": true, "vertices": [ { - "x": 20355, - "y": 1790 + "x": 20415, + "y": 1670 }, { - "x": 20375, - "y": 1790 + "x": 20495, + "y": 1670 } ], "label": { - "x": 20351, - "y": 1792, + "x": 20411, + "y": 1672, "width": 498, "height": 32, "fontName": "Sans", @@ -59742,20 +60567,20 @@ "vertices": [ { "x": 810, - "y": 18185 + "y": 18285 }, { "x": 810, - "y": 17790 + "y": 17900 }, { "x": 2295, - "y": 17790 + "y": 17900 } ], "label": { "x": 818, - "y": 18195, + "y": 18295, "width": 399, "height": 32, "fontName": "Sans", @@ -59780,20 +60605,20 @@ "vertices": [ { "x": 710, - "y": 18185 + "y": 18285 }, { "x": 710, - "y": 17680 + "y": 17790 }, { "x": 755, - "y": 17680 + "y": 17790 } ], "label": { "x": 718, - "y": 18163, + "y": 18263, "width": 409, "height": 32, "fontName": "Sans", @@ -59818,16 +60643,16 @@ "vertices": [ { "x": 610, - "y": 18185 + "y": 18285 }, { "x": 610, - "y": 17590 + "y": 17700 } ], "label": { "x": 618, - "y": 18195, + "y": 18295, "width": 374, "height": 32, "fontName": "Sans", @@ -59852,16 +60677,16 @@ "vertices": [ { "x": 525, - "y": 18280 + "y": 18390 }, { "x": 445, - "y": 18280 + "y": 18390 } ], "label": { "x": 541, - "y": 18250, + "y": 18360, "width": 368, "height": 32, "fontName": "Sans", @@ -59886,16 +60711,16 @@ "vertices": [ { "x": 740, - "y": 18390 + "y": 18490 }, { "x": 740, - "y": 18415 + "y": 18515 } ], "label": { "x": 748, - "y": 18348, + "y": 18448, "width": 348, "height": 32, "fontName": "Sans", @@ -59920,16 +60745,16 @@ "vertices": [ { "x": 955, - "y": 18350 + "y": 18450 }, { "x": 1105, - "y": 18350 + "y": 18450 } ], "label": { "x": 951, - "y": 18352, + "y": 18452, "width": 358, "height": 32, "fontName": "Sans", @@ -59954,24 +60779,24 @@ "vertices": [ { "x": 955, - "y": 18250 + "y": 18350 }, { "x": 1060, - "y": 18250 + "y": 18350 }, { "x": 1060, - "y": 18170 + "y": 18280 }, { "x": 1105, - "y": 18170 + "y": 18280 } ], "label": { "x": 951, - "y": 18252, + "y": 18352, "width": 415, "height": 32, "fontName": "Sans", @@ -59996,24 +60821,24 @@ "vertices": [ { "x": 955, - "y": 18220 + "y": 18320 }, { "x": 1000, - "y": 18220 + "y": 18320 }, { "x": 1000, - "y": 17990 + "y": 18090 }, { "x": 1045, - "y": 17990 + "y": 18090 } ], "label": { "x": 951, - "y": 18222, + "y": 18322, "width": 425, "height": 32, "fontName": "Sans", @@ -60038,16 +60863,16 @@ "vertices": [ { "x": 1535, - "y": 18170 + "y": 18280 }, { "x": 1615, - "y": 18170 + "y": 18280 } ], "label": { "x": 1531, - "y": 18172, + "y": 18282, "width": 477, "height": 32, "fontName": "Sans", @@ -60072,16 +60897,16 @@ "vertices": [ { "x": 1475, - "y": 17990 + "y": 18090 }, { "x": 1495, - "y": 17990 + "y": 18090 } ], "label": { "x": 1471, - "y": 17992, + "y": 18092, "width": 560, "height": 32, "fontName": "Sans", @@ -60106,16 +60931,16 @@ "vertices": [ { "x": 21880, - "y": 2015 + "y": 1895 }, { "x": 21880, - "y": 1989 + "y": 1879 } ], "label": { "x": 21690, - "y": 1983, + "y": 1863, "width": 192, "height": 32, "fontName": "Sans", @@ -60139,21 +60964,25 @@ "visible": true, "vertices": [ { - "x": 19135, - "y": 1000 + "x": 18920, + "y": 1575 + }, + { + "x": 18920, + "y": 1040 }, { "x": 21880, - "y": 1000 + "y": 1040 }, { "x": 21880, - "y": 1835 + "y": 1725 } ], "label": { - "x": 19125, - "y": 960, + "x": 18922, + "y": 1543, "width": 296, "height": 32, "fontName": "Sans", @@ -60177,25 +61006,25 @@ "visible": true, "vertices": [ { - "x": 20575, - "y": 1380 + "x": 20925, + "y": 1260 }, { "x": 21680, - "y": 1380 + "y": 1260 }, { "x": 21680, - "y": 1880 + "y": 1750 }, { "x": 21725, - "y": 1880 + "y": 1750 } ], "label": { - "x": 20244, - "y": 1340, + "x": 20594, + "y": 1220, "width": 321, "height": 32, "fontName": "Sans", @@ -60219,25 +61048,25 @@ "visible": true, "vertices": [ { - "x": 20805, - "y": 1840 + "x": 20925, + "y": 1720 }, { "x": 21090, - "y": 1840 + "y": 1720 }, { "x": 21090, - "y": 1930 + "y": 1810 }, { "x": 21725, - "y": 1930 + "y": 1810 } ], "label": { - "x": 20406, - "y": 1800, + "x": 20526, + "y": 1680, "width": 389, "height": 32, "fontName": "Sans", @@ -60262,24 +61091,24 @@ "vertices": [ { "x": 20925, - "y": 1610 + "y": 1490 }, { - "x": 21620, - "y": 1610 + "x": 21150, + "y": 1490 }, { - "x": 21620, - "y": 1900 + "x": 21150, + "y": 1780 }, { "x": 21725, - "y": 1900 + "y": 1780 } ], "label": { "x": 20599, - "y": 1570, + "y": 1450, "width": 316, "height": 32, "fontName": "Sans", @@ -60304,16 +61133,16 @@ "vertices": [ { "x": 19905, - "y": 1960 + "y": 1840 }, { "x": 21725, - "y": 1960 + "y": 1840 } ], "label": { "x": 19901, - "y": 1930, + "y": 1810, "width": 280, "height": 32, "fontName": "Sans", @@ -60337,29 +61166,29 @@ "visible": true, "vertices": [ { - "x": 23659, - "y": 3400 + "x": 23519, + "y": 3650 }, { - "x": 23680, - "y": 3400 + "x": 23530, + "y": 3650 }, { - "x": 23680, - "y": 3460 + "x": 23530, + "y": 3710 }, { - "x": 23620, - "y": 3460 + "x": 23470, + "y": 3710 }, { - "x": 23620, - "y": 3439 + "x": 23470, + "y": 3689 } ], "label": { - "x": 23649, - "y": 3360, + "x": 23509, + "y": 3610, "width": 166, "height": 32, "fontName": "Sans", @@ -60384,24 +61213,24 @@ "vertices": [ { "x": 2270, - "y": 19325 + "y": 19425 }, { "x": 2270, - "y": 18270 + "y": 18370 }, { "x": 2380, - "y": 18270 + "y": 18370 }, { "x": 2380, - "y": 18165 + "y": 18265 } ], "label": { "x": 2278, - "y": 19335, + "y": 19435, "width": 343, "height": 32, "fontName": "Sans", @@ -60426,16 +61255,16 @@ "vertices": [ { "x": 2200, - "y": 19325 + "y": 19425 }, { "x": 2200, - "y": 18065 + "y": 18165 } ], "label": { "x": 2208, - "y": 19335, + "y": 19435, "width": 353, "height": 32, "fontName": "Sans", @@ -60460,16 +61289,16 @@ "vertices": [ { "x": 2125, - "y": 19440 + "y": 19550 }, { "x": 2108, - "y": 19440 + "y": 19550 } ], "label": { "x": 2141, - "y": 19442, + "y": 19552, "width": 359, "height": 32, "fontName": "Sans", @@ -60494,16 +61323,16 @@ "vertices": [ { "x": 1775, - "y": 19440 + "y": 19550 }, { "x": 1754, - "y": 19440 + "y": 19550 } ], "label": { "x": 1791, - "y": 19442, + "y": 19552, "width": 421, "height": 32, "fontName": "Sans", @@ -60528,16 +61357,16 @@ "vertices": [ { "x": 2360, - "y": 19555 + "y": 19655 }, { "x": 2360, - "y": 19575 + "y": 19685 } ], "label": { "x": 2368, - "y": 19545, + "y": 19645, "width": 369, "height": 32, "fontName": "Sans", @@ -60562,16 +61391,16 @@ "vertices": [ { "x": 2360, - "y": 19805 + "y": 19915 }, { "x": 2360, - "y": 19835 + "y": 19935 } ], "label": { "x": 2368, - "y": 19795, + "y": 19905, "width": 504, "height": 32, "fontName": "Sans", @@ -60596,16 +61425,16 @@ "vertices": [ { "x": 2586, - "y": 19440 + "y": 19550 }, { "x": 2605, - "y": 19440 + "y": 19550 } ], "label": { "x": 2582, - "y": 19442, + "y": 19552, "width": 292, "height": 32, "fontName": "Sans", @@ -60630,24 +61459,24 @@ "vertices": [ { "x": 2520, - "y": 19325 + "y": 19425 }, { "x": 2520, - "y": 19280 + "y": 19390 }, { "x": 2560, - "y": 19280 + "y": 19390 }, { "x": 2560, - "y": 19241 + "y": 19351 } ], "label": { "x": 2528, - "y": 19335, + "y": 19435, "width": 302, "height": 32, "fontName": "Sans", @@ -60671,25 +61500,25 @@ "visible": true, "vertices": [ { - "x": 2430, - "y": 19325 + "x": 2440, + "y": 19425 }, { - "x": 2430, - "y": 18900 + "x": 2440, + "y": 19000 }, { "x": 2470, - "y": 18900 + "y": 19000 }, { "x": 2470, - "y": 18855 + "y": 18955 } ], "label": { - "x": 2438, - "y": 19335, + "x": 2448, + "y": 19435, "width": 318, "height": 32, "fontName": "Sans", @@ -60714,24 +61543,24 @@ "vertices": [ { "x": 2360, - "y": 19325 + "y": 19425 }, { "x": 2360, - "y": 18580 + "y": 18690 }, { "x": 2400, - "y": 18580 + "y": 18690 }, { "x": 2400, - "y": 18545 + "y": 18645 } ], "label": { "x": 2368, - "y": 19335, + "y": 19435, "width": 312, "height": 32, "fontName": "Sans", @@ -60755,17 +61584,17 @@ "visible": true, "vertices": [ { - "x": 23239, - "y": 3290 + "x": 23099, + "y": 3540 }, { - "x": 23265, - "y": 3290 + "x": 23125, + "y": 3540 } ], "label": { - "x": 23229, - "y": 3250, + "x": 23089, + "y": 3500, "width": 219, "height": 32, "fontName": "Sans", @@ -60789,17 +61618,21 @@ "visible": true, "vertices": [ { - "x": 22845, - "y": 3290 + "x": 22705, + "y": 3460 }, { - "x": 22825, - "y": 3290 + "x": 22660, + "y": 3460 + }, + { + "x": 22660, + "y": 3363 } ], "label": { - "x": 22855, - "y": 3250, + "x": 22715, + "y": 3420, "width": 218, "height": 32, "fontName": "Sans", @@ -60824,28 +61657,28 @@ "vertices": [ { "x": 4285, - "y": 18170 + "y": 18290 }, { "x": 3610, - "y": 18170 + "y": 18290 }, { "x": 3610, - "y": 17920 + "y": 18020 }, { "x": 3060, - "y": 17920 + "y": 18020 }, { "x": 3060, - "y": 17955 + "y": 18065 } ], "label": { "x": 4301, - "y": 18172, + "y": 18292, "width": 449, "height": 32, "fontName": "Sans", @@ -60870,16 +61703,16 @@ "vertices": [ { "x": 4285, - "y": 18200 + "y": 18320 }, { "x": 3565, - "y": 18200 + "y": 18320 } ], "label": { "x": 4301, - "y": 18170, + "y": 18290, "width": 459, "height": 32, "fontName": "Sans", @@ -60904,16 +61737,16 @@ "vertices": [ { "x": 4500, - "y": 18230 + "y": 18350 }, { "x": 4500, - "y": 18255 + "y": 18375 } ], "label": { "x": 4508, - "y": 18220, + "y": 18340, "width": 424, "height": 32, "fontName": "Sans", @@ -60938,16 +61771,16 @@ "vertices": [ { "x": 4715, - "y": 18130 + "y": 18250 }, { "x": 4795, - "y": 18130 + "y": 18250 } ], "label": { "x": 4711, - "y": 18100, + "y": 18220, "width": 418, "height": 32, "fontName": "Sans", @@ -60972,16 +61805,16 @@ "vertices": [ { "x": 4500, - "y": 18025 + "y": 18145 }, { "x": 4500, - "y": 18031 + "y": 18121 } ], "label": { "x": 4508, - "y": 18003, + "y": 18123, "width": 398, "height": 32, "fontName": "Sans", @@ -61006,24 +61839,24 @@ "vertices": [ { "x": 4285, - "y": 18060 + "y": 18180 }, { "x": 4240, - "y": 18060 + "y": 18180 }, { "x": 4240, - "y": 17970 + "y": 18090 }, { "x": 4205, - "y": 17970 + "y": 18090 } ], "label": { "x": 4301, - "y": 18062, + "y": 18182, "width": 408, "height": 32, "fontName": "Sans", @@ -61048,24 +61881,24 @@ "vertices": [ { "x": 4285, - "y": 18100 + "y": 18210 }, { "x": 3730, - "y": 18100 + "y": 18210 }, { "x": 3730, - "y": 17620 + "y": 17720 }, { "x": 3695, - "y": 17620 + "y": 17720 } ], "label": { "x": 4301, - "y": 18102, + "y": 18212, "width": 465, "height": 32, "fontName": "Sans", @@ -61090,24 +61923,24 @@ "vertices": [ { "x": 4285, - "y": 18120 + "y": 18240 }, { "x": 3670, - "y": 18120 + "y": 18240 }, { "x": 3670, - "y": 17800 + "y": 17900 }, { "x": 3625, - "y": 17800 + "y": 17900 } ], "label": { "x": 4301, - "y": 18122, + "y": 18242, "width": 475, "height": 32, "fontName": "Sans", @@ -61132,16 +61965,16 @@ "vertices": [ { "x": 3265, - "y": 17610 + "y": 17710 }, { "x": 3235, - "y": 17610 + "y": 17710 } ], "label": { "x": 3281, - "y": 17612, + "y": 17712, "width": 527, "height": 32, "fontName": "Sans", @@ -61166,16 +61999,16 @@ "vertices": [ { "x": 3195, - "y": 17800 + "y": 17900 }, { "x": 3175, - "y": 17800 + "y": 17900 } ], "label": { "x": 3211, - "y": 17802, + "y": 17902, "width": 610, "height": 32, "fontName": "Sans", @@ -61190,6 +62023,74 @@ "isFontItalic": false, "isVisible": false } + }, + { + "name": "fk_PruductTag_Products_1", + "sourceTableName": "PruductTag", + "sourceSchemaName": "CMS", + "lineWidth": 1, + "visible": true, + "vertices": [ + { + "x": 22845, + "y": 3250 + }, + { + "x": 22825, + "y": 3250 + } + ], + "label": { + "x": 22855, + "y": 3210, + "width": 182, + "height": 32, + "fontName": "Sans", + "fontSize": 14, + "fontColor": { + "r": 51, + "g": 51, + "b": 51, + "a": 1 + }, + "isFontBold": false, + "isFontItalic": false, + "isVisible": false + } + }, + { + "name": "fk_PruductTag_Tag_1", + "sourceTableName": "PruductTag", + "sourceSchemaName": "CMS", + "lineWidth": 1, + "visible": true, + "vertices": [ + { + "x": 23075, + "y": 3250 + }, + { + "x": 23105, + "y": 3250 + } + ], + "label": { + "x": 23071, + "y": 3252, + "width": 147, + "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/CMSMicroservice.Application/Common/Interfaces/IApplicationDbContext.cs b/src/CMSMicroservice.Application/Common/Interfaces/IApplicationDbContext.cs index aec6300..905f5ba 100644 --- a/src/CMSMicroservice.Application/Common/Interfaces/IApplicationDbContext.cs +++ b/src/CMSMicroservice.Application/Common/Interfaces/IApplicationDbContext.cs @@ -5,7 +5,8 @@ public interface IApplicationDbContext DbSet UserAddresss { get; } DbSet Packages { get; } DbSet Roles { get; } - DbSet Categorys { get; } + DbSet Categories { get; } + DbSet Tags { get; } DbSet UserRoles { get; } DbSet UserWallets { get; } DbSet UserWalletChangeLogs { get; } @@ -20,6 +21,7 @@ public interface IApplicationDbContext DbSet OtpTokens { get; } DbSet Contracts { get; } DbSet UserContracts { get; } + DbSet PruductTags { get; } DbSet PruductCategorys { get; } Task SaveChangesAsync(CancellationToken cancellationToken = default); -} \ No newline at end of file +} diff --git a/src/CMSMicroservice.Application/Common/Mappings/PruductTagProfile.cs b/src/CMSMicroservice.Application/Common/Mappings/PruductTagProfile.cs new file mode 100644 index 0000000..1bc05e8 --- /dev/null +++ b/src/CMSMicroservice.Application/Common/Mappings/PruductTagProfile.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.Application.Common.Mappings; + +public class PruductTagProfile : IRegister +{ + void IRegister.Register(TypeAdapterConfig config) + { + //config.NewConfig() + // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}"); + } +} + diff --git a/src/CMSMicroservice.Application/Common/Mappings/TagProfile.cs b/src/CMSMicroservice.Application/Common/Mappings/TagProfile.cs new file mode 100644 index 0000000..c483a38 --- /dev/null +++ b/src/CMSMicroservice.Application/Common/Mappings/TagProfile.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.Application.Common.Mappings; + +public class TagProfile : IRegister +{ + void IRegister.Register(TypeAdapterConfig config) + { + //config.NewConfig() + // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}"); + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommand.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommand.cs new file mode 100644 index 0000000..e1da284 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommand.cs @@ -0,0 +1,10 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.CreateNewPruductTag; +public record CreateNewPruductTagCommand : IRequest +{ + //شناسه محصول + public string ProductId { get; init; } + //شناسه تگ + public string TagId { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommandHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommandHandler.cs new file mode 100644 index 0000000..5773d52 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommandHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.PruductTagCQ.Commands.CreateNewPruductTag; +public class CreateNewPruductTagCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public CreateNewPruductTagCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(CreateNewPruductTagCommand request, + CancellationToken cancellationToken) + { + var entity = request.Adapt(); + await _context.PruductTags.AddAsync(entity, cancellationToken); + entity.AddDomainEvent(new CreateNewPruductTagEvent(entity)); + await _context.SaveChangesAsync(cancellationToken); + return entity.Adapt(); + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommandValidator.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommandValidator.cs new file mode 100644 index 0000000..ccd07a3 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagCommandValidator.cs @@ -0,0 +1,19 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.CreateNewPruductTag; +public class CreateNewPruductTagCommandValidator : AbstractValidator +{ + public CreateNewPruductTagCommandValidator() + { + RuleFor(model => model.ProductId) + .NotEmpty(); + RuleFor(model => model.TagId) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((CreateNewPruductTagCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagResponseDto.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagResponseDto.cs new file mode 100644 index 0000000..4cb2271 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/CreateNewPruductTag/CreateNewPruductTagResponseDto.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.CreateNewPruductTag; +public class CreateNewPruductTagResponseDto +{ + //شناسه + public long Id { get; set; } + +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommand.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommand.cs new file mode 100644 index 0000000..6df655f --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommand.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.DeletePruductTag; +public record DeletePruductTagCommand : IRequest +{ + //شناسه + public long Id { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommandHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommandHandler.cs new file mode 100644 index 0000000..0a1028b --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommandHandler.cs @@ -0,0 +1,23 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.PruductTagCQ.Commands.DeletePruductTag; +public class DeletePruductTagCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public DeletePruductTagCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(DeletePruductTagCommand request, CancellationToken cancellationToken) + { + var entity = await _context.PruductTags + .FirstOrDefaultAsync(x => x.Id == request.Id, cancellationToken) ?? throw new NotFoundException(nameof(PruductTag), request.Id); + entity.IsDeleted = true; + _context.PruductTags.Update(entity); + entity.AddDomainEvent(new DeletePruductTagEvent(entity)); + await _context.SaveChangesAsync(cancellationToken); + return Unit.Value; + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommandValidator.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommandValidator.cs new file mode 100644 index 0000000..0362f79 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/DeletePruductTag/DeletePruductTagCommandValidator.cs @@ -0,0 +1,17 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.DeletePruductTag; +public class DeletePruductTagCommandValidator : AbstractValidator +{ + public DeletePruductTagCommandValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((DeletePruductTagCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommand.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommand.cs new file mode 100644 index 0000000..fdb0bc3 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommand.cs @@ -0,0 +1,12 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.UpdatePruductTag; +public record UpdatePruductTagCommand : IRequest +{ + //شناسه + public long Id { get; init; } + //شناسه محصول + public string ProductId { get; init; } + //شناسه تگ + public string TagId { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommandHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommandHandler.cs new file mode 100644 index 0000000..2ca6a6d --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommandHandler.cs @@ -0,0 +1,23 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.PruductTagCQ.Commands.UpdatePruductTag; +public class UpdatePruductTagCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public UpdatePruductTagCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(UpdatePruductTagCommand request, CancellationToken cancellationToken) + { + var entity = await _context.PruductTags + .FirstOrDefaultAsync(x => x.Id == request.Id, cancellationToken) ?? throw new NotFoundException(nameof(PruductTag), request.Id); + request.Adapt(entity); + _context.PruductTags.Update(entity); + entity.AddDomainEvent(new UpdatePruductTagEvent(entity)); + await _context.SaveChangesAsync(cancellationToken); + return Unit.Value; + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommandValidator.cs b/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommandValidator.cs new file mode 100644 index 0000000..2eca3fc --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Commands/UpdatePruductTag/UpdatePruductTagCommandValidator.cs @@ -0,0 +1,21 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Commands.UpdatePruductTag; +public class UpdatePruductTagCommandValidator : AbstractValidator +{ + public UpdatePruductTagCommandValidator() + { + RuleFor(model => model.Id) + .NotNull(); + RuleFor(model => model.ProductId) + .NotEmpty(); + RuleFor(model => model.TagId) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((UpdatePruductTagCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/CreateNewPruductTagEventHandlers/CreateNewPruductTagEventHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/CreateNewPruductTagEventHandlers/CreateNewPruductTagEventHandler.cs new file mode 100644 index 0000000..8eb2e0f --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/CreateNewPruductTagEventHandlers/CreateNewPruductTagEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.PruductTagCQ.EventHandlers; + +public class CreateNewPruductTagEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public CreateNewPruductTagEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(CreateNewPruductTagEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/DeletePruductTagEventHandlers/DeletePruductTagEventHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/DeletePruductTagEventHandlers/DeletePruductTagEventHandler.cs new file mode 100644 index 0000000..5093f96 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/DeletePruductTagEventHandlers/DeletePruductTagEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.PruductTagCQ.EventHandlers; + +public class DeletePruductTagEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public DeletePruductTagEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(DeletePruductTagEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/UpdatePruductTagEventHandlers/UpdatePruductTagEventHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/UpdatePruductTagEventHandlers/UpdatePruductTagEventHandler.cs new file mode 100644 index 0000000..7971901 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/EventHandlers/UpdatePruductTagEventHandlers/UpdatePruductTagEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.PruductTagCQ.EventHandlers; + +public class UpdatePruductTagEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public UpdatePruductTagEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(UpdatePruductTagEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQuery.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQuery.cs new file mode 100644 index 0000000..d650da0 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQuery.cs @@ -0,0 +1,21 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetAllPruductTagByFilter; +public record GetAllPruductTagByFilterQuery : IRequest +{ + //موقعیت صفحه بندی + public PaginationState? PaginationState { get; init; } + //مرتب سازی بر اساس + public string? SortBy { get; init; } + //فیلتر + public GetAllPruductTagByFilterFilter? Filter { get; init; } + +} +public class GetAllPruductTagByFilterFilter +{ + //شناسه + public long? Id { get; set; } + //شناسه محصول + public string? ProductId { get; set; } + //شناسه تگ + public string? TagId { get; set; } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQueryHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQueryHandler.cs new file mode 100644 index 0000000..a67aac2 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQueryHandler.cs @@ -0,0 +1,33 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetAllPruductTagByFilter; +public class GetAllPruductTagByFilterQueryHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public GetAllPruductTagByFilterQueryHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(GetAllPruductTagByFilterQuery request, CancellationToken cancellationToken) + { + var query = _context.PruductTags + .ApplyOrder(sortBy: request.SortBy) + .AsNoTracking() + .AsQueryable(); + if (request.Filter is not null) + { + query = query + .Where(x => request.Filter.Id == null || x.Id == request.Filter.Id) + .Where(x => request.Filter.ProductId == null || x.ProductId.Contains(request.Filter.ProductId)) + .Where(x => request.Filter.TagId == null || x.TagId.Contains(request.Filter.TagId)) +; + } + return new GetAllPruductTagByFilterResponseDto + { + MetaData = await query.GetMetaData(request.PaginationState, cancellationToken), + Models = await query.PaginatedListAsync(paginationState: request.PaginationState) + .ProjectToType().ToListAsync(cancellationToken) + }; + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQueryValidator.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQueryValidator.cs new file mode 100644 index 0000000..753da05 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterQueryValidator.cs @@ -0,0 +1,15 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetAllPruductTagByFilter; +public class GetAllPruductTagByFilterQueryValidator : AbstractValidator +{ + public GetAllPruductTagByFilterQueryValidator() + { + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetAllPruductTagByFilterQuery)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterResponseDto.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterResponseDto.cs new file mode 100644 index 0000000..f25d859 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetAllPruductTagByFilter/GetAllPruductTagByFilterResponseDto.cs @@ -0,0 +1,19 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetAllPruductTagByFilter; +public class GetAllPruductTagByFilterResponseDto +{ + //متادیتا + public MetaData MetaData { get; set; } + //مدل خروجی + public List? Models { get; set; } + +} +public class GetAllPruductTagByFilterResponseModel +{ + //شناسه + public long Id { get; set; } + //شناسه محصول + public string ProductId { get; set; } + //شناسه تگ + public string TagId { get; set; } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQuery.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQuery.cs new file mode 100644 index 0000000..9567440 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQuery.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetPruductTag; +public record GetPruductTagQuery : IRequest +{ + //شناسه + public long Id { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQueryHandler.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQueryHandler.cs new file mode 100644 index 0000000..aaa15f1 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQueryHandler.cs @@ -0,0 +1,23 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetPruductTag; +public class GetPruductTagQueryHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public GetPruductTagQueryHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(GetPruductTagQuery request, + CancellationToken cancellationToken) + { + var response = await _context.PruductTags + .AsNoTracking() + .Where(x => x.Id == request.Id) + .ProjectToType() + .FirstOrDefaultAsync(cancellationToken); + + return response ?? throw new NotFoundException(nameof(PruductTag), request.Id); + } +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQueryValidator.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQueryValidator.cs new file mode 100644 index 0000000..d485241 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagQueryValidator.cs @@ -0,0 +1,17 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetPruductTag; +public class GetPruductTagQueryValidator : AbstractValidator +{ + public GetPruductTagQueryValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetPruductTagQuery)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagResponseDto.cs b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagResponseDto.cs new file mode 100644 index 0000000..77121b8 --- /dev/null +++ b/src/CMSMicroservice.Application/PruductTagCQ/Queries/GetPruductTag/GetPruductTagResponseDto.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.Application.PruductTagCQ.Queries.GetPruductTag; +public class GetPruductTagResponseDto +{ + //شناسه + public long Id { get; set; } + //شناسه محصول + public string ProductId { get; set; } + //شناسه تگ + public string TagId { get; set; } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommand.cs b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommand.cs new file mode 100644 index 0000000..bbfd9d0 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommand.cs @@ -0,0 +1,16 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.CreateNewTag; +public record CreateNewTagCommand : IRequest +{ + //نام لاتین + public string Name { get; init; } + //عنوان + public string Title { get; init; } + //توضیحات + public string? Description { get; init; } + //فعال؟ + public bool IsActive { get; init; } + //ترتیب نمایش + public int SortOrder { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommandHandler.cs b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommandHandler.cs new file mode 100644 index 0000000..ae6cf9b --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommandHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.TagCQ.Commands.CreateNewTag; +public class CreateNewTagCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public CreateNewTagCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(CreateNewTagCommand request, + CancellationToken cancellationToken) + { + var entity = request.Adapt(); + await _context.Tags.AddAsync(entity, cancellationToken); + entity.AddDomainEvent(new CreateNewTagEvent(entity)); + await _context.SaveChangesAsync(cancellationToken); + return entity.Adapt(); + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommandValidator.cs b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommandValidator.cs new file mode 100644 index 0000000..e310b47 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagCommandValidator.cs @@ -0,0 +1,21 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.CreateNewTag; +public class CreateNewTagCommandValidator : AbstractValidator +{ + public CreateNewTagCommandValidator() + { + RuleFor(model => model.Name) + .NotEmpty(); + RuleFor(model => model.Title) + .NotEmpty(); + RuleFor(model => model.SortOrder) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((CreateNewTagCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagResponseDto.cs b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagResponseDto.cs new file mode 100644 index 0000000..f86ccb9 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/CreateNewTag/CreateNewTagResponseDto.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.CreateNewTag; +public class CreateNewTagResponseDto +{ + //شناسه + public long Id { get; set; } + +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommand.cs b/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommand.cs new file mode 100644 index 0000000..f268924 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommand.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.DeleteTag; +public record DeleteTagCommand : IRequest +{ + //شناسه + public long Id { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommandHandler.cs b/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommandHandler.cs new file mode 100644 index 0000000..5f56b57 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommandHandler.cs @@ -0,0 +1,23 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.TagCQ.Commands.DeleteTag; +public class DeleteTagCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public DeleteTagCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(DeleteTagCommand request, CancellationToken cancellationToken) + { + var entity = await _context.Tags + .FirstOrDefaultAsync(x => x.Id == request.Id, cancellationToken) ?? throw new NotFoundException(nameof(Tag), request.Id); + entity.IsDeleted = true; + _context.Tags.Update(entity); + entity.AddDomainEvent(new DeleteTagEvent(entity)); + await _context.SaveChangesAsync(cancellationToken); + return Unit.Value; + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommandValidator.cs b/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommandValidator.cs new file mode 100644 index 0000000..d6728e0 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/DeleteTag/DeleteTagCommandValidator.cs @@ -0,0 +1,17 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.DeleteTag; +public class DeleteTagCommandValidator : AbstractValidator +{ + public DeleteTagCommandValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((DeleteTagCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommand.cs b/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommand.cs new file mode 100644 index 0000000..fd28a69 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommand.cs @@ -0,0 +1,18 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.UpdateTag; +public record UpdateTagCommand : IRequest +{ + //شناسه + public long Id { get; init; } + //نام لاتین + public string Name { get; init; } + //عنوان + public string Title { get; init; } + //توضیحات + public string? Description { get; init; } + //فعال؟ + public bool IsActive { get; init; } + //ترتیب نمایش + public int SortOrder { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommandHandler.cs b/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommandHandler.cs new file mode 100644 index 0000000..4899379 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommandHandler.cs @@ -0,0 +1,23 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.TagCQ.Commands.UpdateTag; +public class UpdateTagCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public UpdateTagCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(UpdateTagCommand request, CancellationToken cancellationToken) + { + var entity = await _context.Tags + .FirstOrDefaultAsync(x => x.Id == request.Id, cancellationToken) ?? throw new NotFoundException(nameof(Tag), request.Id); + request.Adapt(entity); + _context.Tags.Update(entity); + entity.AddDomainEvent(new UpdateTagEvent(entity)); + await _context.SaveChangesAsync(cancellationToken); + return Unit.Value; + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommandValidator.cs b/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommandValidator.cs new file mode 100644 index 0000000..b0981a4 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Commands/UpdateTag/UpdateTagCommandValidator.cs @@ -0,0 +1,23 @@ +namespace CMSMicroservice.Application.TagCQ.Commands.UpdateTag; +public class UpdateTagCommandValidator : AbstractValidator +{ + public UpdateTagCommandValidator() + { + RuleFor(model => model.Id) + .NotNull(); + RuleFor(model => model.Name) + .NotEmpty(); + RuleFor(model => model.Title) + .NotEmpty(); + RuleFor(model => model.SortOrder) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((UpdateTagCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/TagCQ/EventHandlers/CreateNewTagEventHandlers/CreateNewTagEventHandler.cs b/src/CMSMicroservice.Application/TagCQ/EventHandlers/CreateNewTagEventHandlers/CreateNewTagEventHandler.cs new file mode 100644 index 0000000..c12c774 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/EventHandlers/CreateNewTagEventHandlers/CreateNewTagEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.TagCQ.EventHandlers; + +public class CreateNewTagEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public CreateNewTagEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(CreateNewTagEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/EventHandlers/DeleteTagEventHandlers/DeleteTagEventHandler.cs b/src/CMSMicroservice.Application/TagCQ/EventHandlers/DeleteTagEventHandlers/DeleteTagEventHandler.cs new file mode 100644 index 0000000..c293277 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/EventHandlers/DeleteTagEventHandlers/DeleteTagEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.TagCQ.EventHandlers; + +public class DeleteTagEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public DeleteTagEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(DeleteTagEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/EventHandlers/UpdateTagEventHandlers/UpdateTagEventHandler.cs b/src/CMSMicroservice.Application/TagCQ/EventHandlers/UpdateTagEventHandlers/UpdateTagEventHandler.cs new file mode 100644 index 0000000..8539aff --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/EventHandlers/UpdateTagEventHandlers/UpdateTagEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.TagCQ.EventHandlers; + +public class UpdateTagEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public UpdateTagEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(UpdateTagEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQuery.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQuery.cs new file mode 100644 index 0000000..3e3ecc0 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQuery.cs @@ -0,0 +1,27 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetAllTagByFilter; +public record GetAllTagByFilterQuery : IRequest +{ + //موقعیت صفحه بندی + public PaginationState? PaginationState { get; init; } + //مرتب سازی بر اساس + public string? SortBy { get; init; } + //فیلتر + public GetAllTagByFilterFilter? Filter { get; init; } + +} +public class GetAllTagByFilterFilter +{ + //شناسه + public long? Id { get; set; } + //نام لاتین + public string? Name { get; set; } + //عنوان + public string? Title { get; set; } + //توضیحات + public string? Description { get; set; } + //فعال؟ + public bool? IsActive { get; set; } + //ترتیب نمایش + public int? SortOrder { get; set; } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQueryHandler.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQueryHandler.cs new file mode 100644 index 0000000..21ddeb8 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQueryHandler.cs @@ -0,0 +1,36 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetAllTagByFilter; +public class GetAllTagByFilterQueryHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public GetAllTagByFilterQueryHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(GetAllTagByFilterQuery request, CancellationToken cancellationToken) + { + var query = _context.Tags + .ApplyOrder(sortBy: request.SortBy) + .AsNoTracking() + .AsQueryable(); + if (request.Filter is not null) + { + query = query + .Where(x => request.Filter.Id == null || x.Id == request.Filter.Id) + .Where(x => request.Filter.Name == null || x.Name.Contains(request.Filter.Name)) + .Where(x => request.Filter.Title == null || x.Title.Contains(request.Filter.Title)) + .Where(x => request.Filter.Description == null || (x.Description != null && x.Description.Contains(request.Filter.Description))) + .Where(x => request.Filter.IsActive == null || x.IsActive == request.Filter.IsActive) + .Where(x => request.Filter.SortOrder == null || x.SortOrder == request.Filter.SortOrder) +; + } + return new GetAllTagByFilterResponseDto + { + MetaData = await query.GetMetaData(request.PaginationState, cancellationToken), + Models = await query.PaginatedListAsync(paginationState: request.PaginationState) + .ProjectToType().ToListAsync(cancellationToken) + }; + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQueryValidator.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQueryValidator.cs new file mode 100644 index 0000000..35c9137 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterQueryValidator.cs @@ -0,0 +1,15 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetAllTagByFilter; +public class GetAllTagByFilterQueryValidator : AbstractValidator +{ + public GetAllTagByFilterQueryValidator() + { + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetAllTagByFilterQuery)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterResponseDto.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterResponseDto.cs new file mode 100644 index 0000000..2be769a --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetAllTagByFilter/GetAllTagByFilterResponseDto.cs @@ -0,0 +1,25 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetAllTagByFilter; +public class GetAllTagByFilterResponseDto +{ + //متادیتا + public MetaData MetaData { get; set; } + //مدل خروجی + public List? Models { get; set; } + +} +public class GetAllTagByFilterResponseModel +{ + //شناسه + public long Id { get; set; } + //نام لاتین + public string Name { get; set; } + //عنوان + public string Title { get; set; } + //توضیحات + public string? Description { get; set; } + //فعال؟ + public bool IsActive { get; set; } + //ترتیب نمایش + public int SortOrder { get; set; } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQuery.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQuery.cs new file mode 100644 index 0000000..39348a7 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQuery.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetTag; +public record GetTagQuery : IRequest +{ + //شناسه + public long Id { get; init; } + +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQueryHandler.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQueryHandler.cs new file mode 100644 index 0000000..c1c6b8b --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQueryHandler.cs @@ -0,0 +1,23 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetTag; +public class GetTagQueryHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public GetTagQueryHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(GetTagQuery request, + CancellationToken cancellationToken) + { + var response = await _context.Tags + .AsNoTracking() + .Where(x => x.Id == request.Id) + .ProjectToType() + .FirstOrDefaultAsync(cancellationToken); + + return response ?? throw new NotFoundException(nameof(Tag), request.Id); + } +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQueryValidator.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQueryValidator.cs new file mode 100644 index 0000000..d44130f --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagQueryValidator.cs @@ -0,0 +1,17 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetTag; +public class GetTagQueryValidator : AbstractValidator +{ + public GetTagQueryValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetTagQuery)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagResponseDto.cs b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagResponseDto.cs new file mode 100644 index 0000000..f5fad19 --- /dev/null +++ b/src/CMSMicroservice.Application/TagCQ/Queries/GetTag/GetTagResponseDto.cs @@ -0,0 +1,18 @@ +namespace CMSMicroservice.Application.TagCQ.Queries.GetTag; +public class GetTagResponseDto +{ + //شناسه + public long Id { get; set; } + //نام لاتین + public string Name { get; set; } + //عنوان + public string Title { get; set; } + //توضیحات + public string? Description { get; set; } + //فعال؟ + public bool IsActive { get; set; } + //ترتیب نمایش + public int SortOrder { get; set; } + +} + diff --git a/src/CMSMicroservice.Domain/Entities/Products.cs b/src/CMSMicroservice.Domain/Entities/Products.cs index 4eaaee2..8a693c0 100644 --- a/src/CMSMicroservice.Domain/Entities/Products.cs +++ b/src/CMSMicroservice.Domain/Entities/Products.cs @@ -22,4 +22,6 @@ public class Products : BaseAuditableEntity public virtual ICollection FactorDetailss { get; set; } //PruductCategory Collection Navigation Reference public virtual ICollection PruductCategorys { get; set; } + //PruductTag Collection Navigation Reference + public virtual ICollection PruductTags { get; set; } } diff --git a/src/CMSMicroservice.Domain/Entities/PruductTag.cs b/src/CMSMicroservice.Domain/Entities/PruductTag.cs new file mode 100644 index 0000000..1a52201 --- /dev/null +++ b/src/CMSMicroservice.Domain/Entities/PruductTag.cs @@ -0,0 +1,14 @@ +namespace CMSMicroservice.Domain.Entities; +//برچسب محصول +public class PruductTag : BaseAuditableEntity +{ + //شناسه محصول + public string ProductId { get; set; } + //Product Navigation Property + public virtual Products Product { get; set; } + //شناسه تگ + public string TagId { get; set; } + //Tag Navigation Property + public virtual Tag Tag { get; set; } +} + diff --git a/src/CMSMicroservice.Domain/Entities/Tag.cs b/src/CMSMicroservice.Domain/Entities/Tag.cs new file mode 100644 index 0000000..1f687b3 --- /dev/null +++ b/src/CMSMicroservice.Domain/Entities/Tag.cs @@ -0,0 +1,18 @@ +namespace CMSMicroservice.Domain.Entities; +//تگ +public class Tag : BaseAuditableEntity +{ + //نام لاتین + public string Name { get; set; } + //عنوان + public string Title { get; set; } + //توضیحات + public string? Description { get; set; } + //فعال؟ + public bool IsActive { get; set; } + //ترتیب نمایش + public int SortOrder { get; set; } + //PruductTag Collection Navigation Reference + public virtual ICollection PruductTags { get; set; } +} + diff --git a/src/CMSMicroservice.Domain/Events/PruductTagEvents/CreateNewPruductTagEvent.cs b/src/CMSMicroservice.Domain/Events/PruductTagEvents/CreateNewPruductTagEvent.cs new file mode 100644 index 0000000..567f574 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/PruductTagEvents/CreateNewPruductTagEvent.cs @@ -0,0 +1,10 @@ +namespace CMSMicroservice.Domain.Events; +public class CreateNewPruductTagEvent : BaseEvent +{ + public CreateNewPruductTagEvent(PruductTag item) + { + Item = item; + } + public PruductTag Item { get; } +} + diff --git a/src/CMSMicroservice.Domain/Events/PruductTagEvents/DeletePruductTagEvent.cs b/src/CMSMicroservice.Domain/Events/PruductTagEvents/DeletePruductTagEvent.cs new file mode 100644 index 0000000..63f9f84 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/PruductTagEvents/DeletePruductTagEvent.cs @@ -0,0 +1,10 @@ +namespace CMSMicroservice.Domain.Events; +public class DeletePruductTagEvent : BaseEvent +{ + public DeletePruductTagEvent(PruductTag item) + { + Item = item; + } + public PruductTag Item { get; } +} + diff --git a/src/CMSMicroservice.Domain/Events/PruductTagEvents/UpdatePruductTagEvent.cs b/src/CMSMicroservice.Domain/Events/PruductTagEvents/UpdatePruductTagEvent.cs new file mode 100644 index 0000000..6405480 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/PruductTagEvents/UpdatePruductTagEvent.cs @@ -0,0 +1,10 @@ +namespace CMSMicroservice.Domain.Events; +public class UpdatePruductTagEvent : BaseEvent +{ + public UpdatePruductTagEvent(PruductTag item) + { + Item = item; + } + public PruductTag Item { get; } +} + diff --git a/src/CMSMicroservice.Domain/Events/TagEvents/CreateNewTagEvent.cs b/src/CMSMicroservice.Domain/Events/TagEvents/CreateNewTagEvent.cs new file mode 100644 index 0000000..f039af5 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/TagEvents/CreateNewTagEvent.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.Domain.Events; +public class CreateNewTagEvent : BaseEvent +{ + public CreateNewTagEvent(Tag item) + { + Item = item; + } + + public Tag Item { get; } +} + diff --git a/src/CMSMicroservice.Domain/Events/TagEvents/DeleteTagEvent.cs b/src/CMSMicroservice.Domain/Events/TagEvents/DeleteTagEvent.cs new file mode 100644 index 0000000..a620296 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/TagEvents/DeleteTagEvent.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.Domain.Events; +public class DeleteTagEvent : BaseEvent +{ + public DeleteTagEvent(Tag item) + { + Item = item; + } + + public Tag Item { get; } +} + diff --git a/src/CMSMicroservice.Domain/Events/TagEvents/UpdateTagEvent.cs b/src/CMSMicroservice.Domain/Events/TagEvents/UpdateTagEvent.cs new file mode 100644 index 0000000..b2aea89 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/TagEvents/UpdateTagEvent.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.Domain.Events; +public class UpdateTagEvent : BaseEvent +{ + public UpdateTagEvent(Tag item) + { + Item = item; + } + + public Tag Item { get; } +} + diff --git a/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContext.cs b/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContext.cs index 633f76d..7e060a1 100644 --- a/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContext.cs +++ b/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContext.cs @@ -42,7 +42,8 @@ public class ApplicationDbContext : DbContext, IApplicationDbContext public DbSet UserAddresss => Set(); public DbSet Packages => Set(); public DbSet Roles => Set(); - public DbSet Categorys => Set(); + public DbSet Categories => Set(); + public DbSet Tags => Set(); public DbSet UserRoles => Set(); public DbSet UserWallets => Set(); public DbSet UserWalletChangeLogs => Set(); diff --git a/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductCategoryConfiguration.cs b/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductCategoryConfiguration.cs index 43b1e9d..67e85d8 100644 --- a/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductCategoryConfiguration.cs +++ b/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductCategoryConfiguration.cs @@ -13,7 +13,7 @@ public class PruductCategoryConfiguration : IEntityTypeConfiguration entity.Id).UseIdentityColumn(); builder .HasOne(entity => entity.Product) - .WithMany(entity => entity.ProductPruductCategorys) + .WithMany(entity => entity.PruductCategorys) .HasForeignKey(entity => entity.ProductId) .IsRequired(true); builder diff --git a/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductTagConfiguration.cs b/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductTagConfiguration.cs new file mode 100644 index 0000000..ca74c03 --- /dev/null +++ b/src/CMSMicroservice.Infrastructure/Persistence/Configurations/PruductTagConfiguration.cs @@ -0,0 +1,30 @@ +using CMSMicroservice.Domain.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace CMSMicroservice.Infrastructure.Persistence.Configurations; + +//برچسب محصول +public class PruductTagConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasQueryFilter(p => !p.IsDeleted); + builder.Ignore(entity => entity.DomainEvents); + builder.HasKey(entity => entity.Id); + builder.Property(entity => entity.Id).UseIdentityColumn(); + + builder + .HasOne(entity => entity.Product) + .WithMany(entity => entity.PruductTags) + .HasForeignKey(entity => entity.ProductId) + .IsRequired(true); + + builder + .HasOne(entity => entity.Tag) + .WithMany(entity => entity.PruductTags) + .HasForeignKey(entity => entity.TagId) + .IsRequired(true); + } +} + diff --git a/src/CMSMicroservice.Infrastructure/Persistence/Configurations/TagConfiguration.cs b/src/CMSMicroservice.Infrastructure/Persistence/Configurations/TagConfiguration.cs new file mode 100644 index 0000000..312e559 --- /dev/null +++ b/src/CMSMicroservice.Infrastructure/Persistence/Configurations/TagConfiguration.cs @@ -0,0 +1,23 @@ +using CMSMicroservice.Domain.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace CMSMicroservice.Infrastructure.Persistence.Configurations; + +public class TagConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasQueryFilter(p => !p.IsDeleted); + builder.Ignore(entity => entity.DomainEvents); + builder.HasKey(entity => entity.Id); + builder.Property(entity => entity.Id).UseIdentityColumn(); + + builder.Property(entity => entity.Name).IsRequired(true); + builder.Property(entity => entity.Title).IsRequired(true); + builder.Property(entity => entity.Description).IsRequired(false); + builder.Property(entity => entity.IsActive).IsRequired(true); + builder.Property(entity => entity.SortOrder).IsRequired(true); + } +} + diff --git a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj index 1527ae2..6d0176b 100644 --- a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj +++ b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj @@ -39,6 +39,9 @@ + + + diff --git a/src/CMSMicroservice.Protobuf/Protos/pruducttag.proto b/src/CMSMicroservice.Protobuf/Protos/pruducttag.proto new file mode 100644 index 0000000..7961452 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Protos/pruducttag.proto @@ -0,0 +1,99 @@ +syntax = "proto3"; + +package pruducttag; + +import "public_messages.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/wrappers.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "google/api/annotations.proto"; + +option csharp_namespace = "CMSMicroservice.Protobuf.Protos.PruductTag"; + +service PruductTagContract +{ + rpc CreateNewPruductTag(CreateNewPruductTagRequest) returns (CreateNewPruductTagResponse){ + option (google.api.http) = { + post: "/CreateNewPruductTag" + body: "*" + }; + }; + rpc UpdatePruductTag(UpdatePruductTagRequest) returns (google.protobuf.Empty){ + option (google.api.http) = { + put: "/UpdatePruductTag" + body: "*" + }; + }; + rpc DeletePruductTag(DeletePruductTagRequest) returns (google.protobuf.Empty){ + option (google.api.http) = { + delete: "/DeletePruductTag" + body: "*" + }; + }; + rpc GetPruductTag(GetPruductTagRequest) returns (GetPruductTagResponse){ + option (google.api.http) = { + get: "/GetPruductTag" + + }; + }; + rpc GetAllPruductTagByFilter(GetAllPruductTagByFilterRequest) returns (GetAllPruductTagByFilterResponse){ + option (google.api.http) = { + get: "/GetAllPruductTagByFilter" + + }; + }; +} +message CreateNewPruductTagRequest +{ + string product_id = 1; + string tag_id = 2; +} +message CreateNewPruductTagResponse +{ + int64 id = 1; +} +message UpdatePruductTagRequest +{ + int64 id = 1; + string product_id = 2; + string tag_id = 3; +} +message DeletePruductTagRequest +{ + int64 id = 1; +} +message GetPruductTagRequest +{ + int64 id = 1; +} +message GetPruductTagResponse +{ + int64 id = 1; + string product_id = 2; + string tag_id = 3; +} +message GetAllPruductTagByFilterRequest +{ + messages.PaginationState pagination_state = 1; + google.protobuf.StringValue sort_by = 2; + GetAllPruductTagByFilterFilter filter = 3; +} +message GetAllPruductTagByFilterFilter +{ + google.protobuf.Int64Value id = 1; + google.protobuf.StringValue product_id = 2; + google.protobuf.StringValue tag_id = 3; +} +message GetAllPruductTagByFilterResponse +{ + messages.MetaData meta_data = 1; + repeated GetAllPruductTagByFilterResponseModel models = 2; +} +message GetAllPruductTagByFilterResponseModel +{ + int64 id = 1; + string product_id = 2; + string tag_id = 3; +} + diff --git a/src/CMSMicroservice.Protobuf/Protos/tag.proto b/src/CMSMicroservice.Protobuf/Protos/tag.proto new file mode 100644 index 0000000..2de2bca --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Protos/tag.proto @@ -0,0 +1,114 @@ +syntax = "proto3"; + +package tag; + +import "public_messages.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/wrappers.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "google/api/annotations.proto"; + +option csharp_namespace = "CMSMicroservice.Protobuf.Protos.Tag"; + +service TagContract +{ + rpc CreateNewTag(CreateNewTagRequest) returns (CreateNewTagResponse){ + option (google.api.http) = { + post: "/CreateNewTag" + body: "*" + }; + }; + rpc UpdateTag(UpdateTagRequest) returns (google.protobuf.Empty){ + option (google.api.http) = { + put: "/UpdateTag" + body: "*" + }; + }; + rpc DeleteTag(DeleteTagRequest) returns (google.protobuf.Empty){ + option (google.api.http) = { + delete: "/DeleteTag" + body: "*" + }; + }; + rpc GetTag(GetTagRequest) returns (GetTagResponse){ + option (google.api.http) = { + get: "/GetTag" + + }; + }; + rpc GetAllTagByFilter(GetAllTagByFilterRequest) returns (GetAllTagByFilterResponse){ + option (google.api.http) = { + get: "/GetAllTagByFilter" + + }; + }; +} +message CreateNewTagRequest +{ + string name = 1; + string title = 2; + string description = 3; + bool is_active = 4; + int32 sort_order = 5; +} +message CreateNewTagResponse +{ + int64 id = 1; +} +message UpdateTagRequest +{ + int64 id = 1; + string name = 2; + string title = 3; + string description = 4; + bool is_active = 5; + int32 sort_order = 6; +} +message DeleteTagRequest +{ + int64 id = 1; +} +message GetTagRequest +{ + int64 id = 1; +} +message GetTagResponse +{ + int64 id = 1; + string name = 2; + string title = 3; + string description = 4; + bool is_active = 5; + int32 sort_order = 6; +} +message GetAllTagByFilterRequest +{ + messages.PaginationState pagination_state = 1; + google.protobuf.StringValue sort_by = 2; + GetAllTagByFilterFilter filter = 3; +} +message GetAllTagByFilterFilter +{ + google.protobuf.Int64Value id = 1; + google.protobuf.StringValue name = 2; + google.protobuf.StringValue title = 3; + google.protobuf.StringValue description = 4; + google.protobuf.BoolValue is_active = 5; + google.protobuf.Int32Value sort_order = 6; +} +message GetAllTagByFilterResponse +{ + messages.MetaData meta_data = 1; + repeated GetAllTagByFilterResponseModel models = 2; +} +message GetAllTagByFilterResponseModel +{ + int64 id = 1; + string name = 2; + string title = 3; + string description = 4; + bool is_active = 5; + int32 sort_order = 6; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/PruductTag/CreateNewPruductTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/PruductTag/CreateNewPruductTagRequestValidator.cs new file mode 100644 index 0000000..17b9ff8 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/PruductTag/CreateNewPruductTagRequestValidator.cs @@ -0,0 +1,22 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.PruductTag; +namespace CMSMicroservice.Protobuf.Validator.PruductTag; + +public class CreateNewPruductTagRequestValidator : AbstractValidator +{ + public CreateNewPruductTagRequestValidator() + { + RuleFor(model => model.ProductId) + .NotEmpty(); + RuleFor(model => model.TagId) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((CreateNewPruductTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/PruductTag/DeletePruductTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/PruductTag/DeletePruductTagRequestValidator.cs new file mode 100644 index 0000000..db412f8 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/PruductTag/DeletePruductTagRequestValidator.cs @@ -0,0 +1,20 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.PruductTag; +namespace CMSMicroservice.Protobuf.Validator.PruductTag; + +public class DeletePruductTagRequestValidator : AbstractValidator +{ + public DeletePruductTagRequestValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((DeletePruductTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/PruductTag/GetAllPruductTagByFilterRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/PruductTag/GetAllPruductTagByFilterRequestValidator.cs new file mode 100644 index 0000000..d64e0d7 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/PruductTag/GetAllPruductTagByFilterRequestValidator.cs @@ -0,0 +1,18 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.PruductTag; +namespace CMSMicroservice.Protobuf.Validator.PruductTag; + +public class GetAllPruductTagByFilterRequestValidator : AbstractValidator +{ + public GetAllPruductTagByFilterRequestValidator() + { + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetAllPruductTagByFilterRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/PruductTag/GetPruductTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/PruductTag/GetPruductTagRequestValidator.cs new file mode 100644 index 0000000..86ae788 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/PruductTag/GetPruductTagRequestValidator.cs @@ -0,0 +1,20 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.PruductTag; +namespace CMSMicroservice.Protobuf.Validator.PruductTag; + +public class GetPruductTagRequestValidator : AbstractValidator +{ + public GetPruductTagRequestValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetPruductTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/PruductTag/UpdatePruductTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/PruductTag/UpdatePruductTagRequestValidator.cs new file mode 100644 index 0000000..c45defe --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/PruductTag/UpdatePruductTagRequestValidator.cs @@ -0,0 +1,24 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.PruductTag; +namespace CMSMicroservice.Protobuf.Validator.PruductTag; + +public class UpdatePruductTagRequestValidator : AbstractValidator +{ + public UpdatePruductTagRequestValidator() + { + RuleFor(model => model.Id) + .NotNull(); + RuleFor(model => model.ProductId) + .NotEmpty(); + RuleFor(model => model.TagId) + .NotEmpty(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((UpdatePruductTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/Tag/CreateNewTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/Tag/CreateNewTagRequestValidator.cs new file mode 100644 index 0000000..0e6dd0a --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/Tag/CreateNewTagRequestValidator.cs @@ -0,0 +1,24 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.Tag; +namespace CMSMicroservice.Protobuf.Validator.Tag; + +public class CreateNewTagRequestValidator : AbstractValidator +{ + public CreateNewTagRequestValidator() + { + RuleFor(model => model.Name) + .NotEmpty(); + RuleFor(model => model.Title) + .NotEmpty(); + RuleFor(model => model.SortOrder) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((CreateNewTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/Tag/DeleteTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/Tag/DeleteTagRequestValidator.cs new file mode 100644 index 0000000..48f5be9 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/Tag/DeleteTagRequestValidator.cs @@ -0,0 +1,20 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.Tag; +namespace CMSMicroservice.Protobuf.Validator.Tag; + +public class DeleteTagRequestValidator : AbstractValidator +{ + public DeleteTagRequestValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((DeleteTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/Tag/GetAllTagByFilterRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/Tag/GetAllTagByFilterRequestValidator.cs new file mode 100644 index 0000000..5a6f665 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/Tag/GetAllTagByFilterRequestValidator.cs @@ -0,0 +1,18 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.Tag; +namespace CMSMicroservice.Protobuf.Validator.Tag; + +public class GetAllTagByFilterRequestValidator : AbstractValidator +{ + public GetAllTagByFilterRequestValidator() + { + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetAllTagByFilterRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/Tag/GetTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/Tag/GetTagRequestValidator.cs new file mode 100644 index 0000000..314c944 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/Tag/GetTagRequestValidator.cs @@ -0,0 +1,20 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.Tag; +namespace CMSMicroservice.Protobuf.Validator.Tag; + +public class GetTagRequestValidator : AbstractValidator +{ + public GetTagRequestValidator() + { + RuleFor(model => model.Id) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((GetTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.Protobuf/Validator/Tag/UpdateTagRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/Tag/UpdateTagRequestValidator.cs new file mode 100644 index 0000000..47aacc4 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/Tag/UpdateTagRequestValidator.cs @@ -0,0 +1,26 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.Tag; +namespace CMSMicroservice.Protobuf.Validator.Tag; + +public class UpdateTagRequestValidator : AbstractValidator +{ + public UpdateTagRequestValidator() + { + RuleFor(model => model.Id) + .NotNull(); + RuleFor(model => model.Name) + .NotEmpty(); + RuleFor(model => model.Title) + .NotEmpty(); + RuleFor(model => model.SortOrder) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((UpdateTagRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} + diff --git a/src/CMSMicroservice.WebApi/Common/Mappings/PruductTagProfile.cs b/src/CMSMicroservice.WebApi/Common/Mappings/PruductTagProfile.cs new file mode 100644 index 0000000..3f3e78e --- /dev/null +++ b/src/CMSMicroservice.WebApi/Common/Mappings/PruductTagProfile.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.WebApi.Common.Mappings; + +public class PruductTagProfile : IRegister +{ + void IRegister.Register(TypeAdapterConfig config) + { + //config.NewConfig() + // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}"); + } +} + diff --git a/src/CMSMicroservice.WebApi/Common/Mappings/TagProfile.cs b/src/CMSMicroservice.WebApi/Common/Mappings/TagProfile.cs new file mode 100644 index 0000000..4023eba --- /dev/null +++ b/src/CMSMicroservice.WebApi/Common/Mappings/TagProfile.cs @@ -0,0 +1,11 @@ +namespace CMSMicroservice.WebApi.Common.Mappings; + +public class TagProfile : IRegister +{ + void IRegister.Register(TypeAdapterConfig config) + { + //config.NewConfig() + // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}"); + } +} + diff --git a/src/CMSMicroservice.WebApi/Services/PruductTagService.cs b/src/CMSMicroservice.WebApi/Services/PruductTagService.cs new file mode 100644 index 0000000..ce9870d --- /dev/null +++ b/src/CMSMicroservice.WebApi/Services/PruductTagService.cs @@ -0,0 +1,38 @@ +using CMSMicroservice.Protobuf.Protos.PruductTag; +using CMSMicroservice.WebApi.Common.Services; +using CMSMicroservice.Application.PruductTagCQ.Commands.CreateNewPruductTag; +using CMSMicroservice.Application.PruductTagCQ.Commands.UpdatePruductTag; +using CMSMicroservice.Application.PruductTagCQ.Commands.DeletePruductTag; +using CMSMicroservice.Application.PruductTagCQ.Queries.GetPruductTag; +using CMSMicroservice.Application.PruductTagCQ.Queries.GetAllPruductTagByFilter; +namespace CMSMicroservice.WebApi.Services; +public class PruductTagService : PruductTagContract.PruductTagContractBase +{ + private readonly IDispatchRequestToCQRS _dispatchRequestToCQRS; + + public PruductTagService(IDispatchRequestToCQRS dispatchRequestToCQRS) + { + _dispatchRequestToCQRS = dispatchRequestToCQRS; + } + public override async Task CreateNewPruductTag(CreateNewPruductTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task UpdatePruductTag(UpdatePruductTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task DeletePruductTag(DeletePruductTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task GetPruductTag(GetPruductTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task GetAllPruductTagByFilter(GetAllPruductTagByFilterRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } +} + diff --git a/src/CMSMicroservice.WebApi/Services/TagService.cs b/src/CMSMicroservice.WebApi/Services/TagService.cs new file mode 100644 index 0000000..f6225e1 --- /dev/null +++ b/src/CMSMicroservice.WebApi/Services/TagService.cs @@ -0,0 +1,38 @@ +using CMSMicroservice.Protobuf.Protos.Tag; +using CMSMicroservice.WebApi.Common.Services; +using CMSMicroservice.Application.TagCQ.Commands.CreateNewTag; +using CMSMicroservice.Application.TagCQ.Commands.UpdateTag; +using CMSMicroservice.Application.TagCQ.Commands.DeleteTag; +using CMSMicroservice.Application.TagCQ.Queries.GetTag; +using CMSMicroservice.Application.TagCQ.Queries.GetAllTagByFilter; +namespace CMSMicroservice.WebApi.Services; +public class TagService : TagContract.TagContractBase +{ + private readonly IDispatchRequestToCQRS _dispatchRequestToCQRS; + + public TagService(IDispatchRequestToCQRS dispatchRequestToCQRS) + { + _dispatchRequestToCQRS = dispatchRequestToCQRS; + } + public override async Task CreateNewTag(CreateNewTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task UpdateTag(UpdateTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task DeleteTag(DeleteTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task GetTag(GetTagRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } + public override async Task GetAllTagByFilter(GetAllTagByFilterRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } +} +