Skip to content

fulviocanducci/CanducciDocumentDB

Repository files navigation

Canducci DocumentDB Repository

NuGet Badge

Canducci Excel

Instalação:

A instalação pode ser feito pelo Package Manager Console

PM> Install-Package CanducciDocumentDB

ou então Nuget

Configurações:

Configure a classe ConnectionDocumentDB que tem um construtor com três paramentros:

  • url
  • key
  • database
Código:
string url = "https://localhost:8081/";
string key = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
string database = "database";
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);

Apos configurar a classe, precisamos criar uma classe que represente o modelo da coleção e sua respectiva classe respository.

Código modelo para coleção:
public class Credit
{
    [JsonProperty(PropertyName = "id")]
    public string Id { get; set; }

    [JsonProperty(PropertyName = "description")]
    [Required(ErrorMessage = "Digite a descrição ...")]
    public string Description { get; set; }
}

Observação: a classe Credit foi decorada com JsonProperty atributo que vem do pacote Newtonsoft.Json, item já instalado quando é instalado esse pacote Canducci DocumentDB

Código da Repository:

A classe abstract RepositoryCreditAbstract que herda de Repository e IRepository como contrato, tem um construtor com a classe ConnectionDocumentDB db e é chamado a sua base para a passagem da variável db e o nome da coleção que no caso é credit.

public abstract class RepositoryCreditAbstract: Repository<Credit>, IRepository<Credit>
{
    public RepositoryCreditAbstract(ConnectionDocumentDB db)
        : base(db, "credit")
    {
    }
}

A classe concret RepositoryCredit herda de RepositoryCreditAbstract e também possui um construtor com a classe ConnectionDocumentDB db e chama a sua base para a passagem da variável db, não precisando passar o segundo parametro ato feito na classe abstract RepositoryCreditAbstract.

public class RepositoryCredit: RepositoryCreditAbstract
{
    public RepositoryCredit(ConnectionDocumentDB db)
        : base(db)
    {
    }
} 

Com a codificação dessas classes, permite a gravação dessa coleção configurada (vale lembrar que a criação do DatabaseId e CollectionId e manual, então, entre no Azure e configure essas duas informações), onde a estrutura possui os seguintes métodos:

  • Inserir coleção
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);
Credit credit = new Credit { Description = "Matemática" };
credit = await rep.InsertAsync(credit);
  • Atualizar coleção
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);

Credit credit = await rep.FindAsync("d70e21fd-b9e3-430b-a934-778ce3a871b3");
credit.Description = "História";
await rep.UpdateAsync(credit);
  • Excluir uma coleção
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);

await rep.DeleteAsync("d70e21fd-b9e3-430b-a934-778ce3a871b3");
  • Trazer uma coleção pelo Id
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);

Credit credit = await rep.FindAsync("d70e21fd-b9e3-430b-a934-778ce3a871b3");
  • Trazer todos as coleções
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);

IEnumerable<Credit> creditList = await rep.AllAsync();

Web ASP.Net

Para configurar um aplicação Web, é utilizado o Ninject.MVC5, que ao final da instalação do seu pacote terá um classe a ser configurada na pasta App_Start no arquivo NinjectWebCommon.cs.

No método void RegisterServices(IKernel kernel) faça:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ConnectionDocumentDB>()                
        .ToSelf()
        .WithConstructorArgument("url", ConfigurationManager.AppSettings["url"])
        .WithConstructorArgument("key", ConfigurationManager.AppSettings["key"])
        .WithConstructorArgument("database", ConfigurationManager.AppSettings["database"]);

    kernel.Bind<RepositoryCarAbstract>().To<RepositoryCar>();
    kernel.Bind<RepositoryCreditAbstract>().To<RepositoryCredit>();
}

Observação: foi configurado dentro do Web.config na chave appSettings as configurações de conexão, segue abaixo:

<appSettings>
    ...
 <add key="url" value="https://localhost:8081/"/>
 <add key="key" value="C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="/>
 <add key="database" value="Todo"/>
</appSettings>

Feito isso a sua aplicação Web está preparada para receber Injeção de Dependencia, como por exemplo esse controller:

public class CreditsController : Controller
{
    protected RepositoryCreditAbstract Repository { get; private set; }

    public CreditsController(RepositoryCreditAbstract repository)
    {
        Repository = repository;
    }
    
    public async Task<ActionResult> Index(int? page)
    {
        return View(await Repository.AllAsync());
    }
                
    public async Task<ActionResult> Details(string id)
    {            
        return View(await Repository.FindAsync(id));
    }

    public ActionResult Create()
    {
        return View();
    }
                
    [HttpPost]
    public async Task<ActionResult> Create(Credit credit)
    {
        try
        {
            credit = await Repository.InsertAsync(credit);
            if (string.IsNullOrEmpty(credit.Id))
                return RedirectToAction("Index");
            return RedirectToAction("Edit", new { id = credit.Id });
        }
        catch
        {
            return View();
        }
    }

    public async Task<ActionResult> Edit(string id)
    {
        return View(await Repository.FindAsync(id));
    }

    [HttpPost]
    public async Task<ActionResult> Edit(string id, Credit credit)
    {
        try
        {
            await Repository.UpdateAsync(credit, id);
            return RedirectToAction("Edit", new { id = credit.Id });
        }
        catch
        {
            return View();
        }
    }
        
    public async Task<ActionResult> Delete(string id)
    {
        return View(await Repository.FindAsync(id));
    }

    [HttpPost]
    public async Task<ActionResult> Delete(string id, Credit credit)
    {
        try
        {
            await Repository.DeleteAsync(id);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
}

A partir desse ponto gere todas as Views respectivas de cada método, onde o mesmo possibilitará as operações de CRUD para essa coleção.

Um exemplo de um registro gravado dessa coleção:

{
    "id": "d70e21fd-b9e3-430b-a934-778ce3a871b3",
    "title": "LINGUA PORTUGUESA",
    "value": 200,
    "created": "2015-02-28T00:00:00",
    "active": true,
    "_rid": "aFh5AITdaQABAAAAAAAAAA==",
    "_self": "dbs/aFh5AA==/colls/aFh5AITdaQA=/docs/aFh5AITdaQABAAAAAAAAAA==/",
    "_etag": "\"00001400-0000-0000-0000-58ab120e0000\"",
    "_attachments": "attachments/",
    "_ts": 1487606286
}

About

CanducciDocumentDB

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published