Skip to content

Instantly share code, notes, and snippets.

@SimonDoy
Created May 24, 2016 20:25
Embed
What would you like to do?
Implementation of InvoiceDatabase object
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
namespace ITSP365.InvoiceFormApp.Api.DataAccess
{
public class InvoiceDatabase
{
private TelemetryClient _telemetryClient = new TelemetryClient();
private string _endPoint;
private string _primaryKey;
private string _databaseName;
private DocumentClient _client = null;
private Database _database;
private static InvoiceDatabase _invoiceDatabase = null;
public HttpStatusCode? Httpstatuscode { get; private set; }
private InvoiceDatabase()
{
}
private InvoiceDatabase(string databaseEndPoint, string primaryKey, string databaseName)
{
_endPoint = databaseEndPoint;
_primaryKey = primaryKey;
_databaseName = databaseName;
}
public static async Task<InvoiceDatabase> GetCurrent(string databaseEndPoint, string primaryKey, string databaseName)
{
if (_invoiceDatabase == null)
{
_invoiceDatabase = new InvoiceDatabase(databaseEndPoint, primaryKey, databaseName);
await _invoiceDatabase.Initialise();
}
return _invoiceDatabase;
}
public Database Database
{
get
{
return _database;
}
}
public DocumentClient Client
{
get
{
return _client;
}
}
private async Task Initialise()
{
var endPointUri = new Uri(_endPoint);
_client = new DocumentClient(endPointUri, _primaryKey, ConnectionPolicy.Default, Microsoft.Azure.Documents.ConsistencyLevel.Session);
_database = await EnsureDatabase();
}
private bool DoesDatabaseExist()
{
var bExists = false;
var database = GetDatabase();
bExists = database != null ? true : false;
return bExists;
}
private async Task<Database> CreateDatabase()
{
Database database = null;
try
{
var databaseStub = new Database{ Id = _databaseName };
database = await this._client.CreateDatabaseAsync(databaseStub).ConfigureAwait(false);
}
catch (Exception)
{
throw;
}
return database;
}
private async Task<Database> GetDatabase()
{
Database database = null;
try
{
var databaseUri = UriFactory.CreateDatabaseUri(_databaseName);
var response = await _client.ReadDatabaseAsync(databaseUri); ;
database = response.Resource;
}
catch (DocumentClientException clientException)
{
if (clientException.StatusCode == HttpStatusCode.NotFound)
{
database = null;
}
else
{
throw;
}
}
catch(Exception ex)
{
throw;
}
return database;
}
private async Task<Database> EnsureDatabase()
{
Database database = null;
try
{
database = await GetDatabase();
if (database==null)
{
database = await CreateDatabase();
}
}
catch (Exception ex)
{
throw;
}
return database;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment