private StableAPIResponse HandleDELETE <E>(APIGatewayProxyRequest request, StableContext ctx) where E : class { try { string adminCode = Environment.GetEnvironmentVariable("admin_code"); if (adminCode == null || adminCode == "") { throw new InvalidOperationException("admin_code not set on server"); } if (!request.Headers.ContainsKey("admin_code")) { throw new ArgumentException("admin_code is missing"); } if (request.Headers["admin_code"] != adminCode) { throw new UnauthorizedAccessException("Invalid admin_code"); } E obj = JsonConvert.DeserializeObject <E>(request.Body); /* * Gotta wrap DB ops in a transaction * otherwise, if they die in a try catch * it could leave an uncommitted tx on the db * causing problems with future requests * using(var tx = ctx.Database.BeginTransaction()) { * * } */ using (var tx = ctx.Database.BeginTransaction()) { try { //Logger.LogLine(obj.GetType().ToString()); ctx.Remove(obj); //ctx.Attach(obj); //ctx.Remove(obj); //ctx.dates.Remove(ctx.dates.Single(thus => thus.date == date)); int status = ctx.SaveChanges(); tx.Commit(); return(new StableAPIResponse() { Body = JsonConvert.SerializeObject((status == 1)), StatusCode = HttpStatusCode.OK }); } catch (Exception e) { tx.Rollback(); Logger.LogLine(e.ToString()); return(new StableAPIResponse() { Body = JsonConvert.SerializeObject(new Result(e)), StatusCode = HttpStatusCode.InternalServerError }); } } } catch (Exception e) { Logger.LogLine(e.ToString()); return(StableAPIResponse.BadRequest(e)); } }
private StableAPIResponse HandlePUT <E>(APIGatewayProxyRequest request, StableContext ctx, Func <E, IDbContextTransaction, StableAPIResponse> func) where E : class { try { string adminCode = Environment.GetEnvironmentVariable("admin_code"); if (adminCode == null || adminCode == "") { throw new InvalidOperationException("admin_code not set on server"); } if (!request.Headers.ContainsKey("admin_code")) { throw new ArgumentException("admin_code is missing"); } if (request.Headers["admin_code"] != adminCode) { throw new UnauthorizedAccessException("Invalid admin_code"); } E obj = JsonConvert.DeserializeObject <E>(request.Body); using (var tx = ctx.Database.BeginTransaction()) { try { return(func(obj, tx)); var existing = ctx.Attach(obj); ctx.Entry(existing).State = EntityState.Modified; int status = ctx.SaveChanges(); tx.Commit(); return(new StableAPIResponse() { Body = JsonConvert.SerializeObject((status == 1)), StatusCode = HttpStatusCode.OK }); } catch (Exception e) { tx.Rollback(); Logger.LogLine(e.ToString()); return(new StableAPIResponse() { Body = JsonConvert.SerializeObject(new Result(e)), StatusCode = HttpStatusCode.InternalServerError }); } } } catch (Exception e) { Logger.LogLine(e.ToString()); return(StableAPIResponse.BadRequest(e)); } }