Browse Source

Repositories implemented

pull/4161/head
Ahmet 6 years ago
parent
commit
05e43c99e2
  1. 7
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/ContainerConsts.cs
  2. 2
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Container.cs
  3. 6
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/IBlobRepository.cs
  4. 5
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/IContainerRepository.cs
  5. 9
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContext.cs
  6. 41
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContextModelCreatingExtensions.cs
  7. 6
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreModule.cs
  8. 47
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreBlobRepository.cs
  9. 26
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreContainerRepository.cs
  10. 9
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/IBlobStoringDatabaseDbContext.cs
  11. 11
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringDatabaseMongoDbContext.cs
  12. 13
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringDatabaseMongoDbContextExtensions.cs
  13. 5
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringDatabaseMongoDbModule.cs
  14. 9
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/IBlobStoringDatabaseMongoDbContext.cs
  15. 47
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoBlobRepository.cs
  16. 27
      modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoContainerRepository.cs

7
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/ContainerConsts.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.BlobStoring.Database
{
public static class ContainerConsts
{
public const int MaxNameLength = 64; // TODO: find best length
}
}

2
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Container.cs

@ -7,5 +7,7 @@ namespace Volo.Abp.BlobStoring.Database
public class Container : AggregateRoot<Guid>, IMultiTenant
{
public Guid? TenantId { get; }
public string Name { get; set; }
}
}

6
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/IBlobRepository.cs

@ -8,10 +8,10 @@ namespace Volo.Abp.BlobStoring.Database
{
public interface IBlobRepository : IBasicRepository<Blob, Guid>
{
Task<Blob> FindAsync(Guid containerId, [NotNull] string blobName, Guid? tenantId = null, CancellationToken cancellationToken = default);
Task<Blob> FindAsync(Guid containerId, [NotNull] string name, Guid? tenantId = null, CancellationToken cancellationToken = default);
Task<bool> ExistsAsync(Guid containerId, [NotNull] string blobName, Guid? tenantId = null, CancellationToken cancellationToken = default);
Task<bool> ExistsAsync(Guid containerId, [NotNull] string name, Guid? tenantId = null, CancellationToken cancellationToken = default);
Task<bool> DeleteAsync(Guid containerId, [NotNull] string blobName, Guid? tenantId = null, CancellationToken cancellationToken = default);
Task<bool> DeleteAsync(Guid containerId, [NotNull] string name, Guid? tenantId = null, CancellationToken cancellationToken = default);
}
}

5
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/IContainerRepository.cs

@ -1,4 +1,5 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Domain.Repositories;
@ -7,8 +8,8 @@ namespace Volo.Abp.BlobStoring.Database
{
public interface IContainerRepository : IBasicRepository<Container, Guid>
{
Task<Container> GetContainerAsync([NotNull] string name);
Task<Container> GetContainerAsync([NotNull] string name, CancellationToken cancellationToken = default);
Task<Container> FindContainerAsync([NotNull] string name);
Task<Container> FindContainerAsync([NotNull] string name, CancellationToken cancellationToken = default);
}
}

9
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContext.cs

@ -7,9 +7,9 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public class BlobStoringDatabaseDbContext : AbpDbContext<BlobStoringDatabaseDbContext>, IBlobStoringDatabaseDbContext
{
/* Add DbSet for each Aggregate Root here. Example:
* public DbSet<Question> Questions { get; set; }
*/
public DbSet<Container> Containers { get; set; }
public DbSet<Blob> Blobs { get; set; }
public BlobStoringDatabaseDbContext(DbContextOptions<BlobStoringDatabaseDbContext> options)
: base(options)
@ -21,7 +21,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{
base.OnModelCreating(builder);
builder.ConfigureDatabase();
builder.ConfigureDatabaseBlobStoring();
}
}
}

41
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContextModelCreatingExtensions.cs

