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 class Container : AggregateRoot<Guid>, IMultiTenant
{ {
public Guid? TenantId { get; } 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> 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;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
@ -7,8 +8,8 @@ namespace Volo.Abp.BlobStoring.Database
{ {
public interface IContainerRepository : IBasicRepository<Container, Guid> 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)] [ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public class BlobStoringDatabaseDbContext : AbpDbContext<BlobStoringDatabaseDbContext>, IBlobStoringDatabaseDbContext public class BlobStoringDatabaseDbContext : AbpDbContext<BlobStoringDatabaseDbContext>, IBlobStoringDatabaseDbContext
{ {
/* Add DbSet for each Aggregate Root here. Example: public DbSet<Container> Containers { get; set; }
* public DbSet<Question> Questions { get; set; }
*/ public DbSet<Blob> Blobs { get; set; }
public BlobStoringDatabaseDbContext(DbContextOptions<BlobStoringDatabaseDbContext> options) public BlobStoringDatabaseDbContext(DbContextOptions<BlobStoringDatabaseDbContext> options)
: base(options) : base(options)
@ -21,7 +21,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{ {
base.OnModelCreating(builder); 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 Microsoft.EntityFrameworkCore; using System;
using Volo.Abp; using Volo.Abp.EntityFrameworkCore.Modeling;
namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
{ {
public static class BlobStoringDatabaseDbContextModelCreatingExtensions public static class BlobStoringDatabaseDbContextModelCreatingExtensions
{ {
public static void ConfigureDatabase( public static void ConfigureDatabaseBlobStoring(
this ModelBuilder builder, this ModelBuilder builder,
Action<BlobStoringDatabaseModelBuilderConfigurationOptions> optionsAction = null) Action<BlobStoringDatabaseModelBuilderConfigurationOptions> optionsAction = null)
{ {
@ -19,25 +19,28 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
optionsAction?.Invoke(options); 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 + "Blobs", options.Schema);
b.ToTable(options.TablePrefix + "Questions", options.Schema);
b.ConfigureByConvention(); b.ConfigureByConvention();
//Properties b.Property(p => p.Name).IsRequired().HasMaxLength(ContainerConsts.MaxNameLength);
b.Property(q => q.Title).IsRequired().HasMaxLength(QuestionConsts.MaxTitleLength); b.Property(p => p.ContainerId).IsRequired();
//Relations b.HasIndex(x => x.Name);
b.HasMany(question => question.Tags).WithOne().HasForeignKey(qt => qt.QuestionId);
//Indexes
b.HasIndex(q => q.CreationTime);
}); });
*/
} }
} }
} }

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 => context.Services.AddAbpDbContext<BlobStoringDatabaseDbContext>(options =>
{ {
/* Add custom repositories here. Example: options.AddRepository<Container, EfCoreContainerRepository>();
* options.AddRepository<Question, EfCoreQuestionRepository>();
*/ 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; using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
@ -6,8 +7,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] [ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public interface IBlobStoringDatabaseDbContext : IEfCoreDbContext public interface IBlobStoringDatabaseDbContext : IEfCoreDbContext
{ {
/* Add DbSet for each Aggregate Root here. Example: DbSet<Container> Containers { get; }
* DbSet<Question> Questions { 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; using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB namespace Volo.Abp.BlobStoring.Database.MongoDB
@ -6,15 +7,15 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] [ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public class BlobStoringDatabaseMongoDbContext : AbpMongoDbContext, IBlobStoringDatabaseMongoDbContext public class BlobStoringDatabaseMongoDbContext : AbpMongoDbContext, IBlobStoringDatabaseMongoDbContext
{ {
/* Add mongo collections here. Example: public IMongoCollection<Container> Containers => Collection<Container>();
* public IMongoCollection<Question> Questions => Collection<Question>();
*/ public IMongoCollection<Blob> Blobs => Collection<Blob>();
protected override void CreateModel(IMongoModelBuilder modelBuilder) protected override void CreateModel(IMongoModelBuilder modelBuilder)
{ {
base.CreateModel(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 System;
using Volo.Abp;
using Volo.Abp.MongoDB; using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB namespace Volo.Abp.BlobStoring.Database.MongoDB
{ {
public static class BlobStoringDatabaseMongoDbContextExtensions public static class BlobStoringDatabaseMongoDbContextExtensions
{ {
public static void ConfigureDatabase( public static void ConfigureDatabaseBlobStoring(
this IMongoModelBuilder builder, this IMongoModelBuilder builder,
Action<AbpMongoModelBuilderConfigurationOptions> optionsAction = null) Action<AbpMongoModelBuilderConfigurationOptions> optionsAction = null)
{ {
@ -17,6 +16,16 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
); );
optionsAction?.Invoke(options); 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 => context.Services.AddMongoDbContext<BlobStoringDatabaseMongoDbContext>(options =>
{ {
/* Add custom repositories here. Example: options.AddRepository<Container, MongoContainerRepository>();
* options.AddRepository<Question, MongoQuestionRepository>(); 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; using Volo.Abp.MongoDB;
namespace Volo.Abp.BlobStoring.Database.MongoDB namespace Volo.Abp.BlobStoring.Database.MongoDB
@ -6,8 +7,8 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB
[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] [ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)]
public interface IBlobStoringDatabaseMongoDbContext : IAbpMongoDbContext public interface IBlobStoringDatabaseMongoDbContext : IAbpMongoDbContext
{ {
/* Define mongo collections here. Example: IMongoCollection<Container> Containers { get; }
* IMongoCollection<Question> Questions { 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