protected async Task <Option <ResourceResponse> > GetResourceResponse(object data) { var json = JsonConvert.SerializeObject(data); var md5Hash = json.GetMd5Hash(); await using var context = new RelayApiContext(Options); var firstOrDefaultAsync = await context.ResourceConfigData.Where(d => d.Hash == md5Hash).OrderBy(x => x.Id).FirstOrDefaultAsync(); if (firstOrDefaultAsync == null) { return(Option <ResourceResponse> .None); } context.ResourceConfigData.Remove(firstOrDefaultAsync); await context.SaveChangesAsync(); await Task.Delay(firstOrDefaultAsync.DelayInMs); var status = firstOrDefaultAsync.HttpStatusCode ?? Option <HttpStatusCode> .None; var invalidToken = string.IsNullOrWhiteSpace(firstOrDefaultAsync.InvalidToken) ? Option <string> .None : firstOrDefaultAsync.InvalidToken; return(status.Match(s => new ResourceResponse { StatusCode = s, InvalidToken = invalidToken.Match(t => t, () => Option <string> .None) }, () => invalidToken.Match(t => new ResourceResponse { StatusCode = Option <HttpStatusCode> .None, InvalidToken = t }, () => Option <ResourceResponse> .None))); }
protected async Task AddResourceConfig(object data, ResourceHandlerConfiguration resourceHandlerConfigurations) { var json = JsonConvert.SerializeObject(data); var configData = new ResourceConfigData { Hash = json.GetMd5Hash(), DelayInMs = resourceHandlerConfigurations.DelayInMs, HttpStatusCode = resourceHandlerConfigurations.HttpStatusCode, InvalidToken = resourceHandlerConfigurations.InvalidToken, Body = json }; await using var context = new RelayApiContext(Options); await context.ResourceConfigData.AddAsync(configData).ConfigureAwait(false); await context.SaveChangesAsync().ConfigureAwait(false); }