diff --git a/devdocs/todo.txt b/devdocs/todo.txt
index 0a8a93e7..aa0fbb47 100644
--- a/devdocs/todo.txt
+++ b/devdocs/todo.txt
@@ -35,6 +35,10 @@ IMMEDIATE ITEMS:
- Add code to do actual search and return results and routes (tags need support too as per search specs)
- Add tests for searching and routes
+ - EventLogProcessor.AddEntry: CHANGE this to save the context itself and then change all callers to handle that (remove save)
+ - I originally didn't have the save in there because I thought subsequent code might all share in the single context save,
+ however that's impossible as things like the search indexing require a save to harvest id's so it's not actually saving any time just adding complexity
+ where it shouldn't (in the caller)
- Auto visible id number assigning code
- Give widgets a visible ID number scheme and add to tests
diff --git a/server/AyaNova/Controllers/WidgetController.cs b/server/AyaNova/Controllers/WidgetController.cs
index 5dbb6670..05f4db32 100644
--- a/server/AyaNova/Controllers/WidgetController.cs
+++ b/server/AyaNova/Controllers/WidgetController.cs
@@ -210,7 +210,7 @@ namespace AyaNova.Api.Controllers
{
//Log
EventLogProcessor.AddEntry(new Event(biz.userId, o.Id, AyaType.Widget, AyaEvent.Modified), ct);
- Search.ProcessUpdatedObjectKeywords(ct, LocaleIdFromContext.Id(HttpContext.Items), o.Id, AyaType.Widget, o.Name, o.Notes);
+ Search.ProcessUpdatedObjectKeywords(ct, LocaleIdFromContext.Id(HttpContext.Items), o.Id, AyaType.Widget, o.Name, o.Notes, o.Name);
await ct.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
@@ -287,8 +287,11 @@ namespace AyaNova.Api.Controllers
{
//Log
EventLogProcessor.AddEntry(new Event(biz.userId, o.Id, AyaType.Widget, AyaEvent.Modified), ct);
- Search.ProcessUpdatedObjectKeywords(ct, LocaleIdFromContext.Id(HttpContext.Items), o.Id, AyaType.Widget, o.Name, o.Notes);
await ct.SaveChangesAsync();
+
+ //this will save the context as part of it's operations
+ Search.ProcessUpdatedObjectKeywords(ct, LocaleIdFromContext.Id(HttpContext.Items), o.Id, AyaType.Widget, o.Name, o.Notes, o.Name);
+
}
catch (DbUpdateConcurrencyException)
{
@@ -352,9 +355,12 @@ namespace AyaNova.Api.Controllers
//Log now that we have the Id
EventLogProcessor.AddEntry(new Event(biz.userId, o.Id, AyaType.Widget, AyaEvent.Created), ct);
- Search.ProcessNewObjectKeywords(ct, LocaleIdFromContext.Id(HttpContext.Items), o.Id, AyaType.Widget, o.Name, o.Notes);
await ct.SaveChangesAsync();
+ //this will save the context as part of it's operations
+ Search.ProcessNewObjectKeywords(ct, LocaleIdFromContext.Id(HttpContext.Items), o.Id, AyaType.Widget, o.Name, o.Notes, o.Name);
+
+
//return success and link
return CreatedAtAction("GetWidget", new { id = o.Id }, new ApiCreatedResponse(o));
}
@@ -406,9 +412,12 @@ namespace AyaNova.Api.Controllers
//Log
EventLogProcessor.DeleteObject(biz.userId, AyaType.Widget, dbObj.Id, dbObj.Name, ct);
- Search.ProcessDeletedObjectKeywords(ct, dbObj.Id, AyaType.Widget);
await ct.SaveChangesAsync();
+ //This will directly execute and is not part of context for saving purposes
+ Search.ProcessDeletedObjectKeywords(ct, dbObj.Id, AyaType.Widget);
+
+
//Delete children / attached objects
biz.DeleteChildren(dbObj);
diff --git a/server/AyaNova/biz/Search.cs b/server/AyaNova/biz/Search.cs
index 02489597..c7724be5 100644
--- a/server/AyaNova/biz/Search.cs
+++ b/server/AyaNova/biz/Search.cs
@@ -44,16 +44,11 @@ namespace AyaNova.Biz
///
/// Process the keywords into the dictionary
+ /// NOTE: NAME parameter is in ADDITION to the NAME also being on of the strings passed in text parameter
///
private static void ProcessKeywords(AyContext ct, long localeId, long objectID, AyaType objectType, bool newRecord, string name, params string[] text)
{
- //TODO: Code this, using method idea from v7 code and adding the handling of the new InName flag and Name separately.
- //Note that as initially coded in widget test class the context will be saved by the controller as it is also done with the event log
- //So theoretically I don't save here, but it may turn out that the code requires a save so in that case need to re-do the WidgetController calls to here to
- //account for the save
-
-
//IF NOT NEW, DELETE ALL EXISTING ENTRIES FOR OBJECT TYPE AND ID
if (!newRecord)
{
@@ -63,6 +58,9 @@ namespace AyaNova.Biz
//BREAK STRING ARRAY INTO KEYWORD LIST
List KeyWordList = Break(localeId, text);
+ //BREAK NAME STRING
+ List NameKeyWordList = Break(localeId, name);
+
//EARLY EXIT IF NO KEYWORDS OR NAME RECORD TO PROCESS
if (KeyWordList.Count == 0 && string.IsNullOrWhiteSpace(name))
{
@@ -88,16 +86,26 @@ namespace AyaNova.Biz
ct.SearchDictionary.Add(new SearchDictionary() { Word = KeyWord });
}
}
+
//Save the context in order to get the id's of the new words added
ct.SaveChanges();
- //Now add the id's of the newly created words to the matching keyword id list for this object
- foreach (SearchDictionary SD in ct.SearchDictionary.Local)
- {
- MatchingKeywordIdList.Add(SD.Id);
- }
+
+ //Now add the id's of the newly created words to the matching keyword id list for this object
+ //OLD BORING WAY:
+ // foreach (SearchDictionary SD in ct.SearchDictionary.Local)
+ // {
+ // MatchingKeywordIdList.Add(SD.Id);
+ // }
+
+ //Linq all the things! (I'm so clever)
+ MatchingKeywordIdList.AddRange(ct.SearchDictionary.Local.Select(m => m.Id).ToList());
//CREATE THE SEARCHKEY RECORDS FOR ALL THE KEYWORDS
-
+ foreach (long KeyWordId in MatchingKeywordIdList)
+ {
+ if ()
+ ct.SearchDictionary.Add(new SearchKey() { Word = KeyWord });
+ }
}
#endregion