public override async Task <EventResponseGetById> GetById(EventRequestGetById request, ServerCallContext context) { string cacheKey = "Event.GetById::" + request.Id.ToString(); bool IsCached = true; Event cacheEntry; var response = new EventResponseGetById(); try { if (!_cache.TryGetValue <Event>(cacheKey, out cacheEntry)) { cacheEntry = await _manager.GetById(request.Id); var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(_cacheTimeInSeconds)); _cache.Set(cacheKey, cacheEntry, cacheEntryOptions); IsCached = false; } response.Event = cacheEntry; response.Success = true; response.Status = RequestCodes.TWO_ZERO_ZERO + ", recived 1 row from " + (IsCached ? Cache.MemoryCache : Cache.Database); response.Error = ""; } catch (Exception e) { response.Success = false; response.Status = RequestCodes.FIVE_ZERO_ZERO; response.Error = e.ToString(); } return(await Task.FromResult <EventResponseGetById>(response)); }
/// <summary> /// TryGetById, Includes (Class, Cause, Effect, Exclude) /// </summary> /// <param name="id"></param> /// <param name="onSuccess"></param> /// <param name="onFail"></param> /// <param name="state"></param> /// <returns></returns> public async Task TryGetById(int id, string includeProperties, Action <Event, string> onSuccess, Action <Exception, string> onFail, CascadingAppStateProvider state) { try { string key = ("causality_Event_trygetbyid_" + id).Replace(" ", "").ToLower(); Event data = new(); bool getFromServer = false; string source = ""; if (state.AppState.UseIndexedDB) { var result = await _indexedDBManager.GetRecordByIndex <string, Blob>(new StoreIndexQuery <string> { Storename = _indexedDBManager.Stores[0].Name, IndexName = "key", QueryValue = key }); if (result is not null) { data = JsonConvert.DeserializeObject <Event>(result.Value); source = "indexedDB"; } else if (await _onlineState.IsOnline()) { getFromServer = true; } else { throw new Exception("No connection"); } } else { getFromServer = true; } if (getFromServer) { EventRequestGetById req = new() { Id = id }; EventResponseGetById ret = await _eventService.GetByIdAsync(req); if (ret.Success) { foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (includeProperty.ToLower().Equals("class")) { ClassRequestGet _req = new() { Filter = "c => c.EventId = " + ret.Event.Id, OrderBy = "Id", Ascending = true }; ClassResponseGet _ret = await _classService.GetAsync(_req); ret.Event.Classes.Add(_ret.Classes); } if (includeProperty.ToLower().Equals("cause")) { CauseRequestGet _req = new() { Filter = "c => c.EventId = " + ret.Event.Id, OrderBy = "Id", Ascending = true }; CauseResponseGet _ret = await _causeService.GetAsync(_req); ret.Event.Causes.Add(_ret.Causes); } if (includeProperty.ToLower().Equals("effect")) { EffectRequestGet _req = new() { Filter = "e => e.EventId = " + ret.Event.Id, OrderBy = "Id", Ascending = true }; EffectResponseGet _ret = await _effectService.GetAsync(_req); ret.Event.Effects.Add(_ret.Effects); } if (includeProperty.ToLower().Equals("exclude")) { ExcludeRequestGet _req = new() { Filter = "e => e.EventId = " + ret.Event.Id, OrderBy = "Id", Ascending = true }; ExcludeResponseGet _ret = await _excludeService.GetAsync(_req); ret.Event.Excludes.Add(_ret.Excludes); } } data = ret.Event; source = ret.Status; if (state.AppState.UseIndexedDB) { await _indexedDBManager.AddRecord(new StoreRecord <Blob> { Storename = "Blobs", Data = new Blob() { Key = key, Value = JsonConvert.SerializeObject(data) } }); } } else { throw new Exception("No connection"); } } onSuccess(data, RequestCodes.TWO_ZERO_ZERO + ", recived 1 record from " + source); } catch (Exception e) { onFail(e, RequestCodes.FIVE_ZERO_ZERO); } }