Forked from davidwhitney/CouchDb quickstart example
Created
October 31, 2016 01:11
-
-
Save tariqhamid/8721abdb94ae18a6bc2d6298a2001f15 to your computer and use it in GitHub Desktop.
CouchDb quickstart example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Web.Mvc; | |
using Divan; | |
using Newtonsoft.Json; | |
namespace CouchTest.Controllers | |
{ | |
[HandleError] | |
public class HomeController : Controller | |
{ | |
public ActionResult Index() | |
{ | |
const string host = "localhost"; | |
const int port = 5984; | |
var server = new CouchServer(host, port); | |
var db = server.GetDatabase("myfirstdatabase"); | |
var document = new SomeRandomAggregateRoot | |
{This = "Is cool!", Subclass = new SomeRandomClass {IsAwesome = "hell yeah!"}}; | |
using (var couchRepo = new CouchRepository<SomeRandomAggregateRoot>(db)) | |
{ | |
var id = couchRepo.Save(document); | |
var returnedCouchDoc = couchRepo.Retrieve(id); | |
ViewData["Message"] = returnedCouchDoc._id; | |
} | |
return View(); | |
} | |
public ActionResult About() | |
{ | |
return View(); | |
} | |
} | |
public class CouchRepository<T> : CouchRepository where T : CouchAggregateRoot | |
{ | |
public CouchRepository(ICouchDatabase couchDatabase):base(couchDatabase) | |
{ | |
} | |
public T Retrieve(string id) | |
{ | |
return Retrieve<T>(id); | |
} | |
public string Save(T @object) | |
{ | |
return Save<T>(@object); | |
} | |
} | |
public class CouchRepository: IDisposable | |
{ | |
protected readonly ICouchDatabase CouchDatabase; | |
public CouchRepository(ICouchDatabase couchDatabase) | |
{ | |
CouchDatabase = couchDatabase; | |
} | |
public string Save<T>(T @object) where T : CouchAggregateRoot | |
{ | |
var couchDocument = new CouchDocumentWrapper<T>(@object); | |
CouchDatabase.SaveDocument(couchDocument); | |
return couchDocument.Id; | |
} | |
public T Retrieve<T>(string id) where T : CouchAggregateRoot | |
{ | |
var rawDocument = CouchDatabase.GetDocument(id); | |
var @object = JsonConvert.DeserializeObject<T>(rawDocument.ToString()); | |
@object._id = rawDocument.Id; | |
@object._rev = rawDocument.Rev; | |
return @object; | |
} | |
public void Dispose() | |
{ | |
// Should probably get round to implementing this... | |
} | |
} | |
public class CouchAggregateRoot : ICouchAggregateRoot | |
{ | |
public string _id { get; set; } | |
public string _rev { get; set; } | |
} | |
public interface ICouchAggregateRoot | |
{ | |
string _id { get; set; } | |
string _rev { get; set; } | |
} | |
public class SomeRandomAggregateRoot : CouchAggregateRoot | |
{ | |
public string This { get; set; } | |
public SomeRandomClass Subclass { get; set; } | |
} | |
public class SomeRandomClass | |
{ | |
public string IsAwesome { get; set; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment