public async Task <IActionResult> Post([FromBody] Letterhead letterhead)
 {
     if (ModelState.IsValid)
     {
         try
         {
             await _letterheadsDataAccess.SaveLetterheadAsync(letterhead);
         }
         catch (JsonException JEX)
         {
             return(BadRequest(JEX.Message));
         }
         catch (DataAccessException DAX)
         {
             return(StatusCode(500, DAX.Message));
         }
         catch (Exception EX)
         {
             return(StatusCode(500, EX.Message));
         }
         return(Created("", letterhead));
     }
     else
     {
         return(BadRequest(ModelState));
     }
 }
        public async Task <List <Letterhead> > GetAllLetterheadsAsync()
        {
            List <Letterhead> LetterheadList = new List <Letterhead>();

            try
            {
                var dynamoConfig = new AmazonDynamoDBConfig();
                dynamoConfig.RegionEndpoint = Amazon.RegionEndpoint.USWest2;
                using (var dynamoClient = new AmazonDynamoDBClient(dynamoConfig))
                {
                    var             table        = Table.LoadTable(dynamoClient, "HeaderMaster");
                    ScanFilter      scanFilter   = new ScanFilter();
                    Search          search       = table.Scan(scanFilter);
                    List <Document> documentList = new List <Document>();
                    do
                    {
                        documentList = await search.GetNextSetAsync(default(CancellationToken));

                        foreach (var document in documentList)
                        {
                            Letterhead letterhead = new Letterhead();
                            try
                            {
                                letterhead = JsonConvert.DeserializeObject <Letterhead>(document.ToJson());
                                LetterheadList.Add(letterhead);
                            }
                            catch (JsonException jEx)
                            {
                                _log.LogError("Json Deserialization Exception: " + jEx.Message);
                                throw new DataAccessException("An Error Occured While Retrieving Letterhead List From Database");
                            }
                        }
                    } while(!search.IsDone);
                }
            }
            catch (AmazonDynamoDBException dEx)
            {
                _log.LogError("Amazon DynamoDB Exception: " + dEx.Message);
                throw new DataAccessException("An Error Occured While Retrieving Letterhead List From Database");
            }
            catch (AmazonServiceException sEx)
            {
                _log.LogError("Amazon Service Exception: " + sEx.Message);
                throw new DataAccessException("An Error Occured While Retrieving Letterhead List From Database");
            }
            catch (AmazonClientException cEx)
            {
                _log.LogError("Amazon Client Exception: " + cEx.Message);
                throw new DataAccessException("An Error Occured While Retrieving Letterhead List From Database");
            }
            catch (Exception uEx)
            {
                _log.LogError("Unhandled Exception:  " + uEx.Message);
                throw new DataAccessException("An Unknown Error Occured");
            }
            return(LetterheadList);
        }
        public async Task <Letterhead> GetLetterheadAsync(string chamberName)
        {
            var        _letterhead     = (Document)null;
            var        _letterheadJson = (string)null;
            Letterhead letterhead      = null;

            try
            {
                var dynamoConfig = new AmazonDynamoDBConfig();
                dynamoConfig.RegionEndpoint = Amazon.RegionEndpoint.USWest2;
                using (var dynamoClient = new AmazonDynamoDBClient(dynamoConfig))
                {
                    var table = Table.LoadTable(dynamoClient, "HeaderMaster");
                    _letterhead = await table.GetItemAsync(chamberName, default(CancellationToken));

                    if (_letterhead != null)
                    {
                        _letterheadJson = _letterhead.ToJson();
                    }
                }
                if (_letterheadJson != null)
                {
                    try
                    {
                        letterhead = JsonConvert.DeserializeObject <Letterhead>(_letterheadJson);
                    }
                    catch (JsonException jEx)
                    {
                        _log.LogError("Json Deserialization Exception: " + jEx.Message);
                        throw new DataAccessException("An Error Occured While Retrieving Letterhead From Database");
                    }
                }
            }
            catch (AmazonDynamoDBException dEx)
            {
                _log.LogError("Amazon DynamoDB Exception: " + dEx.Message);
                throw new DataAccessException("An Error Occured While Retrieving Letterhead From Database");
            }
            catch (AmazonServiceException sEx)
            {
                _log.LogError("Amazon Service Exception: " + sEx.Message);
                throw new DataAccessException("An Error Occured While Retrieving Letterhead From Database");
            }
            catch (AmazonClientException cEx)
            {
                _log.LogError("Amazon Client Exception: " + cEx.Message);
                throw new DataAccessException("An Error Occured While Retrieving Letterhead From Database");
            }
            catch (Exception uEx)
            {
                _log.LogError("Unhandled Exception:  " + uEx.Message);
                throw new DataAccessException("An Unknown Error Occured");
            }
            return(letterhead);
        }
        public async Task SaveLetterheadAsync(Letterhead letterhead)
        {
            var _letterheadJson = (string)null;

            try
            {
                _letterheadJson = JsonConvert.SerializeObject(letterhead);
            }
            catch (JsonException jEx)
            {
                throw jEx;
            }
            Document document = null;

            try
            {
                var dynamoConfig = new AmazonDynamoDBConfig();
                dynamoConfig.RegionEndpoint = Amazon.RegionEndpoint.USWest2;
                using (var dynamoClient = new AmazonDynamoDBClient(dynamoConfig))
                {
                    var table = Table.LoadTable(dynamoClient, "HeaderMaster");
                    var pItem = Document.FromJson(_letterheadJson);
                    document = await table.PutItemAsync(pItem, default(CancellationToken));
                }
            }
            catch (AmazonDynamoDBException dEx)
            {
                _log.LogError("Amazon DynamoDB Exception: " + dEx.Message);
                throw new DataAccessException("An Error Occured While Saving Letterhead To Database");
            }
            catch (AmazonServiceException sEx)
            {
                _log.LogError("Amazon Service Exception: " + sEx.Message);
                throw new DataAccessException("An Error Occured While Saving Letterhead To Database");
            }
            catch (AmazonClientException cEx)
            {
                _log.LogError("Amazon Client Exception: " + cEx.Message);
                throw new DataAccessException("An Error Occured While Saving Letterhead To Database");
            }
            catch (Exception uEx)
            {
                _log.LogError("Unhandled Exception:  " + uEx.Message);
                throw new DataAccessException("An Unknown Error Occured");
            }
            return;
        }