@ -1,12 +1,12 @@
using System;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Microsoft.EntityFrameworkCore;
using System;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{
public static class BlobStoringDatabaseDbContextModelCreatingExtensions
{
public static void ConfigureDatabase(
public static void ConfigureDatabaseBlobStoring(
this ModelBuilder builder,
Action<BlobStoringDatabaseModelBuilderConfigurationOptions> optionsAction = null)
{
@ -19,25 +19,28 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
optionsAction?.Invoke(options);
/* Configure all entities here. Example:
builder.Entity<Container>(b =>
{
b.ToTable(options.TablePrefix + "Containers", options.Schema);
b.ConfigureByConvention();
builder.Entity<Question>(b =>
b.Property(p => p.Name).IsRequired().HasMaxLength(ContainerConsts.MaxNameLength);
b.HasIndex(x => x.Name);
});
builder.Entity<Blob>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + "Questions", options.Schema);
b.ToTable(options.TablePrefix + "Blobs", options.Schema);
b.ConfigureByConvention();
//Properties
b.Property(q => q.Title).IsRequired().HasMaxLength(QuestionConsts.MaxTitleLength);
//Relations
b.HasMany(question => question.Tags).WithOne().HasForeignKey(qt => qt.QuestionId);
//Indexes
b.HasIndex(q => q.CreationTime);
b.Property(p => p.Name).IsRequired().HasMaxLength(ContainerConsts.MaxNameLength);
b.Property(p => p.ContainerId).IsRequired();
b.HasIndex(x => x.Name);
});
*/
}
}
}

6
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreModule.cs

@ -14,9 +14,9 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{
context.Services.AddAbpDbContext<BlobStoringDatabaseDbContext>(options =>
{
/* Add custom repositories here. Example:
* options.AddRepository<Question, EfCoreQuestionRepository>();
*/
options.AddRepository<Container, EfCoreContainerRepository>();
options.AddRepository<Blob, EfCoreBlobRepository>();
});
}
}

47
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreBlobRepository.cs

@ -0,0 +1,47 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{
public class EfCoreBlobRepository : EfCoreRepository<IBlobStoringDatabaseDbContext, Blob, Guid>, IBlobRepository
{
public EfCoreBlobRepository(IDbContextProvider<IBlobStoringDatabaseDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public virtual async Task<Blob> FindAsync(Guid containerId, string name, Guid? tenantId = null, CancellationToken cancellationToken = default)
{
return await DbSet.FirstOrDefaultAsync(
x => x.ContainerId == containerId &&
x.Name == name &&
x.TenantId == tenantId,
GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> ExistsAsync(Guid containerId, string name, Guid? tenantId = null, CancellationToken cancellationToken = default)
{
return await DbSet.AnyAsync(
x => x.ContainerId == containerId &&
x.Name == name &&
x.TenantId == tenantId,
GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> DeleteAsync(Guid containerId, string name, Guid? tenantId = null, CancellationToken cancellationToken = default)
{
var blob = await FindAsync(containerId, name, tenantId, cancellationToken);
if (blob == null)
{
return false;
}
await base.DeleteAsync(blob.Id, cancellationToken: GetCancellationToken(cancellationToken));
return true;
}
}
}

26
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreContainerRepository.cs

@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{
public class EfCoreContainerRepository : EfCoreRepository<IBlobStoringDatabaseDbContext, Container, Guid>, IContainerRepository
{
public EfCoreContainerRepository(IDbContextProvider<IBlobStoringDatabaseDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public virtual async Task<Container> GetContainerAsync(string name, CancellationToken cancellationToken = default)
{
return await DbSet.FirstAsync(x => x.Name == name, GetCancellationToken(cancellationToken));
}
public virtual async Task<Container> FindContainerAsync(string name, CancellationToken cancellationToken = default)
{
return await DbSet.FirstOrDefaultAsync(x => x.Name == name, GetCancellationToken(cancellationToken));
}
}
}

9
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/IBlobStoringDatabaseDbContext.cs

@ -1,4 +1,5 @@
using Volo.Abp.Data;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
@ -6,8 +7,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public interface IBlobStoringDatabaseDbContext : IEfCoreDbContext
{
/* Add DbSet for each Aggregate Root here. Example:
* DbSet<Question> Questions { get; }
*/
DbSet<Container> Containers { get; }
DbSet<Blob> Blobs { get; }
}
}

11
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringDatabaseMongoDbContext.cs

@ -1,4 +1,5 @@
using Volo.Abp.Data;
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB
@ -6,15 +7,15 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public class BlobStoringDatabaseMongoDbContext : AbpMongoDbContext, IBlobStoringDatabaseMongoDbContext
{
/* Add mongo collections here. Example:
* public IMongoCollection<Question> Questions => Collection<Question>();
*/
public IMongoCollection<Container> Containers => Collection<Container>();
public IMongoCollection<Blob> Blobs => Collection<Blob>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);
modelBuilder.ConfigureDatabase();
modelBuilder.ConfigureDatabaseBlobStoring();
}
}
}

13
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringDatabaseMongoDbContextExtensions.cs

@ -1,12 +1,11 @@
using System;
using Volo.Abp;
using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB
{
public static class BlobStoringDatabaseMongoDbContextExtensions
{
public static void ConfigureDatabase(
public static void ConfigureDatabaseBlobStoring(
this IMongoModelBuilder builder,
Action<AbpMongoModelBuilderConfigurationOptions> optionsAction = null)
{
@ -17,6 +16,16 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
);
optionsAction?.Invoke(options);
builder.Entity<Container>(b =>
{
b.CollectionName = options.CollectionPrefix + "Containers";
});
builder.Entity<Blob>(b =>
{
b.CollectionName = options.CollectionPrefix + "Blobs";
});
}
}
}

5
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringDatabaseMongoDbModule.cs

@ -14,9 +14,8 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
{
context.Services.AddMongoDbContext<BlobStoringDatabaseMongoDbContext>(options =>
{
/* Add custom repositories here. Example:
* options.AddRepository<Question, MongoQuestionRepository>();
*/
options.AddRepository<Container, MongoContainerRepository>();
options.AddRepository<Blob, MongoBlobRepository>();
});
}
}

9
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/IBlobStoringDatabaseMongoDbContext.cs

@ -1,4 +1,5 @@
using Volo.Abp.Data;
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB
@ -6,8 +7,8 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public interface IBlobStoringDatabaseMongoDbContext : IAbpMongoDbContext
{
/* Define mongo collections here. Example:
* IMongoCollection<Question> Questions { get; }
*/
IMongoCollection<Container> Containers { get; }
IMongoCollection<Blob> Blobs { get; }
}
}

