This commit is contained in:
2020-06-05 19:33:05 +00:00
parent ac3bfb50bf
commit 4e73531145
4 changed files with 52 additions and 112 deletions

View File

@@ -681,67 +681,6 @@ namespace AyaNova.Biz
#region Breaker #region Breaker
// //Class to hold relevant translation data for breaking text
// public class TranslationWordBreakingData
// {
// public bool CJKIndex { get; set; }
// public List<string> StopWords { get; set; }
// public TranslationWordBreakingData()
// {
// CJKIndex = false;
// StopWords = new List<string>();
// }
// }
// private static Dictionary<long, TranslationWordBreakingData> translationWordBreakingDataCache = new Dictionary<long, TranslationWordBreakingData>();
// //called at startup to populate cache
//WAS GOING TO ADD THIS IN RESPONSE TO AN ISSUE WITH EXCEPTION ATTEMPTING TO ADD ALREADY EXISTING DICTIONARY ID 1, BUT IT NEVER HAPPENED AGAIN, SO :SHRUGEMOJI:
//IF IT DOES, MAKE THIS CODE AND POPULATE IT AT SERVER BOOT AND SHOULD BE ADEQUATE
//OR GO NUTS WITH A FULL MEMORY CACHE: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-3.1
// internal static async Task CacheAllTranslationWordBreakingData(){
// //iterate all Translations, cache the word break data
// l = await ct.Translation
// .AsNoTracking()
// .OrderBy(z => z.Name)
// .Select(z => new NameIdItem()
// {
// Id = z.Id,
// Name = z.Name
// }).ToListAsync();
// TranslationWordBreakingDataCache.Add(TranslationId, await GetTranslationSearchDataAsync(TranslationId));
// }
// internal static async Task<TranslationWordBreakingData> GetTranslationSearchDataAsync(long translationId, AyContext ct = null)
// {
// TranslationWordBreakingData LSD = new TranslationWordBreakingData();
// if (ct == null)
// ct = ServiceProviderProvider.DBContext;
// //Get stopwords
// //Validate translation id, if not right then use default instead
// var Param = new List<string>();
// translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct);
// Param.Add("StopWords1");
// Param.Add("StopWords2");
// Param.Add("StopWords3");
// Param.Add("StopWords4");
// Param.Add("StopWords5");
// Param.Add("StopWords6");
// Param.Add("StopWords7");
// var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId);
// foreach (KeyValuePair<string, string> kvp in Stops)
// {
// //Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark
// if (kvp.Value != "?")
// {
// LSD.StopWords.AddRange(kvp.Value.Split(" "));
// }
// }
// LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct);
// return LSD;
// }
public enum TokenTypes public enum TokenTypes
{ Nothing, Separator, CJK, Latin }; { Nothing, Separator, CJK, Latin };

View File

@@ -31,30 +31,32 @@ namespace AyaNova.Biz
internal static async Task<TranslationWordBreakingData> GetTranslationSearchDataAsync(long translationId) internal static async Task<TranslationWordBreakingData> GetTranslationSearchDataAsync(long translationId)
{ {
TranslationWordBreakingData LSD = new TranslationWordBreakingData(); TranslationWordBreakingData LSD = new TranslationWordBreakingData();
AyContext ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
//Get stopwords
//Validate translation id, if not right then use default instead
var Param = new List<string>();
translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct);
Param.Add("StopWords1");
Param.Add("StopWords2");
Param.Add("StopWords3");
Param.Add("StopWords4");
Param.Add("StopWords5");
Param.Add("StopWords6");
Param.Add("StopWords7");
var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId);
foreach (KeyValuePair<string, string> kvp in Stops)
{ {
//Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark //Get stopwords
if (kvp.Value != "?") //Validate translation id, if not right then use default instead
{ var Param = new List<string>();
LSD.StopWords.AddRange(kvp.Value.Split(" ")); translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct);
} Param.Add("StopWords1");
} Param.Add("StopWords2");
Param.Add("StopWords3");
Param.Add("StopWords4");
Param.Add("StopWords5");
Param.Add("StopWords6");
Param.Add("StopWords7");
var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId);
LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct); foreach (KeyValuePair<string, string> kvp in Stops)
{
//Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark
if (kvp.Value != "?")
{
LSD.StopWords.AddRange(kvp.Value.Split(" "));
}
}
LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct);
}
return LSD; return LSD;
} }

