示例#1
0
        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));
            }
        }
示例#2
0
        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));
            }
        }