Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 22 additions & 12 deletions src/SentenceStudio.Shared/Data/LearningResourceRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public async Task<int> SaveWordAsync(VocabularyWord word)

int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand Down Expand Up @@ -279,7 +279,7 @@ public async Task<string> SaveResourceAsync(LearningResource resource)

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return resource.Id;
}
Expand All @@ -301,7 +301,7 @@ public async Task<int> DeleteResourceAsync(LearningResource resource)
db.LearningResources.Remove(resource);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand Down Expand Up @@ -409,7 +409,7 @@ public async Task<bool> AddVocabularyToResourceAsync(string resourceId, string v
resource.Vocabulary.Add(vocabularyWord);
await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -443,7 +443,7 @@ public async Task<bool> RemoveVocabularyFromResourceAsync(string resourceId, str
resource.Vocabulary.Remove(vocabularyToRemove);
await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -740,7 +740,7 @@ public async Task<bool> DeleteVocabularyWordAsync(string wordId)

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand All @@ -765,7 +765,7 @@ public async Task<bool> UpdateVocabularyWordAsync(VocabularyWord word)
db.VocabularyWords.Update(word);
await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -796,7 +796,7 @@ public async Task<bool> UpdateVocabularyWordTermsAsync(string wordId, string tar

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -837,7 +837,7 @@ public async Task<bool> BulkAssociateWordsWithResourceAsync(string resourceId, L

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -865,7 +865,7 @@ public async Task<bool> BulkRemoveWordsFromResourceAsync(string resourceId, List
db.ResourceVocabularyMappings.RemoveRange(mappingsToRemove);
await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -902,7 +902,7 @@ public async Task<bool> BulkDeleteVocabularyWordsAsync(List<string> vocabularyWo

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return true;
}
Expand Down Expand Up @@ -1056,9 +1056,19 @@ public async Task<int> MergeVocabularyWordsAsync(string keeperWordId, List<strin
if (deleted > 0)
{
await db.SaveChangesAsync();
_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();
}

return deleted;
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
14 changes: 12 additions & 2 deletions src/SentenceStudio.Shared/Data/ScenarioRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public async Task<int> SaveAsync(ConversationScenario scenario)
}

await db.SaveChangesAsync();
_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

_logger.LogInformation("Saved scenario: {Name} (ID: {Id})", scenario.Name, scenario.Id);
return scenario.Id;
Expand Down Expand Up @@ -182,7 +182,7 @@ public async Task<bool> DeleteAsync(int id)

db.ConversationScenarios.Remove(scenario);
await db.SaveChangesAsync();
_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

_logger.LogInformation("Deleted scenario: {Name} (ID: {Id})", scenario.Name, id);
return true;
Expand All @@ -193,4 +193,14 @@ public async Task<bool> DeleteAsync(int id)
return false;
}
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
14 changes: 12 additions & 2 deletions src/SentenceStudio.Shared/Data/SkillProfileRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public async Task<string> SaveAsync(SkillProfile item)

int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return item.Id;
}
Expand All @@ -95,7 +95,7 @@ public async Task<int> DeleteAsync(SkillProfile item)
db.SkillProfiles.Remove(item);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -119,4 +119,14 @@ public async Task<int> DeleteAsync(SkillProfile item)
var db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
return await db.SkillProfiles.FirstOrDefaultAsync(s => s.Id == skillId);
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
14 changes: 12 additions & 2 deletions src/SentenceStudio.Shared/Data/StoryRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public async Task<int> SaveAsync(Story item)

int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -76,7 +76,7 @@ public async Task<int> DeleteAsync(Story item)
db.Stories.Remove(item);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -86,4 +86,14 @@ public async Task<int> DeleteAsync(Story item)
return -1;
}
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
14 changes: 12 additions & 2 deletions src/SentenceStudio.Shared/Data/StreamHistoryRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public async Task<int> SaveStreamHistoryAsync(StreamHistory streamHistory)

int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -79,7 +79,7 @@ public async Task<int> DeleteStreamHistoryAsync(StreamHistory streamHistory)
db.StreamHistories.Remove(streamHistory);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand Down Expand Up @@ -119,4 +119,14 @@ public async Task<List<StreamHistory>> GetStreamHistoryByVoiceAsync(string voice
.OrderByDescending(h => h.CreatedAt)
.FirstOrDefaultAsync();
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
14 changes: 12 additions & 2 deletions src/SentenceStudio.Shared/Data/UserActivityRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public async Task<int> SaveAsync(UserActivity item)

int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

// PHASE 2 OPTIMIZATION: Invalidate relevant caches (but NOT TodaysPlan!)
// User activities affect vocab summary and practice heat, but not the plan structure
Expand All @@ -110,7 +110,7 @@ public async Task<int> DeleteAsync(UserActivity item)
db.UserActivities.Remove(item);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -120,4 +120,14 @@ public async Task<int> DeleteAsync(UserActivity item)
return -1;
}
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
16 changes: 13 additions & 3 deletions src/SentenceStudio.Shared/Data/UserProfileRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ public async Task<int> SaveAsync(UserProfile item)

int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -328,7 +328,7 @@ public async Task<int> DeleteAsync()
db.UserProfiles.RemoveRange(profiles);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -349,7 +349,7 @@ public async Task<int> DeleteAsync(UserProfile item)
db.UserProfiles.Remove(item);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand Down Expand Up @@ -383,4 +383,14 @@ public async Task SaveDisplayCultureAsync(string culture)
// Also update the LocalizationManager to reflect changes immediately
LocalizationManager.Instance.SetCulture(new CultureInfo(culture));
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public async Task<VocabularyLearningContext> SaveAsync(VocabularyLearningContext

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return item;
}
Expand All @@ -119,7 +119,7 @@ public async Task<int> DeleteAsync(VocabularyLearningContext item)
db.VocabularyLearningContexts.Remove(item);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand All @@ -129,4 +129,14 @@ public async Task<int> DeleteAsync(VocabularyLearningContext item)
return -1;
}
}
private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}

}
14 changes: 12 additions & 2 deletions src/SentenceStudio.Shared/Data/VocabularyProgressRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public async Task<VocabularyProgress> SaveAsync(VocabularyProgress item)

await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return item;
}
Expand All @@ -197,7 +197,7 @@ public async Task<int> DeleteAsync(VocabularyProgress item)
db.VocabularyProgresses.Remove(item);
int result = await db.SaveChangesAsync();

_syncService?.TriggerSyncAsync().ConfigureAwait(false);
TriggerSync();

return result;
}
Expand Down Expand Up @@ -423,6 +423,16 @@ public async Task<Dictionary<string, ResourceProgressAggregation>> GetMultipleRe

return result;
}

private void TriggerSync()
{
if (_syncService is null) return;
_ = Task.Run(async () =>
{
try { await _syncService.TriggerSyncAsync(); }
catch (Exception ex) { _logger.LogError(ex, "Background sync trigger failed"); }
});
}
}

/// <summary>
Expand Down
Loading