47
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoBlobRepository.cs

@ -0,0 +1,47 @@
using MongoDB.Driver.Linq;
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB
{
public class MongoBlobRepository : MongoDbRepository<IBlobStoringDatabaseMongoDbContext, Blob, Guid>, IBlobRepository
{
public MongoBlobRepository(IMongoDbContextProvider<IBlobStoringDatabaseMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public virtual async Task<Blob> FindAsync(Guid containerId, string name, Guid? tenantId = null, CancellationToken cancellationToken = default)
{
return await GetMongoQueryable().FirstOrDefaultAsync(
x => x.ContainerId == containerId &&
x.Name == name &&
x.TenantId == tenantId,
GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> ExistsAsync(Guid containerId, string name, Guid? tenantId = null, CancellationToken cancellationToken = default)
{
return await GetMongoQueryable().AnyAsync(
x => x.ContainerId == containerId &&
x.Name == name &&
x.TenantId == tenantId,
GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> DeleteAsync(Guid containerId, string name, Guid? tenantId = null, CancellationToken cancellationToken = default)
{
var blob = await FindAsync(containerId, name, tenantId, cancellationToken);
if (blob == null)
{
return false;
}
await base.DeleteAsync(blob, cancellationToken: GetCancellationToken(cancellationToken));
return true;
}
}
}

27
modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoContainerRepository.cs

@ -0,0 +1,27 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB
{
public class MongoContainerRepository : MongoDbRepository<IBlobStoringDatabaseMongoDbContext, Container, Guid>, IContainerRepository
{
public MongoContainerRepository(IMongoDbContextProvider<IBlobStoringDatabaseMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public virtual async Task<Container> GetContainerAsync(string name, CancellationToken cancellationToken = default)
{
return await GetMongoQueryable().Where(x => x.Name == name).FirstAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<Container> FindContainerAsync(string name, CancellationToken cancellationToken = default)
{
return await GetMongoQueryable().Where(x => x.Name == name).FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
}
}
Loading…
Cancel
Save