11using VirtualFinland . UserAPI . Helpers . Configurations ;
22using VirtualFinland . UserAPI . Helpers . Services ;
3+ using VirtualFinland . UserAPI . Data . Repositories ;
4+ using System . Reflection . Metadata ;
35
46namespace VirtualFinland . UserAPI . Helpers ;
57
68public abstract class CodesetsResourceRepository < T >
79{
810 private readonly CodesetsService _codesetsService ;
9- private T ? _resourceCache ; // @TODO: Add caching suitable for AWS Lambda
11+ private ICacheRepository _cacheRepository ;
1012 protected CodesetsResource ? _resource ;
1113
12- public CodesetsResourceRepository ( CodesetsService codesetsService )
14+ public CodesetsResourceRepository ( CodesetsService codesetsService , ICacheRepositoryFactory cacheRepositoryFactory )
1315 {
1416 _codesetsService = codesetsService ;
17+ _cacheRepository = cacheRepositoryFactory . Create ( Constants . Cache . CodesetsPrefix ) ;
1518 }
1619
1720 public async Task < T > GetResource ( CodesetsResource ? resource = null )
1821 {
19- if ( _resourceCache is not null )
22+ var resourceToGet = resource ?? _resource ?? throw new Exception ( "Resource not defined" ) ;
23+
24+ var cacheKey = resourceToGet . ToString ( ) ;
25+ if ( await _cacheRepository . Exists ( cacheKey ) )
2026 {
21- return _resourceCache ;
27+ return await _cacheRepository . Get < T > ( cacheKey ) ;
2228 }
2329
24- var resourceToGet = resource ?? _resource ?? throw new Exception ( "Resource not defined" ) ;
25- _resourceCache = await _codesetsService . GetResource < T > ( resourceToGet ) ;
26- return _resourceCache ;
30+ var resolvedResource = await _codesetsService . GetResource < T > ( resourceToGet ) ;
31+ await _cacheRepository . Set < T > ( cacheKey , resolvedResource , TimeSpan . FromHours ( 24 ) ) ;
32+ return resolvedResource ;
2733 }
2834}
0 commit comments