From dbf924d2fd3da0f29427979018b4fd0f9a75a7c7 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Fri, 19 Apr 2024 15:31:19 +1000 Subject: [PATCH] =?UTF-8?q?fix(aihitSyncer):=20=D0=BD=D0=B5=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BD=D0=BE=20=D1=80=D0=B0=D0=B7=D0=B1=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D1=81=D1=8C=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B2=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=20=D1=84=D0=B8=D0=B3?= =?UTF-8?q?=D1=83=D1=80=D0=BD=D1=8B=D1=85=20=D1=81=D0=BA=D0=BE=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=81=20=D0=BF=D0=B5=D1=80=D0=B5=D1=87=D0=B8=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B2=D0=B5=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D0=B9.=20=D0=9E=D0=B4=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20=D1=80=D0=B0=D0=B1=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B0=D1=81=D1=8C=20=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.AIHITSyncer/Services/SyncerService.cs | 32 +++++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/PARR.AIHITSyncer/Services/SyncerService.cs b/PARR.AIHITSyncer/Services/SyncerService.cs index 751f91ac..0ce4c408 100644 --- a/PARR.AIHITSyncer/Services/SyncerService.cs +++ b/PARR.AIHITSyncer/Services/SyncerService.cs @@ -141,7 +141,7 @@ namespace PARR.AIHITSyncer.Services if (objFromQuery.APP != null) { - var appList = objFromQuery.APP.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.APP); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.APP); @@ -151,7 +151,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.DB != null) { - var appList = objFromQuery.DB.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.DB); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.DB); @@ -161,7 +161,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.CKBS != null) { - var appList = objFromQuery.CKBS.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.CKBS); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.CKBS); @@ -171,7 +171,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.IB != null) { - var appList = objFromQuery.IB.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.IB); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.IB); @@ -181,7 +181,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.SI != null) { - var appList = objFromQuery.SI.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.SI); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SI); @@ -191,7 +191,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.SM != null) { - var appList = objFromQuery.SM.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.SM); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SM); @@ -201,7 +201,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.OS != null) { - var appList = objFromQuery.OS.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.OS); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.OS); @@ -213,6 +213,24 @@ namespace PARR.AIHITSyncer.Services } + private List ParseAppsList(string appStr) + { + var regex = new Regex("\\([^)]*\\)"); + + if (regex.IsMatch(appStr)) + foreach (var parenthesis in regex.Matches(appStr)) + { + if (!string.IsNullOrEmpty(parenthesis.ToString())) + { + var newParenthesis = parenthesis.ToString()!.Replace(",", "<|>").Replace(";", "<|>"); + appStr = appStr.Replace(parenthesis!.ToString()!, newParenthesis); + } + } + + return appStr.Split(new char[] { ',', ';' }).Select(a => a.Replace("<|>", ",")).Distinct().ToList(); + } + + private async Task CreateAppIfNotExistAsync(string appName, ApplicationTypesEnum type) { if (string.IsNullOrEmpty(appName) || string.IsNullOrWhiteSpace(appName)) return null;