public static void Handle(FaultException faultException)
        {
            Exception innerException = null;
            if (faultException is FaultException<RecordNotFoundFault>)
            {
                var recordNotFoundFault = faultException as FaultException<RecordNotFoundFault>;
                innerException = new RecordNotFoundException(recordNotFoundFault.Message);
            }
            if (faultException is FaultException<InvalidRecordFault>)
            {
                var invalidRecordFault = faultException as FaultException<InvalidRecordFault>;
                innerException = new InvalidRecordException(invalidRecordFault.Message);
            }

            if (faultException is FaultException<DuplicateRecordFoundFault>)
            {
                var duplicateRecordFault = faultException as FaultException<DuplicateRecordFoundFault>;
                innerException = new DuplicateRecordFoundException(duplicateRecordFault.Message);
            }

            if (innerException == null)
            {
                throw faultException;
            }

            if (innerException == null)
            {
                throw faultException;
            }

            throw new StockException("A exception has occured.",innerException);
        }
        private object PopulateResponse(Exception exception, HttpResponse httpResponse)
        {
            httpResponse.StatusCode = exception switch
            {
                InvalidActionException _ => StatusCodes.Status400BadRequest,
                DuplicateRecordException _ => StatusCodes.Status400BadRequest,
                RecordNotFoundException _ => StatusCodes.Status404NotFound,
                                       _ => StatusCodes.Status500InternalServerError
            };

            if (httpResponse.StatusCode == StatusCodes.Status500InternalServerError)
            {
                _logger.LogError(exception, "Unhandled exception");

                if (!_env.IsDevelopment())
                {
                    return(new
                    {
                        Message = "Unexpected error :("
                    });
                }

                while (exception.InnerException != null)
                {
                    exception = exception.InnerException;
                }
            }

            return(new
            {
                exception.Message
            });
        }
    }
Example #3
0
        public T Find(int recordId, bool errorIfMissing = true)
        {
            using (var db = _db.OpenRead())
            {
                var coll = GetCollection(db);
                T   rec  = default(T);
                try
                {
                    rec = coll.FindById(recordId);
                }
                catch (UnauthorizedAccessException)
                {
                    if (!_db.DbPath.TryGrantEveryoneFullControl())
                    {
                        throw Locked.File(_db.DbPath);
                    }
                }

                if (rec == null && errorIfMissing)
                {
                    throw RecordNotFoundException.For <T>("Id", recordId);
                }

                return(rec);
            }
        }
Example #4
0
        private Response GetResponse(Exception exception)
        {
            var statusCode = exception switch
            {
                InvalidActionException _ => StatusCodes.Status400BadRequest,
                DuplicateRecordException _ => StatusCodes.Status400BadRequest,
                ForbiddenException _ => StatusCodes.Status403Forbidden,
                RecordNotFoundException _ => StatusCodes.Status404NotFound,
                _ => StatusCodes.Status500InternalServerError
            };

            if (statusCode == StatusCodes.Status500InternalServerError)
            {
                _logger.LogError(exception, "Unhandled exception");

                if (!_env.IsDevelopment())
                {
                    return(new Response(statusCode, "Unexpected error :("));
                }

                while (exception.InnerException != null)
                {
                    exception = exception.InnerException;
                }
            }

            return(new Response(statusCode, exception));
        }
Example #5
0
        protected void Application_Error(object sender, EventArgs e)
        {
            Exception exception = Server.GetLastError().GetBaseException();

            HttpException           httpException   = exception as HttpException;
            RecordNotFoundException recordException = exception as RecordNotFoundException;

            if (httpException != null)
            {
                Server.ClearError();
                switch (httpException.GetHttpCode())
                {
                case 404:
                {
                    Response.Redirect("~/home/error?id=404");
                }
                break;

                default:
                {
                    Response.Redirect("~/home/error/");
                }
                break;
                }
            }
            else if (recordException != null)
            {
                Response.Redirect("~/home/error?id=204");
            }
            else
            {
                Response.Redirect("~/home/error/");
            }
        }
Example #6
0
        public void OnException(ExceptionContext context)
        {
            var error = context.Exception switch
            {
                RecordNotFoundException e => new ApiError($"{e.Message} not found"),
                _ => UnknownError(context.Exception),
            };

            context.Result = new JsonResult(error);
        }
Example #7
0
        public DataRow Get(Guid id)
        {
            var row = _databaseGateway.GetSingleRowUsing(_queryFactory.Get(id));

            if (row == null)
            {
                throw RecordNotFoundException.For("Formula", id);
            }

            return(row);
        }
 private static T DefaultOrThrow(string field, BsonValue value, bool errorIfMissing)
 {
     if (errorIfMissing)
     {
         throw RecordNotFoundException.For <T>(field, value);
     }
     else
     {
         return(default(T));
     }
 }