View File

@@ -164,20 +164,19 @@ namespace AyaNova.Biz
#if (DEBUG) #if (DEBUG)
TrackRequestedKey(param); TrackRequestedKey(param);
#endif #endif
AyContext ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
{
if (!await ct.Translation.AnyAsync(e => e.Id == translationId)) if (!await ct.Translation.AnyAsync(e => e.Id == translationId))
translationId = ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID; translationId = ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID;
var ret = await ct.TranslationItem.Where(z => z.TranslationId == translationId && param.Contains(z.Key)).AsNoTracking().ToDictionaryAsync(z => z.Key, z => z.Display); var ret = await ct.TranslationItem.Where(z => z.TranslationId == translationId && param.Contains(z.Key)).AsNoTracking().ToDictionaryAsync(z => z.Key, z => z.Display);
return ret; return ret;
}
} }
//Get the CJKIndex value for the translation specified //Get the CJKIndex value for the translation specified
internal static async Task<bool> GetCJKIndexAsync(long translationId, AyContext ct = null) internal static async Task<bool> GetCJKIndexAsync(long translationId, AyContext ct)
{ {
if (ct == null)
ct = ServiceProviderProvider.DBContext;
var ret = await ct.Translation.Where(z => z.Id == translationId).AsNoTracking().Select(z => z.CjkIndex).SingleOrDefaultAsync(); var ret = await ct.Translation.Where(z => z.Id == translationId).AsNoTracking().Select(z => z.CjkIndex).SingleOrDefaultAsync();
return ret; return ret;
} }
@@ -195,15 +194,15 @@ namespace AyaNova.Biz
#if (DEBUG) #if (DEBUG)
TrackRequestedKey(key); TrackRequestedKey(key);
#endif #endif
AyContext ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
return await ct.TranslationItem.Where(z => z.TranslationId == ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID && z.Key == key).Select(z => z.Display).AsNoTracking().FirstOrDefaultAsync(); return await ct.TranslationItem.Where(z => z.TranslationId == ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID && z.Key == key).Select(z => z.Display).AsNoTracking().FirstOrDefaultAsync();
} }
//Get all stock keys that are valid (used for key coverage reporting) //Get all stock keys that are valid (used for key coverage reporting)
internal static async Task<List<string>> GetKeyListAsync() internal static async Task<List<string>> GetKeyListAsync()
{ {
AyContext ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
return await ct.TranslationItem.Where(z => z.TranslationId == 1).OrderBy(z => z.Key).Select(z => z.Key).AsNoTracking().ToListAsync(); return await ct.TranslationItem.Where(z => z.TranslationId == 1).OrderBy(z => z.Key).Select(z => z.Key).AsNoTracking().ToListAsync();
} }
@@ -392,15 +391,14 @@ namespace AyaNova.Biz
return v.Id; return v.Id;
} }
public static async Task<long> TranslationNameToIdStaticAsync(string translationName, AyContext ct = null) public static async Task<long> TranslationNameToIdStaticAsync(string translationName)
{ {
if (ct == null) using (AyContext ct = ServiceProviderProvider.DBContext)
{ {
ct = ServiceProviderProvider.DBContext; var v = await ct.Translation.AsNoTracking().FirstOrDefaultAsync(z => z.Name == translationName);
if (v == null) return ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID;
return v.Id;
} }
var v = await ct.Translation.AsNoTracking().FirstOrDefaultAsync(z => z.Name == translationName);
if (v == null) return ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID;
return v.Id;
} }
public async Task<bool> TranslationExistsAsync(string translationName) public async Task<bool> TranslationExistsAsync(string translationName)

View File

@@ -31,12 +31,13 @@ namespace AyaNova.Biz
//This is where active tech license consumers are accounted for //This is where active tech license consumers are accounted for
internal static async Task<long> ActiveCountAsync() internal static async Task<long> ActiveCountAsync()
{ {
var ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
var ret = await ct.User.Where(z => z.Active == true && ( {
z.UserType == UserType.Service || var ret = await ct.User.AsNoTracking().Where(z => z.Active == true && (
z.UserType == UserType.ServiceContractor)).LongCountAsync(); z.UserType == UserType.Service ||
z.UserType == UserType.ServiceContractor)).LongCountAsync();
return ret; return ret;
}
} }
internal static UserBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null) internal static UserBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null)