fix(aihitSyncer): неверно разбивались имена приложений при наличии в имени фигурных скобок с перечислением версий. Одна программа рабивалась на несколько строк.

This commit is contained in:
Mikhail Kuznetsov
2024-04-19 15:31:19 +10:00
parent e4671e6068
commit dbf924d2fd

View File

@@ -141,7 +141,7 @@ namespace PARR.AIHITSyncer.Services
if (objFromQuery.APP != null) if (objFromQuery.APP != null)
{ {
var appList = objFromQuery.APP.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.APP);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.APP); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.APP);
@@ -151,7 +151,7 @@ namespace PARR.AIHITSyncer.Services
} }
if (objFromQuery.DB != null) if (objFromQuery.DB != null)
{ {
var appList = objFromQuery.DB.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.DB);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.DB); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.DB);
@@ -161,7 +161,7 @@ namespace PARR.AIHITSyncer.Services
} }
if (objFromQuery.CKBS != null) if (objFromQuery.CKBS != null)
{ {
var appList = objFromQuery.CKBS.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.CKBS);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.CKBS); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.CKBS);
@@ -171,7 +171,7 @@ namespace PARR.AIHITSyncer.Services
} }
if (objFromQuery.IB != null) if (objFromQuery.IB != null)
{ {
var appList = objFromQuery.IB.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.IB);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.IB); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.IB);
@@ -181,7 +181,7 @@ namespace PARR.AIHITSyncer.Services
} }
if (objFromQuery.SI != null) if (objFromQuery.SI != null)
{ {
var appList = objFromQuery.SI.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.SI);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SI); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SI);
@@ -191,7 +191,7 @@ namespace PARR.AIHITSyncer.Services
} }
if (objFromQuery.SM != null) if (objFromQuery.SM != null)
{ {
var appList = objFromQuery.SM.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.SM);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SM); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SM);
@@ -201,7 +201,7 @@ namespace PARR.AIHITSyncer.Services
} }
if (objFromQuery.OS != null) if (objFromQuery.OS != null)
{ {
var appList = objFromQuery.OS.Split(new char[] { ',', ';' }).Distinct().ToList(); var appList = ParseAppsList(objFromQuery.OS);
foreach (var app in appList) foreach (var app in appList)
{ {
var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.OS); var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.OS);
@@ -213,6 +213,24 @@ namespace PARR.AIHITSyncer.Services
} }
private List<string> 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<Application?> CreateAppIfNotExistAsync(string appName, ApplicationTypesEnum type) private async Task<Application?> CreateAppIfNotExistAsync(string appName, ApplicationTypesEnum type)
{ {
if (string.IsNullOrEmpty(appName) || string.IsNullOrWhiteSpace(appName)) return null; if (string.IsNullOrEmpty(appName) || string.IsNullOrWhiteSpace(appName)) return null;