Example #9
0
        public void WithCustomErrorMessage()
        {
            const string entity = "entity";
            const long   key    = 1;

            // Arrange
            var exception = new RecordNotFoundException(entity, key);

            // Assert
            exception.Message.Should().Be($"Entity '{entity}' does not matter with the '{key}' key.");
        }
        public T Find(int recordId, bool errorIfMissing = true)
        {
            using (var db = _db.OpenRead())
            {
                var rec = GetCollection(db).FindById(recordId);

                if (rec == null && errorIfMissing)
                {
                    throw RecordNotFoundException.For <T>("Id", recordId);
                }

                return(rec);
            }
        }
Example #11
0
        private object PopulateResponse(Exception exception, HttpResponse httpResponse)
        {
            httpResponse.StatusCode = exception switch
            {
                InvalidActionException _ => StatusCodes.Status400BadRequest,
                RecordNotFoundException _ => StatusCodes.Status404NotFound,
                                       _ => StatusCodes.Status500InternalServerError
            };

            if (httpResponse.StatusCode == StatusCodes.Status500InternalServerError)
            {
                _logger.LogError(exception, "Unhandled exception");
            }

            return(new
            {
                exception.Message
            });
        }
    }
Example #12
0
        public void InsertUpdateRecord()
        {
            var db = new SimpleDatabase_Accessor("EEE", false);

            db.Initialize();
            const int rowSize = 100;
            var       key1    = new string('1', 36);
            var       key2    = new string('2', 36);
            var       key3    = new string('3', 36);
            var       key4    = new string('4', 36);

            var encoder = new UTF8Encoding();

            var tid = new Transaction();

            db.CreateTable("Inventory.Car", rowSize);
            db.InsertRecord(tid, "Inventory.Car", key1, new Row(rowSize)
            {
                Data = encoder.GetBytes("Seattle, 123")
            });

            var row = db.ReadRecord(tid, "Inventory.Car", key1);

            Assert.AreEqual("Seattle, 123", row.DataString);

            db.InsertRecord(tid, "Inventory.Car", key2, new Row(rowSize)
            {
                Data = encoder.GetBytes("New York, 456")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key1);
            Assert.AreEqual("Seattle, 123", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key2);
            Assert.AreEqual("New York, 456", row.DataString);

            db.InsertRecord(tid, "Inventory.Car", key3, new Row(rowSize)
            {
                Data = encoder.GetBytes("London, 789")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key1);
            Assert.AreEqual("Seattle, 123", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key2);
            Assert.AreEqual("New York, 456", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key3);
            Assert.AreEqual("London, 789", row.DataString);

            db.InsertRecord(tid, "Inventory.Car", key4, new Row(rowSize)
            {
                Data = encoder.GetBytes("Phoenix, 012")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key1);
            Assert.AreEqual("Seattle, 123", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key2);
            Assert.AreEqual("New York, 456", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key3);
            Assert.AreEqual("London, 789", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key4);
            Assert.AreEqual("Phoenix, 012", row.DataString);

            // Update
            db.UpdateRecord(tid, "Inventory.Car", key1, new Row(rowSize)
            {
                Data = encoder.GetBytes("Seattle, key1")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key1);
            Assert.AreEqual("Seattle, key1", row.DataString);

            db.UpdateRecord(tid, "Inventory.Car", key2, new Row(rowSize)
            {
                Data = encoder.GetBytes("New York, key2")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key2);
            Assert.AreEqual("New York, key2", row.DataString);

            db.UpdateRecord(tid, "Inventory.Car", key3, new Row(rowSize)
            {
                Data = encoder.GetBytes("London, key3")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key3);
            Assert.AreEqual("London, key3", row.DataString);

            db.UpdateRecord(tid, "Inventory.Car", key4, new Row(rowSize)
            {
                Data = encoder.GetBytes("Phoenix, key4")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key4);
            Assert.AreEqual("Phoenix, key4", row.DataString);

            db.DeleteRecord(tid, "Inventory.Car", key4);

            RecordNotFoundException exception = null;

            try
            {
                row = db.ReadRecord(tid, "Inventory.Car", key4);
                Assert.Fail();
            }
            catch (RecordNotFoundException e)
            {
                exception = e;
            }
            Assert.IsNotNull(exception);

            row = db.ReadRecord(tid, "Inventory.Car", key1);
            Assert.AreEqual("Seattle, key1", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key2);
            Assert.AreEqual("New York, key2", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key3);
            Assert.AreEqual("London, key3", row.DataString);

            db.InsertRecord(tid, "Inventory.Car", key4, new Row(rowSize)
            {
                Data = encoder.GetBytes("Oregon, 345")
            });

            row = db.ReadRecord(tid, "Inventory.Car", key1);
            Assert.AreEqual("Seattle, key1", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key2);
            Assert.AreEqual("New York, key2", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key3);
            Assert.AreEqual("London, key3", row.DataString);

            row = db.ReadRecord(tid, "Inventory.Car", key4);
            Assert.AreEqual("Oregon, 345", row.DataString);
        }