@@ -18,19 +18,21 @@ public class CareerLogService
1818 private readonly IProgramSettings _programSettings ;
1919 private readonly ILeaderSettings _leaderSettings ;
2020 private readonly UserManager < WebAppUser > _userManager ;
21+ private readonly CacheService _cache ;
2122
2223 private List < WebAppUser > _allUsers ;
2324 private List < WebAppUser > AllUsers => _allUsers ??= _userManager . Users . ToList ( ) ;
2425
2526 public CareerLogService ( ICareerLogDatabaseSettings dbSettings , IContractSettings contractSettings ,
2627 ITechTreeSettings techTreeSettings , IProgramSettings programSettings , ILeaderSettings leaderSettings ,
27- UserManager < WebAppUser > userManager )
28+ UserManager < WebAppUser > userManager , CacheService cache )
2829 {
2930 _contractSettings = contractSettings ;
3031 _techTreeSettings = techTreeSettings ;
3132 _programSettings = programSettings ;
3233 _leaderSettings = leaderSettings ;
3334 _userManager = userManager ;
35+ _cache = cache ;
3436
3537 var client = new MongoClient ( dbSettings . ConnectionString ) ;
3638 var database = client . GetDatabase ( dbSettings . DatabaseName ) ;
@@ -39,17 +41,20 @@ public CareerLogService(ICareerLogDatabaseSettings dbSettings, IContractSettings
3941
4042 public async Task < List < CareerLog > > GetAsync ( ODataQueryOptions < CareerLog > queryOptions = null )
4143 {
42- var q = _careerLogs . AsQueryable ( ) ;
44+ List < CareerLog > all = await _cache . FetchAllCareersAsync ( _careerLogs ) ;
4345 if ( queryOptions != null )
4446 {
47+ var q = all . AsQueryable ( ) ;
4548 q = ( IQueryable < CareerLog > ) queryOptions . ApplyTo ( q ,
4649 new ODataQuerySettings
4750 {
4851 HandleNullPropagation = HandleNullPropagationOption . False
4952 } ,
5053 AllowedQueryOptions . Supported ^ AllowedQueryOptions . Filter ) ;
54+ return q . ToList ( ) ;
5155 }
52- return await q . ToListAsync ( ) ;
56+
57+ return all ;
5358 }
5459
5560 public async Task < CareerLog > GetAsync ( string id )
@@ -166,17 +171,10 @@ public async Task<List<ContractEventWithCount>> GetRepeatableContractCompletionC
166171
167172 public async Task < List < ContractRecord > > GetContractRecordsAsync ( ODataQueryOptions < CareerLog > queryOptions = null )
168173 {
169- var q = _careerLogs . AsQueryable ( ) ;
170- if ( queryOptions != null )
171- {
172- q = ( IQueryable < CareerLog > ) queryOptions . ApplyTo ( q , new ODataQuerySettings
173- {
174- HandleNullPropagation = HandleNullPropagationOption . False
175- } ) ;
176- }
174+ var q = ( await GetAsync ( queryOptions ) ) . AsQueryable ( ) ;
177175
178- var result = await q
179- . Where ( c => c . EligibleForRecords )
176+ var result = q
177+ . Where ( c => c . EligibleForRecords && c . ContractEventEntries != null )
180178 . SelectMany ( c => c . ContractEventEntries , ( c , e ) => new
181179 {
182180 CareerId = c . Id ,
@@ -198,7 +196,7 @@ public async Task<List<ContractRecord>> GetContractRecordsAsync(ODataQueryOption
198196 Date = g . Min ( e => e . EventDate )
199197 } )
200198 . OrderBy ( c => c . Date )
201- . ToListAsync ( ) ;
199+ . ToList ( ) ;
202200
203201 result . ForEach ( r =>
204202 {
@@ -211,17 +209,10 @@ public async Task<List<ContractRecord>> GetContractRecordsAsync(ODataQueryOption
211209
212210 public async Task < List < ProgramRecord > > GetProgramRecordsAsync ( ProgramRecordType type , ODataQueryOptions < CareerLog > queryOptions = null )
213211 {
214- var q = _careerLogs . AsQueryable ( ) ;
215- if ( queryOptions != null )
216- {
217- q = ( IQueryable < CareerLog > ) queryOptions . ApplyTo ( q , new ODataQuerySettings
218- {
219- HandleNullPropagation = HandleNullPropagationOption . False
220- } ) ;
221- }
212+ var q = ( await GetAsync ( queryOptions ) ) . AsQueryable ( ) ;
222213
223214 var allPrograms = q
224- . Where ( c => c . EligibleForRecords )
215+ . Where ( c => c . EligibleForRecords && c . Programs != null )
225216 . SelectMany ( c => c . Programs , ( c , p ) => new ProgramRecord
226217 {
227218 CareerId = c . Id ,
@@ -237,7 +228,7 @@ public async Task<List<ProgramRecord>> GetProgramRecordsAsync(ProgramRecordType
237228 allPrograms = allPrograms . Where ( p => p . Date . HasValue ) ;
238229 }
239230
240- var result = await allPrograms . OrderBy ( p => p . Date )
231+ var result = allPrograms . OrderBy ( p => p . Date )
241232 . GroupBy ( p => p . ProgramName )
242233 . Select ( g => new ProgramRecord
243234 {
@@ -248,7 +239,7 @@ public async Task<List<ProgramRecord>> GetProgramRecordsAsync(ProgramRecordType
248239 Date = g . Min ( p => p . Date )
249240 } )
250241 . OrderBy ( c => c . Date )
251- . ToListAsync ( ) ;
242+ . ToList ( ) ;
252243
253244 result . ForEach ( r =>
254245 {
@@ -261,17 +252,10 @@ public async Task<List<ProgramRecord>> GetProgramRecordsAsync(ProgramRecordType
261252
262253 public async Task < List < ProgramItemWithCareerInfo > > GetProgramRecordsAsync ( ProgramRecordType type , string program , ODataQueryOptions < CareerLog > queryOptions = null )
263254 {
264- var q = _careerLogs . AsQueryable ( ) ;
265- if ( queryOptions != null )
266- {
267- q = ( IQueryable < CareerLog > ) queryOptions . ApplyTo ( q , new ODataQuerySettings
268- {
269- HandleNullPropagation = HandleNullPropagationOption . False
270- } ) ;
271- }
255+ var q = ( await GetAsync ( queryOptions ) ) . AsQueryable ( ) ;
272256
273257 var allPrograms = q
274- . Where ( c => c . EligibleForRecords )
258+ . Where ( c => c . EligibleForRecords && c . Programs != null )
275259 . SelectMany ( c => c . Programs , ( c , p ) => new ProgramItemWithCareerInfo
276260 {
277261 CareerId = c . Id ,
@@ -298,10 +282,10 @@ public async Task<List<ProgramItemWithCareerInfo>> GetProgramRecordsAsync(Progra
298282 allPrograms = allPrograms . Where ( p => p . Completed . HasValue ) ;
299283 }
300284
301- var result = await allPrograms
285+ var result = allPrograms
302286 . OrderBy ( c => type == ProgramRecordType . Accepted ? c . Accepted :
303287 type == ProgramRecordType . ObjectivesCompleted ? c . ObjectivesCompleted : c . Completed )
304- . ToListAsync ( ) ;
288+ . ToList ( ) ;
305289
306290 result . ForEach ( r =>
307291 {
@@ -607,6 +591,7 @@ public async Task<CareerLog> CreateAsync(CareerLog log)
607591 careerLog . LaunchEventEntries = log . LaunchEventEntries ;
608592
609593 await _careerLogs . InsertOneAsync ( careerLog ) ;
594+ await _cache . InvalidateAsync ( ) ;
610595
611596 return careerLog ;
612597 }
@@ -645,7 +630,9 @@ public async Task<CareerLog> UpdateAsync(string token, CareerLogDto careerLogDto
645630 . Set ( nameof ( CareerLog . Leaders ) , leaders ) ;
646631 var opts = new FindOneAndUpdateOptions < CareerLog > { ReturnDocument = ReturnDocument . After } ;
647632
648- return await _careerLogs . FindOneAndUpdateAsync ( entry => entry . Token == token , updateDef , opts ) ;
633+ var res = await _careerLogs . FindOneAndUpdateAsync ( entry => entry . Token == token , updateDef , opts ) ;
634+ await _cache . InvalidateAsync ( ) ;
635+ return res ;
649636 }
650637
651638 public async Task < CareerLog > GetByTokenAsync ( string token )
@@ -656,6 +643,7 @@ public async Task<CareerLog> GetByTokenAsync(string token)
656643 public async Task DeleteByTokenAsync ( string token )
657644 {
658645 await _careerLogs . DeleteOneAsync ( entry => entry . Token == token ) ;
646+ await _cache . InvalidateAsync ( ) ;
659647 }
660648
661649 public async Task < CareerLog > UpdateMetaByTokenAsync ( string token , string careerName , CareerLogMeta meta )
@@ -664,15 +652,19 @@ public async Task<CareerLog> UpdateMetaByTokenAsync(string token, string careerN
664652 . Set ( nameof ( CareerLog . Name ) , careerName ) ;
665653 var opts = new FindOneAndUpdateOptions < CareerLog > { ReturnDocument = ReturnDocument . After } ;
666654
667- return await _careerLogs . FindOneAndUpdateAsync ( entry => entry . Token == token , updateDefinition , opts ) ;
655+ var res = await _careerLogs . FindOneAndUpdateAsync ( entry => entry . Token == token , updateDefinition , opts ) ;
656+ await _cache . InvalidateAsync ( ) ;
657+ return res ;
668658 }
669659
670660 public async Task < CareerLog > UpdateRaceAsync ( string careerId , string race )
671661 {
672662 var updateDefinition = Builders < CareerLog > . Update . Set ( nameof ( CareerLog . Race ) , race ) ;
673663 var opts = new FindOneAndUpdateOptions < CareerLog > { ReturnDocument = ReturnDocument . After } ;
674664
675- return await _careerLogs . FindOneAndUpdateAsync ( entry => entry . Id == careerId , updateDefinition , opts ) ;
665+ var res = await _careerLogs . FindOneAndUpdateAsync ( entry => entry . Id == careerId , updateDefinition , opts ) ;
666+ await _cache . InvalidateAsync ( ) ;
667+ return res ;
676668 }
677669
678670 public async Task UpdateLaunchAsync ( string careerId , LaunchEvent launch )
@@ -682,6 +674,7 @@ public async Task UpdateLaunchAsync(string careerId, LaunchEvent launch)
682674 var updateDef = Builders < CareerLog > . Update . Set ( c => c . LaunchEventEntries . FirstMatchingElement ( ) , launch ) ;
683675
684676 await _careerLogs . FindOneAndUpdateAsync ( filterDef , updateDef ) ;
677+ await _cache . InvalidateAsync ( ) ;
685678 }
686679
687680 private string ResolveContractName ( string name )
0 commit comments